Експортуйте всі кодовані доменні значення з бази даних геоданих


11

У списку розсилки ESRI-L сьогодні вранці виникло питання про те, як переглянути чи експортувати всі кодовані домени значень для бази даних геоданих. Мета - представити вміст доменів у табличному вигляді, щоб вони легко читалися.

Інструмент DomainToTable робить це легко для одного домену, але коли існує багато доменів, він швидко стомлює. Найкраща порада, яку я міг би дати, - це функція пакетної обробки , але навіть це вимагає знання або пошуку назв доменів окремо.

Звичайно, є кращий спосіб?


1
Можливо, можливо, адаптуйте цей код (див. Пост Кріса Снайдера), щоб отримати те, що ви хочете: forums.arcgis.com/threads/…
blah238

Усі домени вказані в полі "Доменне ім'я" таблиці GDB_Domains. Ви можете легко перебирати імена та передавати їх у інструмент для геообробки DomainToTable за допомогою простого коду. Вам також потрібно бути обережними з SubTypes, оскільки кожен SubType потенційно може мати власний домен.
Brent Edwards

@BrentEdwards, де ви бачите GDB_Domainsтаблицю? Я відкрив personal-gdb з доменами в Access, і його там немає. Я знайшов GDB_Itemsіз Definitionполем, яке, як видається, містить домени, але вони поховані в XML.
matt wilkie

Ви використовуєте ArcGIS 10? GDB_Домени існували лише в 9.3 і раніше. Дивіться: blogs.esri.com/esri/arcgis/2010/03/15/…
blah238

дякую за цю сторінку @ blah238. Я не знав про це (і так, я використовую v10)
matt wilkie

Відповіді:


12

Ось щось, що я зібрав, працює над простими gdb, які я маю під рукою. Я не знаю, як це може чи не може обробляти підтипи з кількома доменами (див. Коментар Brent).

Використання:

python export_gdb_domains.py [input geodatabase]

Він експортує таблиці в той самий gdb, з якого отримує домени. Він не вийде, якщо таблиці (и) вже існують.

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

Оновлена ​​версія в github за адресою https://github.com/envygeo/arcplus/blob/master/ArcToolbox/Scripts/export_gdb_domains.py . За бажанням пише в XLS і перезаписує існуючі таблиці.

Ресурси:


Історія

Спочатку я намагався використати вихідний каталог та .csv файли для отримання результатів, але продовжував отримувати "ПОМИЛКА 000142: Ім'я поля в таблиці dBASE не може бути довше 10 символів" . Здається, завжди трактує шлях як частину назви таблиці (cf table = рядок) {shrug}.

[Пізніше]: @ dgj32784 знайшов причину, 'description'у 11 символів занадто довго.


Я виявив, що експорт CSV в геопроцедурі фактично відсутній, хоча ви можете це робити інтерактивно через діалогове вікно експорту даних у ArcMap. Зазвичай я просто використовую csvмодуль Python .
blah238

1
Про експорт CSV див. Пов’язане запитання: gis.stackexchange.com/questions/26227/…
blah238

4

Ось код, який експортує всі домени у файли Excel. Також ви отримуєте помилку при спробі експорту в DBF, оскільки слово "опис" має 11 символів.

''' 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: фіксований формат друку (рядок 20)


дякую за виправлення помилок "опис"! Я додав його до свого сценарію
matt wilkie
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.