3 votos

¿Cómo eliminar registros de múltiples clases de entidades similares por valores de atributos usando una declaración SQL en ArcGIS Desktop?

Tengo varias cientos de clases de entidades de geodatabase que tienen exactamente los mismos campos. Necesito revisar cada una de esas clases de entidades y eliminar cualquier registro que coincida con una consulta SQL (la misma consulta SQL se puede aplicar a todas las clases de entidades). Alternativamente, podría exportarlas todas a nuevas clases de entidades, manteniendo los registros que deseo. En ArcCatalog puedo exportarlas individualmente usando una consulta SQL para especificar qué registros se exportan, pero la opción de declaración SQL no está disponible cuando se quieren exportar múltiples capas simultáneamente (usando "Feature Class to Geodatabase (multiple)").

5voto

Sajee Puntos 394

Una forma de automatizar el procesamiento de esto sería con Python trabajando a través de una lista de las clases de entidades, y usando una instrucción updatecursor/deleteRow para eliminar los registros no necesarios.

import arcpy

workspace = r"c:\tuespacio\tubasededatos.gdb"  #suponiendo que es una geodatabase
arcpy.env.workspace = workspace

#Parte 1 -- crear una lista de clases de entidades en tu geodatabase...
#suponiendo que todas las clases de entidades dentro de la geodatabase son de interés para la consulta -- de lo contrario especifica un comodín abajo

featureclasslist = arcpy.ListFeatureClasses()

#ahora ejecuta un bucle en las clases de entidades en la lista
for featureclass in featureclasslist:

 #Parte 2 -- eliminando los registros especificados en tu consulta sql. Hay dos enfoques:

 # opción 1:
    tu_consulta = " \"tucampo\" = 'tu_valor' "  #introduce tu consulta sql aquí

    filas = arcpy.UpdateCursor(featureclass, tu_consulta)
    for fila in filas:
        filas.deleteRow(fila)

    # o opción 2

    filas = arcpy.UpdateCursor(featureclass)
    for fila in filas:
        if fila.getValue("Tucampo") == 'tu_valor':
            filas.deleteRow(fila)

Más información sobre la lista de clases de entidades: http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//000v0000001n000000

y sobre la instrucción updatecursor/deleteRow: http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//002z0000001q000000

1voto

UnkwnTech Puntos 21942

Intentaría hacer esto usando la herramienta Select (Análisis):

Extrae entidades de una clase de entidad de entrada o capa de entidad de entrada, típicamente utilizando una expresión de selección o lenguaje de consulta estructurado (SQL) y las almacena en una clase de entidad de salida.

en modo por lotes:

Para usar por lotes, haga clic derecho en una herramienta y haga clic en Por lotes. Esto abre el cuadro de diálogo por lotes con una fila de la cuadrícula de lotes

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X