Desde python, ¿cómo puedo crear una lista de todas las clases de entidad en una geodatabase de archivos (* .gdb), incluidos los conjuntos de datos de entidades internas? El ejemplo estándar solo enumera las clases de entidad en el nivel superior de la geodatabase:
import arcgisscripting, os
gp = arcgisscripting.create(9.3)
gp.workspace = 'd:\scratch.gdb'
fcs = gp.ListFeatureClasses()
for fc in fcs:
print fc
Indique a qué versión de ArcGIS Desktop se aplica su respuesta (estoy buscando 9.3 pero también podríamos recopilar todas las versiones en un solo lugar).
arcpy
arcgis-9.3
wilkie mate
fuente
fuente
arcpy.da.Walk
) es ¿Cómo hacer un inventario SIG?Respuestas:
Esta rutina para arcgis10 devuelve todos los fcs (OR independiente dentro de un conjunto de datos de características) dentro de un gdb. Simplemente configure su arcpy.env.workspace y luego haga un bucle for
fuente
Terminé usando la respuesta de Gotchula , pero sin rendimiento porque
generalmente reutilizo las manijas FC creadas y las de rendimiento se usan una vez descartadas, es más fácil para mí leer y comprender quéfcs.append()
está haciendo quefcs = yield(...)
.Resultados:
Esto está ahora en un módulo que llamo arcplus *. Coloque con su otro código o PYTHONPATH y luego:
Arcplus también agrega filtrado de comodines; para procesar solo clases de entidad que comienzan con "HD_" dentro de conjuntos de datos de entidades que contienen "Hydro"
. * ahora en Github, actualizado para 10.x. Para arcgis 9.3 ver aquí .
fuente
yield
aquí. Por un lado, los "identificadores" a los que se refiere no son identificadores, son solo cadenas. Y si su intención es mantener la lista de clases de entidad para múltiples iteraciones, aún puede mantenerla como una función generadora y simplemente "listarla":my_list = list(generator_function(args))
esto evalúa el generador y almacena el resultado en una variable de lista.fcs = fcs.append(...)
mucho más rápido quefcs = list(yield(...))
.Me doy cuenta de que esta pregunta está etiquetada con 9.3, pero cualquier persona que busque la misma respuesta en 10.1 en adelante está mejor usando arcpy.da.Walk . Es más rápido y más preciso que ListDatasets / FeatureClasses / Rasters / etc.
La función de caminar funciona de la misma manera que la caminata de Python . Se itera a través de los directorios en la ruta dada y en cada iteración, la raíz representa la ruta completa del directorio, y los directorios y conjuntos de datos son listas de los subdirectorios y archivos contenidos dentro.
Al recorrer una geodatabase, los conjuntos de datos de entidades se tratan de la misma manera que los directorios. Si solo desea enumerar los conjuntos de datos y conjuntos de datos de características en la carpeta raíz y no abrir los conjuntos de datos de características para ver el contenido, puede hacer lo siguiente:
fuente
El
ListDatasets
método es lo que creo que estás buscando. Este FGDB tiene un FD llamado "Wells" y tiene 3 FC. Para 9.3.1:fuente