4

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

これまでにできる最善の方法は、以下を使用して現在のマップにレイヤーファイルを追加することです(「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

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

4

2 に答える 2

6

変数「theShape」は、追加するシェープファイルのパスです。

import arcpy
import arcpy.mapping
# 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(theShape)  

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

# Refresh things
arcpy.RefreshActiveView()
arcpy.RefreshTOC()
del mxd, df, newlayer
于 2011-11-24T18:02:55.113 に答える
1

最近、私は同様のタスクに苦労し、最初はマップドキュメントの識別、データフレームの識別、レイヤーの作成、およびマップドキュメントへのレイヤーの追加の方法を使用しました。興味深いことに、これはすべて、現在のマップドキュメント内から呼び出されれば、以下を使用して実行できます。

# import modules
import arcpy

# create layer in TOC and reference it in a variable for possible other actions
newLyr = arcpy.MakeFeatureLayer_managment(
    in_features, 
    out_layer
)[0]

Make Feature Layerには、入力フィーチャと出力レイヤーの2つの入力が必要です。入力フィーチャは、任意のタイプのフィーチャクラスまたはレイヤーにすることができます。これにはシェープファイルが含まれます。出力レイヤーは、目次に表示されるレイヤーの名前です。

また、Make Feature Layerはwhere句を受け入れて、作成時に定義クエリを作成できます。これは通常、さまざまな定義クエリを使用して多数のレイヤーをすばやく作成する必要がある場合に、私が実装する方法です。

最後に、上記のスニペットでは、必須ではありませんが、ツール出力の結果を変数に入力して、スクリプトの後半で必要になった場合に、arcpy.mappingを使用してレイヤーを目次に操作できるようにする方法を示しました。 。すべてのツールは結果オブジェクトを返します。結果オブジェクトの出力には、getOutputメソッドを使用してアクセスできますが、目的の結果プロパティのインデックス(この場合はインデックス0にある出力)を使用してアクセスすることもできます。

于 2014-07-23T13:01:06.657 に答える