Menghapus lapisan fitur menggunakan skrip ArcPy?

13

Saya memiliki skrip berbasis ArcPy di ​​mana saya mencoba untuk memotong dua lapisan di mana satu lapisan harus memiliki centroid di lapisan lain.

Karena saya perlu tahu bahwa satu layer (feature_layer di bawah) termasuk centroid yang lain, saya menggunakan alat arcpy.SelectLayerByLocation_management ().

Saya tidak memiliki Dokumen Peta (* .mxd) terbuka sehingga untuk melakukan ini, saya harus menggunakan Make Feature Layer untuk memasukkannya.

Dokumentasi mencatat bahwa lapisan fitur akan hilang ketika program keluar, tetapi saya membutuhkannya untuk menghilang lebih cepat karena saya memilikinya dalam satu lingkaran yang mirip dengan di bawah ini

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)

Saya mencari fungsi untuk menghapus lapisan fitur dan saya belum dapat menemukannya.

Saya menyadari bahwa saya dapat menaruh semacam hitungan di sana atau sesuatu untuk membuat masing-masing unik dalam lingkup program, tetapi itu tidak ideal kecuali tidak ada cara untuk menghapus lapisan fitur.

nicksan
sumber

Jawaban:

21

Alat Hapus harus menerima nama lapisan fitur untuk menghapusnya dari TOC.

Menghapus data dari disk secara permanen. Semua jenis data geografis yang didukung oleh ArcGIS, serta kotak peralatan dan ruang kerja (folder, geodatabases), dapat dihapus. Jika item yang ditentukan adalah ruang kerja, semua item yang ada juga dihapus.

dan di bawah bagian Sintaksis mencantumkan Jenis Data yang dapat dihapus sebagai:

Elemen Data; Grafik; Lapisan ; Tampilan Tabel

Jason Scheirer
sumber
saya tidak tahu mengapa saya harus menggunakan alat hapus dua kali untuk memastikan bahwa lapisan fitur dihapus, dan kadang-kadang fungsi ini memberikan kesalahan, meskipun lapisan fitur tidak benar-benar dihapus, kesalahan ini terjadi ketika saya mencoba untuk menghapus dan membuat lapisan fitur dengan nama yang sama
geogeek
2
Ini tidak benar-benar terkait, tetapi cara kerjanya geoprocessing - ia mengharapkan setiap lapisan memiliki nama yang unik karena itulah yang merujuk pada mereka.
Jason Scheirer
1
Mungkin penggunaan alat Hapus untuk menghapus lapisan dari TOC bisa didokumentasikan dengan lebih baik di resources.arcgis.com/en/help/main/10.1/index.html#//… - dikatakan Layer adalah tipe data yang dapat dihapus, tetapi tidak ada referensi lain yang dibuat untuk lapisan dan kalimat pembukaannya "Secara permanen menghapus data dari disk" akan menakuti banyak pengguna dari mencoba Hapus untuk menghapus lapisan.
PolyGeo
7

Anda dapat memanggil arcpy.mapping.RemoveLayer untuk menghapus layer dari TOC.

Memberikan kemampuan untuk menghapus lapisan dalam bingkai data dalam dokumen peta (.mxd).

James Schek
sumber
Terima kasih atas sarannya - saya tidak mengklarifikasi bahwa saya sedang mencari sesuatu untuk dilakukan di luar konteks pemetaan - ini hanya sebuah skrip analisis dan saya tidak memiliki (atau setidaknya tidak tahu) TOC eksplisit. Namun saran Jason di bawah ini berhasil. Terima kasih! Itu masih akan menjadi fungsi yang berguna bagi saya nanti.
nicksan
3

Ini yang saya gunakan untuk menghapus layer.

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

Atau perulangan:

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)
Berbulu
sumber
3

Gunakan mxd.save()jika Anda menggunakan dokumen peta yang bukan CURRENTuntuk memastikan lapisan tetap hilang. Juga, tambahkan pernyataan cetak dalam skrip Anda:

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()

Hanya untuk memastikan itu menemukan lapisan untuk dihapus sama sekali.

Jason Scheirer
sumber
-1

coba ini:

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
GIS baru
sumber