テーブルからArcMapレイアウトの凡例のシンボルの説明を設定しますか?


回答:


7

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

これが機能するかどうかを確認するためにいくつかのテストコードをまとめました。エラーは生成されませんが、更新された説明ではレイヤーに戻りません。私はマッピングのアークピーが初めてなので、おそらく私が間違ったことをしています。
マイケル・スティムソン2014年

それは動作しますか?MapDocument( "current")とRefreshActiveView()/ RefreshTOC()を使用している以外はほとんど同じですが、何も更新されません。
Michael Stimson 2014年

1
@ MichaelMiles-Stimsonはい-意図したとおりに更新されました-見落としているのは、説明の値を表示するのはTOCではなく、凡例レイアウト要素であることです。それらの1つを挿入し、説明を表示する凡例項目スタイルを選択します。それが機能することが明らかになると思います。
PolyGeo

@polygeoありがとうございます!それはまさにそれです!私は間違った場所を探していただけです。
Michael Stimson 2014年

説明とルックアップコードを一致させる必要があるという問題を解決しました。私の回答を参照してください。
マットウィルキー2014

1

シンボルを「ユニークな値、多くのフィールド」で分類し、コード用に1つのフィールドを選択し、長い説明用に2番目のフィールドを選択できますか?これは、各項目に "[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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.