どのように私はPythonスクリプトを経由してArcGISでシェープファイルを追加できますか?

StackOverflow https://stackoverflow.com/questions/4017896

  •  26-09-2019
  •  | 
  •  

質問

私は、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
私はそれらを開くことができるようにする必要がありますので、しかし、私の生データは常に、シェイプファイルである起こっています。 (Equivantly:それを開くwiothoutレイヤファイルにシェイプファイルを変換するが、私はそれを行うことを希望されない)。

役に立ちましたか?

解決

変数「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

他のヒント

最近、同様のタスクに苦労、そして最初に、マップドキュメントを識別するデータフレームを識別し、層を作成し、マップドキュメントの層を添加する方法を用います。興味深いことに、これは、次のすべては、それが現在のマップドキュメント内から呼び出されて使用して達成することができます。

# 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]
2つの入力を必要とする

メイクフィーチャレイヤ、入力機能と出力層。入力機能は、フィーチャクラスまたはレイヤのいずれかのタイプにすることができます。これは、シェープファイルを含んでいます。出力層は、目次に表示するレイヤーの名前です。

また、フィーチャレイヤは、作成時に定義クエリを作成するには、where句を受け入れることができますしてください。これは通常、すぐに別の定義クエリを持つ層の多くを作成するために必要とするとき、私は、それを実装する方法です。

それは必要ではないが、

最後に、上記のコードでは、私はこれが必要後であれば層はarcpy.mappingを使用して、コンテンツのテーブルで操作することができるように、ツールの出力結果の変数を移入する方法を実証スクリプトインチすべてのツールは、結果オブジェクトを返します。結果オブジェクトの出力は、getOutputメソッドを使用してアクセスすることができるが、それはこの場合にも、興味のある結果プロパティのインデックスを使用してアクセスすることができ、インデックス0に位置する出力

scroll top