Obsługa warstw adnotacji za pomocą arcpy


10

Chcę uzyskać dostęp do warstw adnotacji za pomocą arcpy (celem jest sprawdzenie kilku ciągów tekstowych w adnotacjach tekstowych). Przez adnotacje mam na myśli rysowanie adnotacji narzędzia , a nie dynamiczne etykiety. Te warstwy adnotacji znajdują się pod warstwą grup o nazwie „Domyślne”.

Dokumentacja Esri mówi o narysowaniu adnotacji jako o samych warstwach:

W dokumencie mapy są zasadniczo trzy kategorie warstw: warstwy obiektów, warstwy grup i warstwy rastrowe. Właściwości isFeatureLayer, isGroupLayer i isRasterLayer umożliwiają identyfikację lub izolację większości typów warstw, ale nie wszystkich typów warstw. Istnieje kilka wyspecjalizowanych warstw i zestawów danych, które nie należą do jednej z tych trzech kategorii: podklasy adnotacji, funkcje wymiarowe, zestawy danych sieciowych, zestawy danych terenu, zestawy danych topologii i tak dalej. W takich przypadkach może być konieczne przetestowanie innych właściwości w celu wyizolowania interesującej warstwy przed zrobieniem czegoś.

Należy pamiętać, w jaki sposób uchwyty ArcGIS rysują adnotacje. Możliwe są dwie średnie konfiguracje:

ArcGIS w pełni obsługuje dwa typy adnotacji: bazę danych i dokument mapy

W moim przypadku jest to dokument mapy.


W świetle całej tej dokumentacji wydaje się, że adnotacje rysunkowe są zwykłymi warstwami, dlatego prosty kod taki jak ten powinien działać:

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

Problem polega jednak na tym, że adnotacje nie wydają się możliwe do uzyskania przez ramkę danych (co jest dziwne, biorąc pod uwagę, że każda z moich warstw adnotacji jest powiązana z warstwą cech).


Jakaś konkretna klasa arcpy, która ma dostęp do adnotacji (jedna porównywalna z IAnnotationFeature2 z ArcObject SDK)? Jakieś obejście?

Dzięki !


Czy udało Ci się zmodyfikować grupę adnotacji w dokumencie mapy za pomocą typów i ArcObjects? Wszelkie wskazówki dotyczące dalszych informacji? Wielkie dzięki!!
Hélène

Odpowiedzi:


3

ArcPy nie ujawnia wszystkich ArcObjects. Z tego, co mogę powiedzieć, jest to jeden z wielu interfejsów, które nie są dostępne w ArcPy. Tylko elementy układu strony są widoczne w arcpy: ListLayoutElements (arcpy.mapping)

Jeśli musisz to zrobić, jedynym wyborem jest ArcObjects. Jeśli chcesz korzystać z Pythona, zobacz Jak uzyskać dostęp do ArcObjects z Pythona?

W przeciwnym razie możesz poszukać lub stworzyć na ten temat Pomysł ArcGIS (jedynym istotnym istniejącym pomysłem, jaki znalazłem, był ten ).


Cześć, spodziewałem się takiej odpowiedzi, ale dzięki i +1 za linki, to może pomóc.
Akheloes

@Akheloes Czy udało Ci się zmodyfikować grupę adnotacji w dokumencie mapy za pomocą typów i ArcObjects?
Hélène

0

Dodam odpowiedź na wypadek, gdyby inni się na to natknęli. Adnotacje są dostępne za pośrednictwem arcpy i mogą być traktowane jako warstwy. Kod nie działał, ponieważ brakuje indeksu, NIE dlatego, że adnotacje nie są dostępne. Funkcje te zwracają listę za każdym razem, więc nawet jeśli używasz wieloznaczny (w tym przypadku „ Warstwy ” i „ current_annotation_layer ”), trzeba jeszcze określić indeks pobrać go i przypisać go do obiektu ( df & LYR odpowiednio ).

Kod powinien być:

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

Oto przykład, w którym użyłem arcpy, aby uzyskać dostęp do mojej warstwy adnotacji. W przypadku mojej mapy chciałem umieścić adnotację pod maską z 20% przezroczystością, jeśli będzie poza moim obszarem zainteresowania.

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")
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.