从表格中设置ArcMap布局图例的符号描述?


Answers:


7

我没有单独使用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

我整理了一些测试代码以查看是否可以正常工作,尽管没有错误生成,但更新后的描述并未将其返回到该层。我是arcpy贴图的新手,所以可能是我做错了。
Michael Stimson 2014年

那样有用吗?除了使用MapDocument(“ current”)和RefreshActiveView()/ RefreshTOC()之外,其他功能几乎相同,但没有任何更新。
Michael Stimson

1
@ MichaelMiles-Stimson是-它已按预期进行了更新-我怀疑您错过的是不是显示说明值的TOC,而是图例布局元素。插入其中之一,然后选择一个显示“说明”的图例项目样式,我认为它将可以正常工作。
PolyGeo

谢谢@polygeo!就是这样!一直以来,我一直在找错地方。
Michael Stimson

我解决了必须使描述和查找代码匹配的问题,请参见我的答案。
matt wilkie 2014年

1

您可以使用“唯一值多字段”对符号进行分类,然后为代码选择一个字段,为较长的描述选择第二个字段吗?那应该用“ [Field1],[Field2]”形式的字符串标记每个项目

它适用于较小的字段,我想它适用于较长的字符串,除非存在我不熟悉的限制。

唯一令人烦恼的部分是,您可能必须检查并从标签值的开头删除代码值,但这绝不是最糟糕的事情。


一个有趣的想法,在某些情况下可能会起作用。由于此处的描述表只是一个表,因此没有几何图形,但这在这里不起作用。可以加入几何图形和描述,但是我对该项目的额外工作或性能降低不感兴趣。
马特·威尔基2014年

1

使用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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.