Tangani layer anotasi dengan arcpy

10

Saya ingin mengakses lapisan penjelasan menggunakan arcpy (tujuannya adalah untuk memverifikasi beberapa string teks dalam anotasi teks). Maksud saya maksudkan penjelasan alat menggambar , bukan label dinamis. Lapisan penjelasan ini berada di bawah lapisan grup dengan nama 'Default'.

The dokumentasi Esri berbicara tentang imbang penjelasan sebagai lapisan sendiri:

Pada dasarnya ada tiga kategori lapisan dalam dokumen peta: lapisan fitur, lapisan grup, dan lapisan raster. Properti isFeatureLayer, isGroupLayer, dan isRasterLayer memungkinkan Anda untuk mengidentifikasi atau mengisolasi sebagian besar jenis lapisan tetapi tidak semua jenis lapisan. Ada beberapa lapisan dan dataset khusus yang tidak termasuk dalam salah satu dari tiga kategori ini: subclass anotasi, fitur dimensi, set data jaringan, set data medan, set data topologi, dan sebagainya. Dalam kasus ini, Anda mungkin perlu menguji properti lain untuk mengisolasi lapisan minat sebelum melakukan sesuatu.

Satu hal yang perlu diperhatikan adalah bagaimana ArcGIS menangani menggambar anotasi , dua konfigurasi rata-rata dimungkinkan:

ArcGIS sepenuhnya mendukung dua jenis anotasi: geodatabase dan dokumen peta

Dalam kasus saya, ini dokumen peta.


Mengingat semua dokumentasi ini, tampak bahwa menggambar anotasi hanyalah lapisan, sehingga kode sederhana seperti ini harus berfungsi:

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

Tapi masalahnya adalah penjelasannya sepertinya tidak bisa diperoleh melalui dataframe (yang aneh mengingat masing-masing lapisan penjelasan saya dikaitkan dengan lapisan fitur).


Adakah kelas arcpy khusus untuk mengakses anotasi (satu sebanding dengan IAnnotationFeature2 dari ArcObject SDK)? Ada solusi?

Terima kasih!

Akheloes
sumber
Apakah Anda berhasil memodifikasi grup anotasi dokumen peta Anda melalui comptypes dan ArcObjects? Adakah petunjuk untuk informasi lebih lanjut? Terimakasih banyak!!
Hélène

Jawaban:

3

ArcPy tidak mengekspos semua ArcObjects. Dari apa yang bisa saya katakan, ini adalah salah satu dari banyak antarmuka yang tidak diekspos di ArcPy. Hanya elemen Tata Letak Halaman yang ditampilkan di arcpy: ListLayoutElements (arcpy.mapping)

Jika Anda perlu melakukan ini, satu-satunya pilihan Anda adalah ArcObjects. Jika Anda ingin menggunakan Python, lihat Bagaimana cara mengakses ArcObjects dari Python?

Kalau tidak, Anda mungkin ingin mencari atau membuat Ide ArcGIS tentang ini (satu-satunya ide yang relevan yang saya temukan adalah yang ini ).

blah238
sumber
Hai, saya agak mengharapkan jawaban ini, tetapi terima kasih dan +1 untuk tautannya, ini mungkin membantu.
Akheloes
@Akheloes Apakah Anda berhasil memodifikasi grup anotasi dokumen peta Anda melalui comptypes dan ArcObjects?
Hélène
0

Saya menambahkan respons jika orang lain menemukan ini. Anotasi dapat diakses melalui arcpy dan dapat diperlakukan sebagai layer. Kode tidak berfungsi karena tidak ada indeks, BUKAN karena anotasi tidak dapat diakses. Fungsi-fungsi ini mengembalikan daftar setiap kali, jadi bahkan jika Anda menggunakan wildcard (dalam hal ini " Layers " dan " current_annotation_layer "), Anda masih perlu menentukan indeks untuk mengambilnya dan menetapkannya ke objek ( masing-masing df & lyr ).

Kode harus:

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

Berikut ini contoh saya menggunakan arcpy untuk mengakses lapisan anotasi saya. Untuk peta saya, saya ingin anotasi dipindahkan di bawah topeng dengan transparansi 20% jika berada di luar bidang yang saya minati.

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")
Edward
sumber