Ekspor semua domain nilai kode dari geodatabase

11

Di milis ESRI-L pagi ini ada pertanyaan tentang cara melihat atau mengekspor semua domain nilai kode untuk geodatabase. Tujuannya adalah untuk menyajikan konten domain dalam bentuk tabel, sehingga mudah dibaca.

Alat DomainToTable melakukan ini dengan mudah untuk satu domain, tetapi ketika ada banyak domain dengan cepat menjadi melelahkan. Saran terbaik yang bisa saya berikan adalah untuk fitur pemrosesan batch , tetapi bahkan itu membutuhkan mengetahui atau mencari nama-nama domain secara individual.

Tentunya ada cara yang lebih baik?

matt wilkie
sumber
1
Mungkin dapat mengadaptasi kode ini (lihat posting Chris Snyder) untuk mendapatkan apa yang Anda inginkan: forums.arcgis.com/threads/…
blah238
Semua domain tercantum di bidang "DomainName" pada tabel GDB_Domains. Anda dapat dengan mudah mengulangi nama-nama dan memasukkannya ke alat geoprosesing DomainToTable melalui kode sederhana. Anda juga perlu berhati-hati dengan SubTipe karena setiap SubTipe berpotensi memiliki domain sendiri.
Brent Edwards
@BrentEdwards, di mana Anda melihat GDB_Domainsmeja? Saya membuka gdb pribadi dengan domain di Access dan tidak ada. Aku menemukan GDB_Itemsdengan Definitionbidang yang tampaknya berisi domain, tapi mereka terkubur dalam XML.
matt wilkie
Apakah Anda menggunakan ArcGIS 10? GDB_Domains hanya ada di 9.3 dan sebelumnya. Lihat: blogs.esri.com/esri/arcgis/2010/03/15/…
blah238
terima kasih untuk halaman itu @ blah238. Saya tidak tahu tentang itu (dan ya saya menggunakan v10)
matt wilkie

Jawaban:

12

Berikut adalah sesuatu yang saya kumpulkan yang bekerja pada gdb sederhana yang saya miliki. Saya tidak tahu bagaimana mungkin atau mungkin tidak menangani sub-tipe dengan beberapa domain (lihat komentar Brent).

Pemakaian:

python export_gdb_domains.py [input geodatabase]

Ini mengekspor tabel ke gdb yang sama dengan yang didapatnya dari domain. Ini akan gagal jika tabel sudah ada.

''' 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 terbaru di github di https://github.com/envygeo/arcplus/blob/master/ArcToolbox/Scripts/export_gdb_domains.py . Opsional menulis ke XLS dan menimpa tabel yang ada.

Sumber:


Sejarah

Awalnya saya mencoba menggunakan direktori output dan file .csv untuk hasil, tetapi terus mendapatkan "KESALAHAN 000142: Nama bidang dalam tabel dBASE tidak boleh lebih dari 10 karakter" . Tampaknya selalu menafsirkan path sebagai bagian dari nama tabel (cf table = line) {shrug}.

[Kemudian]: @ dgj32784 menemukan penyebabnya, 'description'pada 11 karakter terlalu panjang.

matt wilkie
sumber
Saya telah menemukan bahwa ekspor CSV di geoprocessing pada dasarnya tidak ada, walaupun Anda dapat melakukannya secara interaktif melalui dialog Ekspor Data di ArcMap. Saya biasanya hanya menggunakan csvmodul Python .
blah238
1
Pada ekspor CSV, lihat pertanyaan terkait: gis.stackexchange.com/questions/26227/…
blah238
4

Berikut adalah beberapa kode yang mengekspor semua domain ke file Excel. Anda juga mendapatkan kesalahan ketika mencoba untuk mengekspor ke DBF karena kata "deskripsi" panjangnya 11 karakter.

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

EDIT: format cetak tetap (baris 20)

dgj32784
sumber
terima kasih untuk perbaikan bug 'deskripsi'! Saya telah menambahkannya ke skrip saya
matt wilkie