Eksportuj wszystkie domeny wartości kodowanych z geobazy

11

Na liście mailingowej ESRI-L dziś rano pojawiło się pytanie, jak wyświetlić lub wyeksportować wszystkie domeny wartości kodowanych dla geobazy. Celem jest przedstawienie zawartości domen w formie tabelarycznej, aby były łatwe do odczytania.

DomainToTable narzędzie robi to łatwe dla jednej domeny, ale kiedy istnieje wiele domen szybko rośnie męczące. Najlepszą radą, jaką mogłem udzielić, była funkcja przetwarzania wsadowego , ale nawet to wymaga indywidualnej znajomości nazw domen.

Z pewnością jest lepszy sposób?

matowe wilkie
źródło
1
Prawdopodobnie może dostosować ten kod (patrz post Chrisa Snydera), aby uzyskać to, czego chcesz: forums.arcgis.com/threads/…
blah238
Wszystkie domeny są wymienione w polu „NazwaDomeny” tabeli GDB_Domains. Możesz łatwo zapętlić nazwy i wprowadzić je do narzędzia geoprzetwarzania DomainToTable za pomocą prostego kodu. Musisz także uważać na podtypy, ponieważ każdy podtyp może potencjalnie mieć własną domenę.
Brent Edwards
@BrentEdwards, gdzie widzisz GDB_Domainstabelę? Otworzyłem osobisty-gdb z domenami w Accessie i go tam nie ma. I znaleźliśmy GDB_Itemsw Definitiondziedzinie, która wydaje się zawierać domeny, ale są one zakopane w XML.
matt wilkie
Czy korzystasz z ArcGIS 10? GDB_Domains istniały tylko w wersji 9.3 i wcześniejszych. Zobacz: blogs.esri.com/esri/arcgis/2010/03/15/…
blah238
dzięki za tę stronę @ blah238. Nie wiedziałem o tym (i tak, używam v10)
Matt Wilkie

Odpowiedzi:

12

Oto coś, co poskładałem, które działa na prostych gdb, które mam pod ręką. Nie wiem, jak może obsługiwać podtypy z wieloma domenami (patrz komentarz Brenta).

Stosowanie:

python export_gdb_domains.py [input geodatabase]

Eksportuje tabele do tego samego gdb, z którego pobiera domeny. Nie powiedzie się, jeśli tabele istnieją już.

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

Zaktualizowana wersja github na https://github.com/envygeo/arcplus/blob/master/ArcToolbox/Scripts/export_gdb_domains.py . Opcjonalnie zapisuje do XLS i zastępuje istniejące tabele.

Zasoby:


Historia

Początkowo próbowałem użyć zamiast tego katalogu wyjściowego i plików .csv, ale nadal otrzymywałem komunikat „ERROR 000142: Nazwa pola w tabeli dBASE nie może być dłuższa niż 10 znaków” . Wydaje się, że zawsze interpretuje ścieżkę jako część nazwy tabeli (por. table = Wiersz) {wzruszenie ramion}.

[Później]: @ dgj32784 znalazł przyczynę, 'description'przy 11 znakach jest za długi.

matowe wilkie
źródło
Odkryłem, że eksport CSV w geoprzetwarzaniu zasadniczo nie istnieje, chociaż możesz to zrobić interaktywnie poprzez okno dialogowe Eksport danych w ArcMap. Zwykle używam tylko csvmodułu Python .
blah238,
1
W sprawie eksportu CSV patrz powiązane pytanie: gis.stackexchange.com/questions/26227/...
blah238
4

Oto kod, który eksportuje wszystkie domeny do plików Excel. Ponadto pojawia się błąd podczas próby eksportu do DBF, ponieważ słowo „opis” ma 11 znaków.

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

EDYCJA: naprawiono format wydruku (wiersz 20)

dgj32784
źródło
dzięki za naprawę błędu „opis”! Dodałem go do mojego skryptu
Matt Wilkie