Exportieren Sie alle codierten Wertdomänen aus einer Geodatabase


11

Auf der ESRI-L-Mailingliste gab es heute Morgen eine Frage zum Anzeigen oder Exportieren aller codierten Wertdomänen für eine Geodatabase. Ziel ist es, den Inhalt der Domains in tabellarischer Form darzustellen, damit sie leicht lesbar sind.

Das DomainToTable- Tool erledigt dies problemlos für eine einzelne Domain, aber wenn es viele Domains gibt, wird es schnell langweilig. Der beste Rat, den ich geben konnte, war die Stapelverarbeitungsfunktion , aber selbst dafür muss man die Namen der Domänen einzeln kennen oder nachschlagen.

Sicher gibt es einen besseren Weg?


1
Kann diesen Code wahrscheinlich anpassen (siehe Chris Snyders Beitrag), um zu dem zu gelangen, was Sie wollen: forums.arcgis.com/threads/…
blah238

Alle Domänen werden im Feld "Domänenname" der Tabelle GDB_Domains aufgelistet. Sie können die Namen leicht durchlaufen und sie durch einfachen Code in das DomainToTable-Geoverarbeitungstool einspeisen. Sie müssen auch mit Subtypen vorsichtig sein, da jeder Subtyp möglicherweise eine eigene Domäne haben kann.
Brent Edwards

@BrentEdwards, wo sehen Sie eine GDB_DomainsTabelle? Ich habe eine persönliche GDB mit Domains in Access geöffnet und sie ist nicht vorhanden. Ich habe GDB_Itemsmit einem DefinitionFeld gefunden, das die Domänen zu enthalten scheint, aber sie sind in XML vergraben.
Matt Wilkie

Verwenden Sie ArcGIS 10? GDB_Domains gab es nur in 9.3 und früher. Siehe: blogs.esri.com/esri/arcgis/2010/03/15/…
blah238

danke für diese seite @ blah238. Ich wusste nichts davon (und ja, ich benutze v10)
Matt Wilkie

Antworten:


12

Hier ist etwas, das ich zusammengestellt habe und das mit den einfachen GDBs funktioniert, die ich zur Hand habe. Ich weiß nicht, wie es mit Untertypen mit mehreren Domänen umgehen kann oder nicht (siehe Brent's Kommentar).

Verwendungszweck:

python export_gdb_domains.py [input geodatabase]

Es exportiert die Tabellen in dieselbe GDB, aus der die Domains stammen. Es schlägt fehl, wenn die Tabelle (n) bereits vorhanden sind.

''' 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', '#')

Aktualisierte Version auf github unter https://github.com/envygeo/arcplus/blob/master/ArcToolbox/Scripts/export_gdb_domains.py . Schreibt optional in XLS und überschreibt vorhandene Tabellen.

Ressourcen:


Geschichte

Ich habe anfangs versucht, stattdessen ein Ausgabeverzeichnis und CSV-Dateien für die Ergebnisse zu verwenden, aber immer wieder "FEHLER 000142: Feldname in dBASE-Tabelle darf nicht länger als 10 Zeichen sein" . Es scheint den Pfad immer als Teil des Tabellennamens (vgl. table = Zeile) {Achselzucken} zu interpretieren .

[Später]: @ dgj32784 hat die Ursache gefunden, 'description'bei 11 Zeichen ist zu lang.


Ich habe festgestellt, dass der CSV-Export in der Geoverarbeitung im Wesentlichen nicht vorhanden ist, obwohl Sie ihn interaktiv über das Dialogfeld "Daten exportieren" in ArcMap ausführen können. Normalerweise benutze ich nur das Python- csvModul.
blah238

1
Zum CSV-Export siehe verwandte Frage: gis.stackexchange.com/questions/26227/…
blah238

4

Hier ist ein Code, der alle Domänen in Excel-Dateien exportiert. Außerdem wird beim Versuch, nach DBF zu exportieren, die Fehlermeldung angezeigt, da das Wort "Beschreibung" 11 Zeichen lang ist.

''' 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")

BEARBEITEN: festes Druckformat (Zeile 20)


Danke für die 'Beschreibung' Bugfix! Ich habe es meinem Skript hinzugefügt
Matt Wilkie
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.