Saya mencoba untuk menulis makro python untuk ArcGIS 10.2 yang akan mengotomatiskan proses pelabelan poin dalam lapisan berdasarkan berbagai jenis apartemen. Misalnya, satu gaya apartemen akan memiliki kotak biru dengan teks tebal putih sebagai satu label; yang lain akan memiliki kotak merah muda dengan teks tebal hitam; yang lain akan memiliki kotak merah dengan teks tebal putih, dll.
Ekspresi atau fungsi apa yang akan Anda gunakan di arcpy untuk mengubah gaya label ini?
Saat ini, skrip memberi label apartemen dengan kode peta dan mengubah namanya di TOC menjadi apartemen, sebagaimana mestinya.
Sekarang saya ingin mengubah font, grafik, dan ukuran label agar terlihat membuat label unik untuk masing-masing, dan kemudian membuat tombol untuk menekan dan hanya mengotomatiskan proses kapan saja kita harus melakukan salah satu dari lapisan ini.
Apakah ada cara font, label, dan grafik dapat diubah dengan menggunakan skrip Python (ArcPy, IDLE, dll.)?
Saya memutuskan untuk mengedit posting ini untuk memberikan deskripsi akhir tentang apa yang akan saya lakukan di sini sehingga tidak ada kebingungan. Pada dasarnya, titik-titik pada peta akan berubah dari seperti gambar di atas menjadi ini:
Saya telah mencoba menggunakan lblClass.expression
fungsinya, namun kode yang saya coba gunakan tidak berfungsi. Saya pikir itu mungkin langkah ke arah yang benar. Di bawah ini adalah beberapa kode yang saya coba gunakan hanya untuk mendapatkan labelClass.expression untuk mengubah font label.
for lblClass in aptLayer.labelClasses:
lblClass.showClassLabels = True
def getLabel (Code, Type):
if Type == "MRR":
return "<FNT name = 'Arial' size = '12'>" & Code & "</FNT>"
elif Type == "TAX":
return "<FNT name = 'Arial' size = '12'>" & Code & "</FNT>"
elif Type == "MRT":
return "<FNT name = 'Arial' size = '12'>" & Code & "</FNT>"
elif Type == "GSS":
return "<FNT name = 'Arial' size = '12'>" & Code & "</FNT>"
elif Type == "TGS":
return "<FNT name = 'Arial' size = '12'>" & Code & "</FNT>"
else:
return "<FNT name = 'Arial' size = '12'>" & Code & "</FNT>"
lblClass.expression = getLabel( [Map_Code],[Type])
sumber
refocus_layer = arcpy.mapping.ListLayers(mxd, original_fc_name)[0]
ia mengeluarkan kesalahan yang mengatakan bahwa indeks berada di luar jangkauan.arcpy.mapping.ListLayers
metode ini tidak menemukan lapisan dalam mxd saat ini dengan nama yang sama dengan Andainput_layer_file
(indeks[0]
pengembalian indeks di luar jangkauan berarti tidak ada item dalam daftar).Traceback (most recent call last): File "E:\_Tyler Temp\Python\IanTest.py", line 30, in <module> refocus_layer = arcpy.mapping.ListLayers(mxd, original_fc_name)[0] IndexError: list index out of range
Pilihan lain adalah mengatur ekspresi label kustom pada layer (mengubah ukuran dan warna..etc) menggunakan python:
misalnya
Membangun ekspresi label
Mereka dapat diatur melalui:
LabelClass (arcpy.mapping)
EDIT:
Coba ini:
Anda dapat menghapus pernyataan baris Anda yang lain (untuk loop, labClass, dan panggilan ke fungsi). Juga, fungsi tersebut perlu disebut FindLabel.
sumber
def getLabel (Code, Type)
dan kemudian setelah menyiapkan pernyataan if-else untuk kode peta berbeda yang saya gunakan, saya kemudian mengatur 'lblClass.expression = getLabel ("[Map_Code]", "[Type]")', yang baru saja mengembalikan kesalahanTypeError: unsupported operand type(s) for &: 'str' and 'str'
pada dasarnya saya mengikuti contoh situs web Esri. Jika saya dapat membuktikan bahwa saya dapat mengubah font, saya kemudian dapat melanjutkan untuk menyesuaikan aspek yang lebih sulit (seperti bentuk, latar belakang dan warna label).