Exportar todos los dominios de valores codificados desde una geodatabase

11

En la lista de correo de ESRI-L esta mañana había una pregunta sobre cómo ver o exportar todos los dominios de valores codificados para una geodatabase. El objetivo es presentar el contenido de los dominios en forma de tabla, para que sean fáciles de leer.

La herramienta DomainToTable hace esto fácilmente para un solo dominio, pero cuando hay muchos dominios rápidamente se vuelve pesado. El mejor consejo que pude dar fue la función de procesamiento por lotes , pero incluso eso requiere conocer o buscar los nombres de los dominios individualmente.

Seguramente hay una mejor manera?

wilkie mate
fuente
1
Probablemente pueda adaptar este código (vea la publicación de Chris Snyder) para obtener lo que desea: foros.arcgis.com/threads/…
blah238
Todos los dominios se enumeran en el campo "DomainName" de la tabla GDB_Domains. Puede recorrer fácilmente los nombres e introducirlos en la herramienta de geoprocesamiento DomainToTable a través de un código simple. También debe tener cuidado con los Subtipos, ya que cada Subtipo puede tener su propio dominio.
Brent Edwards
@BrentEdwards, ¿dónde ves una GDB_Domainsmesa? Abrí un gdb personal con dominios en Access y no está allí. Encontré GDB_Itemsun Definitioncampo que parece contener los dominios, pero están enterrados en XML.
Matt Wilkie
¿Estás usando ArcGIS 10? GDB_Domains existía solo en 9.3 y anteriores. Ver: blogs.esri.com/esri/arcgis/2010/03/15/…
blah238
gracias por esa página @ blah238. No sabía sobre eso (y sí, estoy usando v10)
matt wilkie

Respuestas:

12

Aquí hay algo que armé que funciona en los gdb simples que tengo a mano. No sé cómo podría o no manejar subtipos con múltiples dominios (vea el comentario de Brent).

Uso:

python export_gdb_domains.py [input geodatabase]

Exporta las tablas al mismo gdb del que obtiene los dominios. Fallará si las tablas ya existen.

''' Export all coded value domains in a geodatabase to tables in that gdb '''
import os, sys
import arcpy

gdb = sys.argv[0]

desc = arcpy.Describe(gdb)
domains = desc.domains

for domain in domains:
    print 'Exporting %s CV to table in %s' % (domain, gdb)
    table = os.path.join(gdb, domain)
    arcpy.DomainToTable_management(gdb, domain, table,
        'field','descript', '#')

Versión actualizada en github en https://github.com/envygeo/arcplus/blob/master/ArcToolbox/Scripts/export_gdb_domains.py . Opcionalmente escribe en XLS y sobrescribe las tablas existentes.

Recursos:


Historia

Inicialmente intenté usar un directorio de salida y archivos .csv para los resultados, pero seguí obteniendo "ERROR 000142: El nombre del campo en la tabla dBASE no puede tener más de 10 caracteres" . Parece que siempre interpreta la ruta como parte del nombre de la tabla ( table = línea cf ) {encogimiento de hombros}.

[Más tarde]: @ dgj32784 encontró la causa, 'description'a los 11 caracteres es demasiado largo.

wilkie mate
fuente
He descubierto que la exportación de CSV en geoprocesamiento es esencialmente inexistente, aunque puede hacerlo interactivamente a través del cuadro de diálogo Exportar datos en ArcMap. Usualmente solo uso el csvmódulo Python .
blah238
1
En la exportación de CSV, vea la pregunta relacionada: gis.stackexchange.com/questions/26227/…
blah238
4

Aquí hay un código que exporta todos los dominios a archivos de Excel. Además, obtiene el error al intentar exportar a DBF porque la palabra "descripción" tiene 11 caracteres de longitud.

''' Export all coded value domains in a geodatabase to Excel files in the same directory '''
import os, sys
import arcpy

## Ideal when testing so you don't keep getting errors
arcpy.env.overwriteOutput = True

## Specify the File Geodatabase workspace
gdb = sys.argv[0]

## Get a list of domains
desc = arcpy.Describe(gdb)
domains = desc.domains

## Loop over the list of domains
for domain in domains:
    ## Create an object that represents the name of the Excel file to be created
    table_name = domain + '.xls'
    ## Let the user know what is happening
    print('Exporting {0} domain to table {1}'.format(domain, table_name))
    ## Create an object that represents the full path of the Excel file to be created
    table_full_path = os.path.join(os.path.dirname(gdb), table_name)
    ## Create an in memory object for the DBF to temporarily store the domains (since this is the default file type)
    in_memory_dbf = "in_memory" + "\\" + domain + ".dbf"
    ## Export the domain to the temporary in memory table
    ## NOTE: Cannot use "description," that is longer than 10 characters
    arcpy.DomainToTable_management(gdb, domain, in_memory_dbf, 'field', 'desc', '#')
    ## Convert the in memory table to an Excel stored on disc
    arcpy.TableToExcel_conversion(in_memory_dbf, table_full_path)
    ## Clear the memory so ArcGIS doesn't pitch a fit
    arcpy.Delete_management("in_memory")

EDITAR: formato de impresión fijo (línea 20)

dgj32784
fuente
gracias por la corrección de errores 'descripción'! Lo he añadido a mi guión
Matt Wilkie