ArcPyスクリプトを使用してフィーチャレイヤーを削除しますか?


13

ArcPyベースのスクリプトがあり、2つのレイヤーを交差させようとしていますが、一方のレイヤーの重心はもう一方のレイヤーにある必要があります。

1つのレイヤー(以下のfeature_layer)には他のレイヤーの重心が含まれていることを知る必要があるため、arcpy.SelectLayerByLocation_management()ツールを使用しています。

マップドキュメント(* .mxd)を開いていないため、これを行うには、フィーチャレイヤーの作成を使用してフィードする必要があります。

ドキュメントには、プログラムが終了すると機能レイヤーが消えることが記載されていますが、以下のようなループになっているため、すぐに消える必要があります

for feature_class in large_list_of_feature_classes:
    some_function(feature_class)

def some_function():
    feature = "{path to feature class}"
    feature_layer = "feature_layer"
    HUCs_layer = "all_HUCs" #HUCs being Hydrologic Unit Codes

    arcpy.MakeFeatureLayer_management(feature, feature_layer)
    arcpy.MakeFeatureLayer_management(feature, HUCs_layer)      
    arcpy.SelectLayerByLocation_management(HUCs_layer, "HAVE_THEIR_CENTER_IN", feature_layer, selection_type="NEW_SELECTION")

    arcpy.CopyFeatures_management(HUCs_layer, selection_name)

フィーチャレイヤーを削除する機能を探していますが、見つけることができませんでした。

私はそこに何らかのカウントを入れて、プログラムの範囲内でそれぞれを一意にすることができますが、フィーチャレイヤーを削除する方法がない限り、それは理想的ではありません。

回答:


21

削除ツールは、TOCから削除するためにフィーチャレイヤーの名前を受け入れる必要があります。

ディスクからデータを完全に削除します。ArcGISでサポートされるすべてのタイプの地理データ、およびツールボックスとワークスペース(フォルダー、ジオデータベース)は削除できます。指定したアイテムがワークスペースの場合、含まれているすべてのアイテムも削除されます。

構文セクションの下に、削除できるデータタイプがリストされます。

データ要素; グラフ; レイヤー ; テーブルビュー


フィーチャレイヤーが削除されたことを確認するために削除ツールを2回使用する必要がある理由がわかりません。フィーチャレイヤーが実際に削除されていないにもかかわらず、この機能のgimmeエラーが発生することがあります。同じ名前を持つ
geogeek

2
これは実際には関連していませんが、ジオプロセシングの動作方法です。各レイヤーが一意の名前を持つことを期待しています。
ジェイソンシャイラー

1
おそらく、削除ツールを使用してTOCからレイヤーを削除する方法については、resources.arcgis.com / en / help / main / 10.1 / index.html#//…で詳しく説明されている可能性があります。削除されますが、他のレイヤーへの参照は行われず、「ディスクからデータを完全に削除する」という冒頭の文は、多くのユーザーを削除してレイヤーを削除しようとすることを恐れます。
PolyGeo

7

arcpy.mapping.RemoveLayerを呼び出して、TOCからレイヤーを削除できます。

マップドキュメント(* .mxd)のデータフレーム内のレイヤーを削除する機能を提供します。


提案をありがとう-私はマッピングコンテキストの外でこれを行うための何かを探していることを明確にしませんでした-これは単なる分析スクリプトであり、明示的なTOCはありません(または少なくとも知らない)。以下のジェイソンの提案はうまくいきました。ありがとう!後で私にとっても便利な機能になります。
ニックサン

3

これは、レイヤーを削除するために使用するものです。

arcpy.mapping.RemoveLayer( "DataFrame"、 "レイヤー名")

またはループ:

mxd = arcpy.mapping.MapDocument("CURRENT")
for df in arcpy.mapping.ListDataFrames(mxd):
    for lyr in arcpy.mapping.ListLayers(mxd, "", df):
        arcpy.mapping.RemoveLayer(df, lyr)

3

レイヤーが消えmxd.save()ないCURRENTようにするためではないマップドキュメントを使用している場合に使用します。また、スクリプトにprintステートメントを追加します。

mxd = arcpy.mapping.MapDocument("CURRENT")
df = arcpy.mapping.ListDataFrames(mxd)[0]

for i in arcpy.mapping.ListLayers(mxd , "TerraColor_SanFrancisco_US_15m.tif"):
    print "Deleting layer", i
    arcpy.mapping.RemoveLayer(df , i)

arcpy.RefreshActiveView()

削除するレイヤーを見つけていることを確認するだけです。


-1

これを試して:

import arcpy
from arcpy import env
env.workspace = r"F:\Projects\ohad\derech_atankim\gis"   
for mxdname in arcpy.ListFiles("*.mxd"):
    print mxdname 
    mxd = arcpy.mapping.MapDocument(r"F:\Projects\ohad\derech_atankim\gis\\" + mxdname)
    df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0]
    for lyr in arcpy.mapping.ListLayers(mxd, "", df):
        if lyr.dataSource == r"F:\Projects\ohad\derech_atankim\gis\layers\roads.lyr":
            arcpy.mapping.RemoveLayer(df, lyr)
    mxd.save()
del mxd
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.