Behandeln Sie Annotationsebenen mit arcpy


10

Ich möchte mit arcpy auf Annotationsebenen zugreifen (der Zweck besteht darin, einige Textzeichenfolgen in Textanmerkungen zu überprüfen). Mit Annotation meine ich Annotationen für Zeichenwerkzeuge , keine dynamischen Beschriftungen. Diese Annotationsebenen befinden sich unter einer Gruppenebene mit dem Namen "Standard".

In der Esri-Dokumentation wird von Zeichnungsanmerkungen als Ebenen selbst gesprochen:

In einem Kartendokument gibt es im Wesentlichen drei Kategorien von Ebenen: Feature-Ebenen, Gruppenebenen und Rasterebenen. Mit den Eigenschaften isFeatureLayer, isGroupLayer und isRasterLayer können Sie die meisten Ebenentypen, aber nicht alle Ebenentypen identifizieren oder isolieren. Es gibt einige spezielle Ebenen und Datensätze, die nicht in eine dieser drei Kategorien fallen: Anmerkungsunterklassen, Dimensionsmerkmale, Netzwerkdatensätze, Geländedatensätze, Topologiedatensätze usw. In diesen Fällen müssen Sie möglicherweise andere Eigenschaften testen, um eine interessierende Schicht zu isolieren, bevor Sie etwas dagegen tun können.

Beachten Sie, wie ArcGIS Zeichnungsanmerkungen verarbeitet . Zwei mittlere Konfigurationen sind möglich:

ArcGIS unterstützt zwei Arten von Anmerkungen vollständig: Geodatabase und Kartendokument

In meinem Fall ist es ein Kartendokument.


In Anbetracht all dieser Dokumentation scheint es, dass Zeichnungsanmerkungen nur Ebenen sind, daher sollte ein einfacher Code wie dieser funktionieren:

mxd = arcpy.mapping.MapDocument("some\mxdpath\here")
df = arcpy.mapping.ListDataFrames(mxd,"Layers")
lyr = arcpy.mapping.ListLayers(mxd,"current_annotation_layer",df) 

Das Problem ist jedoch, dass die Anmerkungen nicht über den Datenrahmen verfügbar zu sein scheinen (was seltsam ist, wenn man bedenkt, dass jede meiner Anmerkungsebenen einer Feature-Ebene zugeordnet ist).


Gibt es eine bestimmte Arcpy-Klasse für den Zugriff auf Anmerkungen (eine, die mit IAnnotationFeature2 von ArcObject SDK vergleichbar ist)? Irgendeine Problemumgehung?

Vielen Dank !


Haben Sie es geschafft, Ihre Annotationsgruppe für Kartendokumente über Comptypes und ArcObjects zu ändern? Irgendwelche Hinweise für weitere Infos? Danke vielmals!!
Hélène

Antworten:


3

ArcPy macht nicht alle ArcObjects verfügbar. Soweit ich weiß, ist dies eine der vielen Schnittstellen, die in ArcPy nicht verfügbar sind. In arcpy werden nur Seitenlayoutelemente angezeigt: ListLayoutElements (arcpy.mapping)

Wenn Sie dies tun müssen, haben Sie nur die Wahl zwischen ArcObjects. Wenn Sie Python verwenden möchten, lesen Sie Wie Wie greife ich von Python aus auf ArcObjects zu?

Andernfalls möchten Sie möglicherweise eine ArcGIS-Idee dazu suchen oder erstellen (die einzige relevante vorhandene Idee, die ich gefunden habe, war diese ).


Hallo, ich hatte diese Antwort irgendwie erwartet, aber danke und +1 für die Links, das könnte helfen.
Akheloes

@Akheloes Haben Sie es geschafft, Ihre Annotationsgruppe für Kartendokumente über Comptypes und ArcObjects zu ändern?
Hélène

0

Ich füge eine Antwort hinzu, falls andere darauf stoßen. Anmerkungen sind über arcpy zugänglich und können als Ebenen behandelt werden. Der Code hat nicht funktioniert, weil ein Index fehlt, NICHT weil auf Anmerkungen nicht zugegriffen werden kann. Diese Funktionen geben jedes Mal eine Liste zurück. Selbst wenn Sie einen Platzhalter verwenden (in diesem Fall " Layer " und " current_annotation_layer "), müssen Sie dennoch den Index angeben, um ihn abzurufen und einem Objekt zuzuweisen ( df & lyr ) ).

Code sollte sein:

df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0]
lyr = arcpy.mapping.ListDataFrames(mxd, "current_annotation_layer", df)[0]

Hier ist ein Beispiel, mit dem ich arcpy verwendet habe, um auf meine Anmerkungsebene zuzugreifen. Für meine Karte wollte ich, dass die Anmerkung unter eine Maske mit 20% Transparenz verschoben wird, wenn sie sich außerhalb meines Interessenbereichs befindet.

my_annotation_lyr = arcpy.mapping.Layer("Long_ProjectsAnno")
reference_lyr = arcpy.mapping.Layer("counties_mask")
arcpy.mapping.MoveLayer(df, reference_lyr, my_annotation_lyr, "AFTER")
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.