从地理数据库导出所有编码值域


11

今天早上在ESRI-L邮件列表上,存在一个有关如何查看或导出地理数据库的所有编码值域的问题。目的是以表格形式显示域的内容,以使它们易于阅读。

DomainToTable工具做到这一点很容易为单个域,但是当有许多领域是快速增长令人厌烦。我能提供的最佳建议是批处理功能,但即使这样,也需要分别了解或查找域名称。

当然有更好的方法吗?


1
或许可以适应这个代码(见克里斯·斯奈德后)你想要得到什么:forums.arcgis.com/threads/...
blah238

所有域都列在GDB_Domains表的“ DomainName”字段中。您可以轻松地遍历这些名称,并通过简单的代码将其输入到DomainToTable地理处理工具中。您还需要注意SubType,因为每个SubType可能都有自己的域。
布伦特·爱德华兹

@BrentEdwards,您在哪里看到GDB_Domains桌子?我在Access中打开了一个带有域的personal-gdb,它不存在。我确实找到GDB_Items了一个Definition似乎包含域的字段,但是它们埋在XML中。
马特·威尔基

您正在使用ArcGIS 10吗?GDB_Domains仅存在于9.3及更早版本中。请参阅:blogs.esri.com/esri/arcgis/2010/03/15/…–
blah238

感谢您的页面@ blah238。我对此一无所知(是的,我正在使用v10)
马特·威尔基

Answers:


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中的“导出数据”对话框以交互方式进行。我通常只使用Python csv模块。
blah238 2012年

1
在CSV出口,看到相关的问题:gis.stackexchange.com/questions/26227/...
blah238

4

这是将所有域导出到Excel文件的一些代码。另外,由于单词“ description”的长度为11个字符,因此在尝试导出到DBF时会出现错误。

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

编辑:固定的打印格式(第20行)


感谢您修复“描述”错误!我已将其添加到我的脚本中
matt wilkie
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.