回答:
ArcMapアプリケーションを単独で使用するのではなく、ArcPyを使用しました。
説明した内容を、次のように設定できる書き込み可能なclassDescriptionsプロパティを持つUniqueValuesSymbology(arcpy.mapping)クラスを使用してテストし、達成しました。
マップドキュメントの凡例にオプションで表示できる一意の各値の説明を表す文字列または数値のリスト。これらの値にアクセスするには、ArcMapユーザーインターフェイスで、[レイヤープロパティ]ダイアログボックスの[シンボル]タブに表示されているシンボルを右クリックし、[説明の編集]を選択します。classDescriptionsリストは、classValuesプロパティと同じ数の要素を持ち、同じ順序で配置する必要があります。
コードは、検索カーソルを使用してルックアップテーブルをリストに読み込み、そのリストをレイヤーのシンボルクラスの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
シンボルを「ユニークな値、多くのフィールド」で分類し、コード用に1つのフィールドを選択し、長い説明用に2番目のフィールドを選択できますか?これは、各項目に "[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