Pythonを使用してTOCにレイヤーを追加します


13

しばらくの間、TOCにレイヤーを追加することに取り組んでいます。追加したレイヤーを1つに管理しましたが、フォルダーをループしてすべてのレイヤーを追加する必要があります。シェープファイルをまったく追加できません。レイヤーファイルのみ。以下は私がいる場所のコードです:

for layer in shp_List:
mxd = arcpy.mapping.MapDocument("CURRENT")
dataFrame = arcpy.mapping.ListDataFrames(mxd, "*")[0]

outlayer = lyr
layerfile = os.path.join(base_Folder, lyr + ".lyr")

arcpy.MakeFeatureLayer_management(layer, outlayer)
arcpy.SaveToLayerFile_management(outlayer, layerfile, "ABSOLUTE")
addlayer = arcpy.mapping.Layer(layerfile)
arcpy.mapping.AddLayer(dataFrame, addlayer, "BOTTOM")



#addLayer = arcpy.mapping.Layer(layer)
#arcpy.mapping.AddLayer(dataFrame, addLayer, "BOTTOM")
#arcpy.RefreshTOC()
#arcpy.RefreshActiveView()
del addlayer, mxd

上記のコードは各レイヤーを目次に追加し、イライラさせてそれを削除し、次のレイヤーを追加します。スクリプト全体が終了すると、TOCには何も残りません。このスクリプトをモデルに追加し、派生した出力パラメーターを作成して、「表示に追加」をオンにしてモデルパラメーターとして追加しようとしました。また、ジオプロセシングオプションをチェックして、表示に追加するボックスがオンになっていることを確認しました。Arc 10を実行しています(サービスパックなし)。誰でも助けることができますか?

回答:


11

レイヤーを実行するループの外側でMapDocumentおよびDataFrameオブジェクトを作成する必要があります。それ以外の場合は、毎回元のマップから開始します。

だから私はこのコードで修正します:

mxd = arcpy.mapping.MapDocument("CURRENT")
dataFrame = arcpy.mapping.ListDataFrames(mxd, "*")[0]

for layer in shp_List:

    outlayer = layer + "_lyr" 
    layerfile = os.path.join(base_Folder, layer + ".lyr")

    arcpy.MakeFeatureLayer_management(layer, outlayer)
    arcpy.SaveToLayerFile_management(outlayer, layerfile, "ABSOLUTE")
    addlayer = arcpy.mapping.Layer(layerfile)
    arcpy.mapping.AddLayer(dataFrame, addlayer, "BOTTOM")



    #addLayer = arcpy.mapping.Layer(layer)
    #arcpy.mapping.AddLayer(dataFrame, addLayer, "BOTTOM")
arcpy.RefreshTOC()
arcpy.RefreshActiveView()
    #del addlayer, mxd

スクリプトの同じフォルダーにあるmxdファイルのリストをループするには、次のようにします。

for mxd_name in mxd_names:
    mxd = arcpy.mapping.MapDocument(os.path.dirname(os.path.realpath(__file__))+"\\"+mxd_name+".mxd")
   dataFrame = arcpy.mapping.ListDataFrames(mxd, "*")[0]

2
@geogeekの発言を探していましたが、欠けているようです。いずれにしても、彼の修正されたコードが示すように、レイヤーを実行するループの外側でMapDocumentおよびDataFrameオブジェクトを作成する必要があります。それ以外の場合は、毎回元のマップから始めています。
PolyGeo

1
明確化PolyGeoをありがとう。変更を実装しました。ただし、リストの最後のファイルだけが目次に残ります。他のすべてが表示されてから消えます。フルモックス。:)
オリバーバーデキン

1
うまくいきました!すべてインデントの権利ですか?出てくるレイヤーの名前は今でもごくわずかですが、それはただの美学です。助けてくれてありがとう!
オリバーバーデキン

1
geogeek、複数のmxdでどのように使用しますか?
newGIS

1
編集で答えを出した
-geogeek
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.