¿Eliminar la capa de entidades usando el script ArcPy?

13

Tengo un script basado en ArcPy donde estoy tratando de cruzar dos capas donde una capa debe tener su centroide en la otra capa.

Como necesito saber que una capa (feature_layer a continuación) incluye el centroide de la otra, estoy usando la herramienta arcpy.SelectLayerByLocation_management ().

No tengo un Documento de mapa (* .mxd) abierto, así que para hacerlo, tengo que usar Crear capa de características para alimentarlo.

La documentación señala que la capa de entidades desaparecerá cuando el programa salga, pero necesito que desaparezca antes, ya que la tengo en un bucle similar al siguiente.

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)

Estoy buscando una función para eliminar capas de entidades y no he podido encontrar una.

Me doy cuenta de que podría incluir algún tipo de conteo allí o algo para que cada uno sea único dentro del alcance del programa, pero eso no es ideal a menos que no haya forma de eliminar las capas de entidades.

nicksan
fuente

Respuestas:

21

La herramienta Eliminar debe aceptar el nombre de una capa de entidades para eliminarla de la tabla de contenido.

Elimina permanentemente los datos del disco. Se pueden eliminar todos los tipos de datos geográficos compatibles con ArcGIS, así como cajas de herramientas y espacios de trabajo (carpetas, geodatabases). Si el elemento especificado es un espacio de trabajo, todos los elementos contenidos también se eliminan.

y en la sección Sintaxis, se enumeran los tipos de datos que se pueden eliminar como:

Elemento de datos; Grafico; Capa ; Vista de tabla

Jason Scheirer
fuente
no sé por qué debería usar la herramienta de eliminación dos veces para asegurarme de que se eliminen las capas de entidades, y a veces esta función da errores, a pesar de que la capa de entidades no se elimina realmente, estos errores ocurren cuando intento eliminar y crear capas de entidades con el mismo nombre
geogeek
2
Esto no está realmente relacionado, pero es la forma en que funciona el geoprocesamiento: espera que cada capa tenga un nombre único porque así es como se refiere a ellas.
Jason Scheirer
1
Quizás el uso de la herramienta Eliminar para eliminar una capa de la tabla de contenido podría documentarse mejor en resources.arcgis.com/en/help/main/10.1/index.html#//… - dice que Layer es un tipo de datos que puede se eliminará, pero no se hacen otras referencias a las capas y su oración de apertura "Elimina permanentemente datos del disco" asustaría a muchos usuarios de intentar Eliminar para eliminar una capa.
PolyGeo
7

Puede invocar arcpy.mapping.RemoveLayer para eliminar una capa de la tabla de contenido.

Proporciona la capacidad de eliminar una capa dentro de un marco de datos en un documento de mapa (.mxd).

James Schek
fuente
Gracias por la sugerencia: no aclaré que estaba buscando algo para hacer esto fuera del contexto de mapeo; esto es solo un script de análisis y no tengo (o al menos no sé) un TOC explícito. Sin embargo, la sugerencia de Jason a continuación funcionó. ¡Gracias! Seguirá siendo una función útil para mí más adelante.
nicksan
3

Esto es lo que uso para eliminar capas.

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

O bucle:

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)
Peludo
fuente
3

Úselo mxd.save()si está utilizando un documento de mapa que no es CURRENTpara asegurarse de que la capa permanezca fuera. Además, agregue una declaración de impresión en su secuencia de comandos:

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 para asegurarme de que está buscando una capa para eliminar.

Jason Scheirer
fuente
-1

prueba esto:

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
nuevoGIS
fuente