Answers:
我没有单独使用ArcMap应用程序,而是将ArcPy带入了图片。
我刚刚使用UniqueValuesSymbology(arcpy.mapping)类测试并实现了您所描述的内容,该类具有可写的classDescriptions属性,可以将其设置为:
字符串或数字的列表,代表每个唯一值的描述,这些唯一值可以有选择地出现在地图文档的图例中。只能通过右键单击“图层属性”对话框的“符号系统”选项卡中显示的符号,然后选择“编辑描述”,才能在ArcMap用户界面中访问这些值。classDescriptions列表需要具有与classValues属性相同数量的元素,并以相同的顺序排列。
该代码使用“ 搜索光标”将查找表读取到list中,然后将该列表写入图层的符号系统类的classDescriptions属性。请注意,查询表必须具有与唯一符号系统分类的值相同的行数和相同的顺序。我的代码需要进行增强以解决这种情况,但是在我的测试案例中,手动确保该顺序很容易。
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
您可以使用“唯一值多字段”对符号进行分类,然后为代码选择一个字段,为较长的描述选择第二个字段吗?那应该用“ [Field1],[Field2]”形式的字符串标记每个项目
它适用于较小的字段,我想它适用于较长的字符串,除非存在我不熟悉的限制。
唯一令人烦恼的部分是,您可能必须检查并从标签值的开头删除代码值,但这绝不是最糟糕的事情。
使用PolyGeo的代码工作,这就是我想出的解决问题的方法,即必须具有准确的项目数,并且查找值和描述之间必须具有相同的顺序匹配。完整的工作脚本在这里。
# 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