ArcMap / ArcPyを使用して複数のレイヤーのシンボルを変更しますか?


10

ArcMapまたはArcCatalogで複数のレイヤーのシンボルを変更する方法はありますか?複数のレイヤーのシンボルを一度に変更したい。


3
applySymbologyFromLayerを使用して、本当にシンプルなスクリプトツールを作成できます。レイヤーをダイアログボックスにドラッグアンドドロップするだけです。
Roy

複数のレイヤーのlyrファイルを作成してそれをドラッグする(または[データの追加]ボタンから追加する)と、lyrに保存されているすべてのシンボルとラベリング設定が適用されます。これを既存のレイヤーに適用するのではなく、この方法でそれらを再び取り込むことに注意してください。
Brad Nesom、2012年

@ BradNesom-提案に感謝しますが、私はすでに目次にある複数のレイヤーの記号を変更することについて具体的に話しています。基本的に、TOCの1つの(既存の)レイヤーからTOCの他の多くの(既存の)レイヤーにシンボルの「テンプレート」を適用します。
RyanKDalton 2012年

2
この機能がArcMapに組み込まれていない理由が
わかり

すべてのレイヤーを1つにマージしてから、その1つのレイヤーの色を変更しないのはなぜですか?
ロバート

回答:


11

編集 ESRIが提供するこのスクリプトを使用して、目前のタスクを完了することができます(以下と同じ考えです)。

import arcpy
arcpy.ApplySymbologyFromLayer_management("in_layer", "in_symbology_layer")

in_layer:シンボルが適用されるレイヤー。
フィーチャレイヤー;ラスターレイヤー; TINレイヤー;ネットワーク解析レイヤー

in_symbology_layer:このレイヤーのシンボルが入力レイヤーに適用されます。
フィーチャレイヤー; ラスターレイヤー; TINレイヤー; ネットワーク分析レイヤー

または、スタンドアロンスクリプトの形式でこれを拡張します(IDLEと考えてください)。

import arcpy
from arcpy import env

# Set the current workspace
env.workspace = "path/to/workspace"

# Set layer to apply symbology to
inputLayers = ["in_layer_first.lyr","in_layer_second.lyr","in_layer_third.lyr"]

# Set layer that output symbology will be based on
symbologyLayer = "in_symbology_layer.lyr"

# Apply the symbology from the symbology layer to the input layer
for layer in inputLayers:
    arcpy.ApplySymbologyFromLayer_management (layer, symbologyLayer)

本質的に、デザイン/スタイルに関して維持するシンボルレイヤー(in_symbology_layer)を作成します。次に、そのレイヤーシンボルを、コンテンツウィンドウにリストされている他の各レイヤーにコピーします。


前の回答

コンテンツウィンドウ/レイヤーリストで現在のレイヤーのスタイルを使用して、他のレイヤーに適用できます。

後続の各レイヤー(目的のスタイルレイヤーの下)>右クリック>プロパティ>シンボル>他のレイヤーからスタイルをインポート


こんにちはマイケル、答えてくれてありがとう。しかし、私は一度に複数のレイヤーに対してそれをすることを探していました。
Ramakrishna Billakanti 2012年

Ramakrishna、arcpyを使用してより良い解決策が見つかることを期待して、私の回答を編集しました。
Michael Markieta 2012年

13

同じ問題があり、別の解決策を見つけました。シンプルで本当に実用的で、*。lyrファイルを作成する必要さえありません。

ArcGIS ModelBuilderエディターボックスで、以下のプロセスを設計しました。

  1. 変数を作成し、データ型を「layer」に定義します。そのプロパティで、「値のリスト」と「モデルパラメータ」として設定します。(オプション:識別しやすいように、オブジェクトの名前を「シンボル化するレイヤー」に変更します)。
  2. 変数を作成し、データ型を「layer」に定義します。プロパティで「モデルパラメータ」として設定します。(オプション:「Symbology Layer」に名前を変更します)。
  3. 通常は「C:\ Program Files \ ArcGIS \ Desktop10.2 \ ArcToolbox \ Toolboxes \ Data Management Tools.tbx \ Layers and Table Views」に「レイヤーからシンボルを適用」ツールを追加します。(オプション:出力オブジェクトの名前を「Symbolized Layers」に変更します)。
  4. ツールの「プロパティからシンボルをレイヤーに適用」のプロパティで、前提条件として「シンボル化するレイヤー」と「シンボロジーレイヤー」をチェックします。
  5. 「シンボル化するレイヤー」をツールに接続して、それを入力レイヤーとして設定します。
  6. 「Symbology Layer」をツールに接続して、それを入力レイヤーとして設定します。
  7. モデルエディターウィンドウを保存して閉じます。
  8. モデルを開くと、テーブルが表示されます。
  9. シンボルのテンプレートとして使用するレイヤーを、マッププロジェクトのコンテンツウィンドウ(TOC)からドラッグし、それぞれのテーブルフィールドにドロップします。「値の確認」ボタンをクリックします。
  10. 目次の複数のレイヤーを選択し、それらをそれぞれのテーブルフィールドにドラッグアンドドロップします。「値の確認」ボタンをクリックします。
  11. それを実行します。
  12. F5をクリックしてマップ表示を更新します。

注:異なるタイプの形状のレイヤーを同時に使用する場合は、おそらく機能しません。同じ名前のレイヤーを一度に使用すると、うまく機能しません。ベクター以外のレイヤーでは試しませんでした。

モデルビルダーの手順。

モデルを実行するときの手順。

モデルのpythonにエクスポートされたスクリプトは次のとおりです。

 # Import arcpy module
import arcpy

# Script arguments
Layers_to_symbolize = arcpy.GetParameterAsText(0)

Symbology_Layer = arcpy.GetParameterAsText(1)

# Local variables:
Symbolized_Layers = Layers_to_symbolize

# Process: Apply Symbology From Layer
arcpy.ApplySymbologyFromLayer_management(Layers_to_symbolize, Symbology_Layer)

1
少なくともArcGIS 10.2の場合、ステップ6は「シンボルレイヤーとして設定するツールに「
シンボロジー

私はPythonを使用していて、正常に動作するforループを作成しましたが、それによってシンボルが更新されませんでした。最初に.mdxドキュメントを開き、dfを設定し、記号を更新してから、記号を変更する必要があることがわかりました。次に、モデルビルダーを使用して回答2を確認しました(これは、最初にPythonスクリプトを作成した方法です)。これははるかに簡単で時間もあまりかかりませんでした。さらに、他のデータセットに対してこれを実行できるようにツールを保存しました。
ハイディ教会

1
'Symbology from Layer'ツールをモデルビルダーに置くのではなく、ツールボックスで右クリックしてバッチとして実行することができます
アデレード卿

8

@Aaronのメッセージの直前に、@ Royからの情報を使用して、ArcToolboxスクリプトに組み込むことができる独自のソリューションを作成しました。下記参照:

# Import modules
import arcpy

#Get the current Map Document
mxd = arcpy.mapping.MapDocument("CURRENT")

# Script arguments
Template_Layer = arcpy.GetParameterAsText(0)
LayerList = arcpy.GetParameterAsText(1)
Layers_to_Symbolize = LayerList.split(";")

# Process: Apply Symbology From Layer
for UpdateLayer in Layers_to_Symbolize:
    arcpy.AddMessage("Updating: " + UpdateLayer)
    arcpy.ApplySymbologyFromLayer_management(UpdateLayer,Template_Layer)

# Refresh the Table of Contents to reflect the change
arcpy.RefreshTOC()

#Delete the MXD from memory
del mxd

この概念は、ツールバーの10.1 Pythonアドインの潜在的なツールと考えることができます。


4

以下にリンクされているツールボックスを使用して、一度に複数のレイヤーのシンボルを有効にするかなり簡単な方法を考え出しました。このツールボックスを追加したら、単一のシンボルレイヤーをドラッグアンドドロップしてから、シンボルを適用するすべてのレイヤー(ターゲット)をドラッグアンドドロップします。ジオタイプ(ライン、ポイント、ポリゴン)の一致に関する一般的なルールがここで適用される可能性があります。ツールが実行されると、何も起こらなかったように見えます。ディスプレイを更新します(F5)-ディスプレイは一致するシンボルで更新されます。レイヤーをクリックしてプロパティを表示し、[OK]をクリックすると、目次記号が更新されます。

ツールボックスのZipファイルをここからダウンロードします。

これが簡単な場合のスクリプトは次のとおりです。

import arcpy

# Script arguments
Target_Layers = arcpy.GetParameterAsText(0)
if Target_Layers == '#' or not Target_Layers:
Target_Layers = "LayersToBeChanged" # provide a default value if unspecified

Symbology_Layer = arcpy.GetParameterAsText(1)
if Symbology_Layer == '#' or not Symbology_Layer:
Symbology_Layer = "SymbologyLayer" # provide a default value if unspecified

# Local variables:
Output_Symbology = Symbology_Layer

# Process: Apply Symbology From Layer (3)
arcpy.ApplySymbologyFromLayer_management(Target_Layers, Symbology_Layer)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.