지오 데이터베이스에서 모든 코딩 된 값 도메인 내보내기


11

오늘 아침 ESRI-L 메일 링리스트에서 지오 데이터베이스의 모든 코드화 된 값 도메인을 보거나 내보내는 방법에 대한 질문이있었습니다. 목표는 도메인의 내용을 표 형식으로 표시하여 쉽게 읽을 수 있도록하는 것입니다.

DomainToTable 도구는 단일 도메인에 대해 쉽게이 작업을 수행하지만, 많은 도메인이있는 경우 신속 무심 성장. 내가 줄 수있는 가장 좋은 조언은 일괄 처리 기능에 대한 것이었지만 도메인 이름을 개별적으로 알거나 찾아야합니다.

더 좋은 방법이 있습니까?


1
이 코드 (Chris Snyder의 게시물 참조)를 조정하여 원하는 것을 얻을 수 있습니다 : forums.arcgis.com/threads/…
blah238

모든 도메인이 GDB_Domains 테이블의 "DomainName"필드에 나열됩니다. 간단한 코드를 통해 이름을 쉽게 반복하여 DomainToTable 지오 프로세싱 도구에 제공 할 수 있습니다. 또한 각 하위 유형에 자체 도메인이있을 수 있으므로 하위 유형에주의해야합니다.
브렌트 에드워즈

@BrentEdwards, GDB_Domains테이블이 어디에 있습니까? Access에 도메인이있는 개인용 gdb를 열었지만 거기에 없습니다. 내가 찾았 어 GDB_ItemsDefinition도메인을 포함 나타납니다 필드,하지만 그들은 XML에 묻혀 있습니다.
matt wilkie

ArcGIS 10을 사용하고 있습니까? GDB_Domains는 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', '#')

https://github.com/envygeo/arcplus/blob/master/ArcToolbox/Scripts/export_gdb_domains.py 에서 github의 버전이 업데이트되었습니다 . 선택적으로 XLS에 쓰고 기존 테이블을 덮어 씁니다.

자원:


역사

처음에는 결과 디렉토리로 출력 디렉토리와 .csv 파일을 사용하려고했지만 "ERROR 000142 : dBASE 테이블의 필드 이름은 10자를 초과 할 수 없습니다"라는 메시지가 계속 표시됩니다 . 항상 경로를 테이블 이름 (cf table = 행) {shrug}의 일부로 해석하는 것 같습니다 .

[나중에] : @ dgj32784'description' 가 11자를 초과 하는 원인을 찾았 습니다 .


ArcMap의 데이터 내보내기 대화 상자를 통해 대화식으로 수행 할 수 있지만 지오 프로세싱에서 CSV 내보내기가 존재하지 않는 것으로 나타났습니다. 나는 보통 파이썬 csv모듈을 사용합니다 .
blah238

1
CSV 내보내기에서 관련 질문을 참조하십시오 : gis.stackexchange.com/questions/26227/…
blah238

4

다음은 모든 도메인을 Excel 파일로 내보내는 코드입니다. 또한 "설명"이라는 단어의 길이가 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.