การลบชั้นคุณลักษณะโดยใช้สคริปต์ ArcPy?


13

ฉันมีสคริปต์ตาม ArcPy ที่ฉันพยายามตัดกันสองเลเยอร์โดยที่หนึ่งเลเยอร์จะต้องมีเซนทรอยด์ในเลเยอร์อื่น

เนื่องจากฉันต้องรู้ว่าหนึ่งเลเยอร์ (feature_layer ด้านล่าง) รวมถึงเซนทรอยด์ของอีกชั้นฉันจึงใช้เครื่องมือ arcpy.SelectLayerByLocation_management ()

ฉันไม่ได้เปิด Map Document (* .mxd) เพื่อที่จะทำสิ่งนี้ฉันต้องใช้Make Feature Layerเพื่อป้อนเข้าไป

เอกสารประกอบตั้งข้อสังเกตว่าเลเยอร์คุณลักษณะจะหายไปเมื่อโปรแกรมออก แต่ฉันต้องการให้มันหายไปเร็วขึ้นเพราะฉันมีมันในลูปคล้ายกับด้านล่าง

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

1
บางทีการใช้เครื่องมือลบเพื่อลบเลเยอร์จาก TOC อาจมีเอกสารที่ดีกว่าที่resources.arcgis.com/th/help/main/10.1/index.html#//… - มันบอกว่าเลเยอร์เป็นชนิดข้อมูลที่สามารถ ถูกลบ แต่ไม่มีการอ้างอิงอื่นใดที่ทำกับเลเยอร์และประโยคเปิดของ "การลบข้อมูลออกจากดิสก์อย่างถาวร" จะทำให้ผู้ใช้จำนวนมากออกจากการลองลบเพื่อลบเลเยอร์
PolyGeo

7

คุณสามารถเรียกใช้arcpy.mapping.RemoveLayerเพื่อลบเลเยอร์ออกจาก TOC

จัดเตรียมความสามารถในการลบเลเยอร์ภายในกรอบข้อมูลในเอกสารแผนที่ (.mxd)


ขอบคุณสำหรับคำแนะนำ - ฉันไม่ได้ชี้แจงว่าฉันกำลังมองหาบางอย่างที่จะทำสิ่งนี้นอกบริบทการทำแผนที่ - นี่เป็นเพียงสคริปต์การวิเคราะห์และฉันไม่มี TOC ที่ชัดเจน (หรืออย่างน้อยก็ไม่รู้) ข้อเสนอแนะของ Jason ทำงานด้านล่าง ขอบคุณ! มันจะเป็นฟังก์ชั่นที่มีประโยชน์สำหรับฉันในภายหลัง
nicksan

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แน่ใจว่าเลเยอร์นั้นหายไป เพิ่มคำสั่งพิมพ์ในสคริปต์ของคุณด้วย:

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.