Rimozione del feature layer utilizzando lo script ArcPy?


13

Ho uno script basato su ArcPy in cui sto cercando di intersecare due livelli in cui un livello deve avere il suo centroide nell'altro livello.

Dato che devo sapere che uno strato (feature_layer di seguito) include il centroide dell'altro, sto usando lo strumento arcpy.SelectLayerByLocation_management ().

Non ho un documento mappa (* .mxd) aperto, quindi per fare questo, devo usare Make Feature Layer per alimentarlo.

La documentazione osserva che il feature layer scompare quando il programma termina, ma ho bisogno che scompaia prima poiché lo ho in un ciclo simile al seguito

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)

Sto cercando una funzione per rimuovere i feature layer e non sono stato in grado di trovarne uno.

Mi rendo conto che potrei mettere una sorta di conteggio lì dentro o qualcosa per rendere ognuno unico nell'ambito del programma, ma non è l'ideale a meno che non ci sia modo di rimuovere i layer delle funzionalità.

Risposte:


21

Lo strumento Elimina dovrebbe accettare il nome di un livello funzionalità per rimuoverlo dal sommario.

Elimina definitivamente i dati dal disco. È possibile eliminare tutti i tipi di dati geografici supportati da ArcGIS, nonché le caselle degli strumenti e le aree di lavoro (cartelle, database geografici). Se l'elemento specificato è un'area di lavoro, vengono eliminati anche tutti gli elementi contenuti.

e nella sezione Sintassi sono elencati i tipi di dati che possono essere eliminati come:

Elemento dati; Grafico; Strato ; Vista tabella


non so perché dovrei usare lo strumento di eliminazione due volte per essere sicuro che i layer delle funzionalità siano stati rimossi, e talvolta questa funzione mi dà errori, nonostante il layer delle funzionalità non sia realmente rimosso, questi errori si verificano quando provo a eliminare e creare i feature layer con lo stesso nome
geogeek,

2
Questo non è realmente correlato, ma è il modo in cui funziona il geoprocessing: si aspetta che ogni livello abbia un nome univoco perché è così che si riferisce a loro.
Jason Scheirer,

1
Forse l'uso dello strumento Elimina per rimuovere un livello dal sommario potrebbe essere meglio documentato su resources.arcgis.com/en/help/main/10.1/index.html#//… - dice Layer è un tipo di dati che può viene eliminato, ma non vengono fatti altri riferimenti ai livelli e la frase di apertura "Elimina definitivamente i dati dal disco" farebbe paura a molti utenti di provare a eliminare per rimuovere un livello.
PolyGeo

7

È possibile richiamare arcpy.mapping.RemoveLayer per rimuovere un livello dal sommario.

Fornisce la possibilità di rimuovere un livello all'interno di un frame di dati in un documento della mappa (.mxd).


Grazie per il suggerimento - non ho chiarito che stavo cercando qualcosa per farlo al di fuori del contesto della mappatura - questo è solo uno script di analisi e non ho (o almeno non conosco) un TOC esplicito. Il suggerimento di Jason qui sotto ha funzionato però. Grazie! Sarà ancora una funzione utile per me in seguito.
nicksan,

3

Questo è quello che uso per rimuovere i livelli.

arcpy.mapping.RemoveLayer ("DataFrame", "Nome livello")

O loop:

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

Utilizzare mxd.save()se si utilizza un documento mappa che non CURRENTgarantisce che il livello rimanga sparito. Inoltre, aggiungi un'istruzione print nel tuo script:

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

Solo per essere sicuro di trovare un livello da eliminare.


-1

prova questo:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.