Python / ArcPyを使用して、シェープファイルまたはフィーチャクラスをArcGIS Desktopのレイヤーとして追加しますか?


20

Pythonを使用して、ArcGIS Desktopのさまざまなタスク(ArcMapを一般的に使用)を自動化しようとしていますが、現在のマップにシェープファイルを追加する方法が必要です。(そして、それに対処しますが、それは別の話です)。

これまでにできる最善の方法は、次を使用して現在のマップにレイヤーファイルを追加することです(「addLayer」はレイヤーファイルオブジェクトです)。

def AddLayerFromLayerFile(addLayer):
 import arcpy
 mxd = arcpy.mapping.MapDocument("CURRENT")
 df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0]
 arcpy.mapping.AddLayer(df, addLayer, "AUTO_ARRANGE")
 arcpy.RefreshActiveView()
 arcpy.RefreshTOC()
 del mxd, df, addLayer

ただし、私の生データは常にシェープファイルであるため、それらを開くことができる必要があります。(同等:シェープファイルを開かずにレイヤーファイルに変換しますが、私はそれを行わないことを望みます)。

回答:


30

私が見つけたものは次のとおりです。

import arcpy
from arcpy import env

# get the map document
mxd = arcpy.mapping.MapDocument("CURRENT")

# get the data frame
df = arcpy.mapping.ListDataFrames(mxd,"*")[0]

# create a new layer
newlayer = arcpy.mapping.Layer(path_to_shapefile_or_feature_class)

# add the layer to the map at the bottom of the TOC in data frame 0
arcpy.mapping.AddLayer(df, newlayer,"BOTTOM")

このコードが新しいレイヤーを配置するデータフレーム(変数df)は、マップドキュメントの最初のデータフレームです。また、このコードは目次の下部に新しいレイヤーとしてデータを追加することに注意してください。他の配置オプション、「AUTO_ARRANGE」および「TOP」も使用できます。


2
データフレームを指定する別のオプションは、アクティブなデータフレームを使用することです:df = arcpy.mapping.ListDataFrames(mxd)[0]の代わりにdf = mxd.activeDataFrame-また、listdataframe呼び出しで「*」は必要ありません。
jbalk

10

フィーチャレイヤーの作成(データ管理) http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//00170000006p000000.htm

ArcMapのPythonウィンドウで試してみたところ、マップに直接追加されました(データフレームを取得してAddLayerを呼び出す必要はありませんでした)。

arcpy.MakeFeatureLayer_management('r:/temp/a.shp','test') 代替テキスト


これはイミディエイトウィンドウではうまく機能しますが、スクリプトファイルで同じコードを試して実行しても何も起こりません。(コードはエラーメッセージなしで実行されますが、ToCには何も表示されません)また、ToCからレイヤーを削除し、イミディエイトウィンドウでコードを再度実行しようとすると、「ファイルが既に存在します」タイプのエラーが表示されます。「テスト」レイヤーファイルはどこに保存されますか?
トムW

SP1をインストールしましたか?
ジェイソンシャイラー

1
@Tom W:私はpythonとarcpyの初心者です。しかし、レイヤーファイルが物理的に作成されるとは思わない。レイヤーファイルが必要な場合は、レイヤーファイルを作成して、パラメーターとしてレイヤー名を渡すarcpy.SaveToLayerFile_management('test', 'r:/temp/evilmonkey.lyr', 'ABSOLUTE') 必要がありますarcpy.Delete_management('test')
ジェイカミンズ

@Tom W:コメントを読み直してください。別のPythonシェル(イミディエイトウィンドウではありません)からArcMapにレイヤーを追加しようとしていますか?私はあなたがそれをすることができるとは思いませんでした(しかし、私はこれに関して権威ではありません...多分あなたはそうすることができます)。
ジェイカミンズ

1
@Tom W:そのレイヤーのバグについて知っているので、SP1がインストールされていることを確認していました。説明しているようにTOCにレイヤーを追加するには、スクリプトに派生出力フィーチャレイヤーを持たせ、作成したレイヤーの名前に値を設定する必要があります。ArcMapのGPツールは、TOCをGPツールのスプリアスレイヤー(一時FCなど)から保護しようとするため、スクリプトツールのパラメーターで、新しいフィーチャレイヤーがTOCにとどまるように定義する必要があります。レイヤーがディスク上に存在する場所は、FCのデータソースである可能性が高いため、ワークスペース上のレイヤーと同じ名前のフィーチャクラスです。
ジェイソンシャイラー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.