Gestisci i livelli di annotazione con arcpy


10

Voglio accedere ai livelli di annotazione usando arcpy (lo scopo è verificare poche stringhe di testo nelle annotazioni di testo). Per annotazione intendo le annotazioni degli strumenti di disegno , non le etichette dinamiche. Questi livelli di annotazione si trovano sotto un livello di gruppi con il nome "Predefinito".

La documentazione di Esri parla dell'annotazione del disegno come dei livelli stessi:

Esistono essenzialmente tre categorie di livelli in un documento della mappa: feature layer, layer di gruppo e layer raster. Le proprietà isFeatureLayer, isGroupLayer e isRasterLayer consentono di identificare o isolare la maggior parte dei tipi di layer ma non tutti i tipi di layer. Esistono alcuni livelli e set di dati specializzati che non rientrano in una di queste tre categorie: sottoclassi di annotazioni, funzioni di dimensione, set di dati di rete, set di dati del terreno, set di dati della topologia e così via. In questi casi potrebbe essere necessario testare altre proprietà per isolare uno strato di interesse prima di eseguire operazioni su di esso.

Una cosa da tenere presente è come ArcGIS gestisce le annotazioni di disegno , sono possibili due configurazioni medie:

ArcGIS supporta completamente due tipi di annotazioni: geodatabase e documento mappa

Nel mio caso, è un documento cartografico.


Alla luce di tutta questa documentazione, sembra così che le annotazioni di disegno siano semplici livelli, quindi un semplice codice come questo dovrebbe funzionare:

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

Ma il problema è che le annotazioni non sembrano ottenibili tramite il frame di dati (il che è strano considerando che ciascuno dei miei livelli di annotazione è associato a un livello di funzionalità).


Qualche classe arcpica specifica per accedere alle annotazioni (una paragonabile a IAnnotationFeature2 di ArcObject SDK)? Qualche soluzione?

Grazie !


Sei riuscito a modificare il gruppo di annotazioni del documento della mappa tramite i tipi e ArcObjects? Qualche suggerimento per ulteriori informazioni? Grazie molto!!
Hélène,

Risposte:


3

ArcPy non espone tutti gli ArcObjects. Da quello che posso dire, questa è una delle molte interfacce che non sono esposte in ArcPy. Solo gli elementi di layout di pagina sono esposti in arcpy: ListLayoutElements (arcpy.mapping)

Se è necessario eseguire questa operazione, l'unica scelta è ArcObjects. Se si desidera utilizzare Python, vedere Come si accede ad ArcObjects da Python?

Altrimenti potresti voler cercare o creare un'idea ArcGIS su questo (l'unica idea esistente rilevante che ho trovato era questa ).


Ciao, mi aspettavo un po 'questa risposta, ma grazie e +1 per i collegamenti, questo potrebbe aiutare.
Akheloes,

@Akheloes Sei riuscito a modificare il gruppo di annotazioni del documento della mappa tramite comptypes e ArcObjects?
Hélène,

0

Sto aggiungendo una risposta nel caso in cui altri si imbattano in questo. Le annotazioni sono accessibili tramite arcpy e possono essere trattate come livelli. Il codice non ha funzionato perché manca un indice, NON perché le annotazioni non sono accessibili. Queste funzioni restituiscono un elenco ogni volta, quindi anche se si utilizza un carattere jolly (in questo caso " Livelli " e " current_annotation_layer "), è comunque necessario specificare l'indice per recuperarlo e assegnarlo a un oggetto ( rispettivamente df & lyr ).

Il codice dovrebbe essere:

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

Ecco un esempio che ho usato arcpy per accedere al mio livello di annotazione. Per la mia mappa, volevo che l'annotazione venisse spostata sotto una maschera con una trasparenza del 20% se fosse al di fuori della mia area di interesse.

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")
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.