Manejar capas de anotación con arcpy

10

Quiero acceder a las capas de anotación usando arcpy (el propósito es verificar algunas cadenas de texto en las anotaciones de texto). Por anotación quiero decir anotaciones de herramientas de dibujo , no etiquetas dinámicas. Estas capas de anotación están debajo de una capa de grupos con el nombre de 'Predeterminado'.

La documentación de Esri habla de la anotación de dibujo como capas en sí mismas:

Básicamente, hay tres categorías de capas en un documento de mapa: capas de entidades, capas de grupos y capas ráster. Las propiedades isFeatureLayer, isGroupLayer e isRasterLayer le permiten identificar o aislar la mayoría de los tipos de capa pero no todos los tipos de capa. Hay algunas capas y conjuntos de datos especializados que no se incluyen en una de estas tres categorías: subclases de anotación, características de dimensión, conjuntos de datos de red, conjuntos de datos de terreno, conjuntos de datos de topología, etc. En estos casos, es posible que deba probar otras propiedades para aislar una capa de interés antes de hacerle algo.

Una cosa a tener en cuenta es cómo ArcGIS maneja las anotaciones de dibujo , son posibles dos configuraciones medias:

ArcGIS es totalmente compatible con dos tipos de anotación: geodatabase y documento de mapa

En mi caso, es un documento de mapa.


A la luz de toda esta documentación, parece que las anotaciones de dibujo son meras capas, por lo que un código simple como este debería funcionar:

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

Pero el problema es que las anotaciones no parecen obtenibles a través del marco de datos (lo cual es extraño teniendo en cuenta que cada una de mis capas de anotaciones está asociada a una capa de entidades).


¿Alguna clase específica de arcpy para acceder a las anotaciones (una comparable a IAnnotationFeature2 de ArcObject SDK)? ¿Alguna solución?

Gracias !

Akheloes
fuente
¿Se las arregló para modificar su grupo de anotaciones de documentos de mapa a través de comptypes y ArcObjects? ¿Alguna sugerencia para más información? ¡¡Muchas gracias!!
Hélène

Respuestas:

3

ArcPy no expone todos los ArcObjects. Por lo que puedo decir, esta es una de las muchas interfaces que no están expuestas en ArcPy. Solo los elementos de diseño de página están expuestos en arcpy: ListLayoutElements (arcpy.mapping)

Si necesita hacer esto, su única opción es ArcObjects. Si desea usar Python, consulte ¿Cómo accedo a ArcObjects desde Python?

De lo contrario, es posible que desee buscar o crear una Idea ArcGIS sobre esto (la única idea existente relevante que encontré fue esta ).

blah238
fuente
Hola, esperaba esta respuesta, pero gracias y +1 por los enlaces, esto podría ayudar.
Akheloes
@Akheloes ¿Logró modificar su grupo de anotaciones de documentos de mapa a través de comptypes y ArcObjects?
Hélène
0

Estoy agregando una respuesta en caso de que otros tropiecen con esto. Las anotaciones SON accesibles a través de arcpy y se pueden tratar como capas. El código no funcionó porque le falta un índice, NO porque no se pueda acceder a las anotaciones. Estas funciones devuelven una lista cada vez, por lo que incluso si está utilizando un comodín (en este caso, " Capas " y " capa_notación_actual "), aún debe especificar el índice para recuperarlo y asignarlo a un objeto ( df y lyr respectivamente )

El código debe ser:

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

Aquí hay un ejemplo que usé arcpy para acceder a mi capa de anotación. Para mi mapa, quería que la anotación se moviera debajo de una máscara con un 20% de transparencia si estaba fuera de mi área de interés.

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")
Eduardo
fuente