ArcPy 스크립트를 사용하여 피처 레이어를 제거 하시겠습니까?


13

한 레이어가 다른 레이어에서 중심을 가져야하는 두 레이어를 교차시키려는 ArcPy 기반 스크립트가 있습니다.

한 레이어 (아래의 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가 지원하는 모든 유형의 지리 데이터와 도구 상자 및 작업 영역 (폴더, 지오 데이터베이스)을 삭제할 수 있습니다. 지정된 항목이 작업 공간 인 경우 포함 된 모든 항목도 삭제됩니다.

구문 섹션 아래에 다음과 같이 삭제할 수있는 데이터 유형이 나열됩니다.

데이터 요소; 그래프; ; 테이블 뷰


피처 레이어가 제거되었는지 확인하기 위해 삭제 도구를 두 번 사용해야하는 이유를 모르겠습니다. 피처 레이어가 실제로 제거되지 않았음에도 불구하고 때때로이 기능 김미 오류는 피처 레이어를 삭제하고 만들려고 할 때 발생합니다. 같은 이름으로
geogeek

2
이것은 실제로는 관련이 없지만 지오 프로세싱이 작동하는 방식입니다. 각 레이어가 고유 한 이름을 가지기를 기대합니다.
Jason Scheirer 2016 년

1
TOC에서 레이어를 제거하기 위해 Delete 도구를 사용하는 것이 resources.arcgis.com/en/help/main/10.1/index.html#//…에 더 잘 문서화되어있을 수 있습니다. Layer는 삭제하지만 레이어에 대한 다른 참조는 없으며 시작 문장 "영구적으로 디스크에서 데이터 삭제"는 많은 사용자가 레이어를 삭제하기 위해 삭제를 시도하는 것을 두려워합니다.
PolyGeo

7

arcpy.mapping.RemoveLayer 를 호출 하여 TOC에서 레이어를 제거 할 수 있습니다 .

지도 문서 (.mxd)의 데이터 프레임 내에서 레이어를 제거하는 기능을 제공합니다.


제안에 감사드립니다-매핑 컨텍스트 외부 에서이 작업을 수행하려고한다는 것을 명확히하지 못했습니다. 이것은 단지 분석 스크립트이며 명시 적 TOC가 없습니다 (적어도 모르겠습니다). 아래의 Jason 제안은 효과적이었습니다. 감사! 나중에도 여전히 유용한 기능입니다.
nicksan

3

이것이 레이어를 제거하는 데 사용하는 것입니다.

arcpy.mapping.RemoveLayer ( "DataFrame", "Layer Name")

또는 반복 :

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. 또한 스크립트에 인쇄 문을 추가하십시오.

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.