Tüm kodlanmış değer alanlarını bir coğrafi veritabanından dışa aktarma


11

Bu sabah ESRI-L posta listesinde, bir coğrafi veri tabanı için tüm kodlanmış değer alanlarının nasıl görüntüleneceği veya dışa aktarılacağı hakkında bir soru vardı. Amaç, alanların içeriğini tablo şeklinde sunmaktır, bu nedenle kolayca okunabilirler.

DomainToTable aracı Tek bir alan için kolayca yapar, ancak birçok etki varken hızla yorucu büyür. Verebileceğim en iyi tavsiye, toplu işleme özelliğiydi, ancak bu bile alan adlarını ayrı ayrı bilmek veya aramak gerektirir.

Elbette daha iyi bir yol var mı?


1
Muhtemelen istediğinizi almak için bu kodu uyarlayabilir (bkz: Chris Snyder'ın gönderisi): forums.arcgis.com/threads/…
blah238

Tüm alan adları GDB_Domains tablosunun "DomainName" alanında listelenir. Kolayca adlar arasında döngü ve basit bir kod aracılığıyla DomainToTable coğrafi işleme aracı besleyebilirsiniz. Ayrıca, her bir AltTip'in kendi etki alanı olabileceğinden AltTiplere dikkat etmelisiniz.
Brent Edwards

@BrentEdwards, bir GDB_Domainstablo nerede görüyorsunuz ? Access'te etki alanları olan bir kişisel gdb açtım ve orada değil. Etki alanlarını içeren GDB_Itemsbir Definitionalan buldum , ancak XML'de gömüldüler.
matt wilkie

ArcGIS 10 mu kullanıyorsunuz? GDB_Domains yalnızca 9.3 ve önceki sürümlerde mevcuttu. Bakınız: blogs.esri.com/esri/arcgis/2010/03/15/…
blah238

o sayfa için teşekkürler @ blah238. Bunu bilmiyordum (ve evet v10 kullanıyorum)
matt wilkie

Yanıtlar:


12

İşte elimdeki basit gdb'ler üzerinde çalışan bir şey. Birden fazla etki alanına sahip alt türleri nasıl ele alıp almayacağını bilmiyorum (bkz. Brent'in yorumu).

Kullanımı:

python export_gdb_domains.py [input geodatabase]

Tabloları etki alanlarından aldığı aynı gdb'ye aktarır. Tablo (lar) zaten varsa başarısız olur.

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

Https://github.com/envygeo/arcplus/blob/master/ArcToolbox/Scripts/export_gdb_domains.py adresinden github'da güncellenmiş sürüm . İsteğe bağlı olarak XLS'ye yazar ve mevcut tabloların üzerine yazar.

Kaynaklar:


Tarih

Başlangıçta sonuçlar için bir çıkış dizini ve .csv dosyaları kullanmaya çalıştım, ancak "HATA 000142: dBASE tablosundaki alan adı 10 karakterden uzun olamaz" elde etti . Yolu her zaman tablo adının (cf table = satırı) {shrug} bir parçası olarak yorumlar .

[Daha Sonra]: @ dgj32784 sebebini buldu , 'description'11 karakter çok uzun.


ArcMap'teki Verileri Dışa Aktar iletişim kutusundan etkileşimli olarak yapabilmenize rağmen, coğrafi işlemdeki CSV dışa aktarmanın temelde var olmadığını gördüm. Genellikle sadece Python csvmodülünü kullanıyorum.
blah238

1
CSV dışa aktarma hakkında ilgili soruya bakın: gis.stackexchange.com/questions/26227/…
blah238

4

Tüm etki alanlarını Excel dosyalarına veren bazı kodlar aşağıdadır. Ayrıca, "açıklama" sözcüğü 11 karakter uzunluğunda olduğu için DBF'ye dışa aktarmaya çalışırken hata alıyorsunuz.

''' 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: sabit baskı biçimi (satır 20)


'açıklama' hata düzeltmesi için teşekkürler! Senaryomun ekledikten
mat Wilkie
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.