ArcMap, sembol listesindeki her öğe için genişletilmiş bir açıklama gösterebilir. Bu özelliği bir tablodan nasıl doldurabilirim? Amaç, açıklamayı eklemek için her sembolü tek tek düzenlemek zorunda kalmamaktır .
ArcMap, sembol listesindeki her öğe için genişletilmiş bir açıklama gösterebilir. Bu özelliği bir tablodan nasıl doldurabilirim? Amaç, açıklamayı eklemek için her sembolü tek tek düzenlemek zorunda kalmamaktır .
Yanıtlar:
Sadece ArcMap uygulamasını kullanmaya çalışmak yerine, ArcPy'yi resme getirdim.
Ben sadece test ve yazılabilir classDescription özelliği ayarlanabilir olan UniqueValuesSymbology (arcpy.mapping) sınıfı kullanarak açıkladığınız elde :
İsteğe bağlı olarak bir harita belgesinin göstergesinde görünebilen her bir benzersiz değerin açıklamalarını temsil eden dizelerin veya sayıların listesi. Bu değerlere ArcMap kullanıcı arayüzünde yalnızca Katman Özellikleri iletişim kutusundaki Semboloji sekmesinde görüntülenen bir simgeye sağ tıklayıp Açıklamayı Düzenle seçilerek erişilebilir. ClassDescription listesinin aynı sayıda öğeye sahip olması ve classValues özelliğiyle aynı sırada düzenlenmesi gerekir.
Kod , arama tablosunu bir liste halinde okumak için bir Arama İmleci kullanır ve ardından bu listeyi katmanın semboloji sınıfının classDescription özelliğine yazar. Not arama tablosu satır aynı sayıda ve benzersiz semboloji sınıflandırma değerlerinin aynı sırada OLMALIDIR . Kodumun durumun böyle olmadığını ancak test durumumda bu siparişin manuel olarak olduğundan emin olmasını sağlamak için geliştirilmesi gerekir.
import arcpy
vegDescList = []
vegCodes = arcpy.SearchCursor(r"C:\temp\test.gdb\LookupTable")
for vegCode in vegCodes:
vegDescList.append(vegCode.Description)
mxd = arcpy.mapping.MapDocument(r"C:\temp\test.mxd")
lyr = arcpy.mapping.ListLayers(mxd,"testFC")[0]
if lyr.symbologyType == "UNIQUE_VALUES":
lyr.symbology.classDescriptions = vegDescList
mxd.save()
del mxd
Sembollerinizi "Benzersiz Değerler Birçok Alan" ile sınıflandırabilir ve kod için bir alan ve daha uzun açıklama için ikinci alan seçebilir misiniz? Bu, her öğeyi "[Alan1], [Alan2]" biçiminde bir dize ile etiketlemelidir
Daha küçük alanlarla çalışır, bilmediğim bir sınırlama olmadığı sürece daha uzun dizelerle olacağını hayal ediyorum.
Tek can sıkıcı kısım, kod değerini etiket değerinin başından itibaren silmek ve silmek zorunda kalabileceğinizdir, ancak bu şimdiye kadar olan en kötü şey olmayacaktır.
PolyGeo'nun kodundan çalışarak, tam olarak öğe sayısına ve arama değerleri ile açıklama arasında aynı sipariş eşleşmesine sahip olma sorununu çözmek için buldum. Tam çalışma betiği burada .
# name and path of the lookup table
lookup_table = r"..\default.gdb\vegMajorComm_Lookup"
# change these to match the relevant field names in the lookup table
code = 'VegCode'
description = 'Description'
##...snip...
# build the descriptions dictionary
descriptions = {}
rows = arcpy.SearchCursor(lookup_table)
for item in rows:
#print item.getValue(code), item.getValue(description)
descriptions[item.getValue(code)] = item.getValue(description)
# lyr.symbology requires the classValues and classDescriptions to have
# same number of rows and be in same order. So extract only matching
# elements from the description dictionary
desclist = []
if lyr.symbologyType == "UNIQUE_VALUES":
#extract matches
for symbol in lyr.symbology.classValues:
desclist.append(descriptions[symbol])
# assign the descriptions
lyr.symbology.classDescriptions = desclist
mxd.saveACopy(output_map)
del mxd