Xuất tất cả các miền giá trị được mã hóa từ cơ sở dữ liệu địa lý


11

Trên danh sách gửi thư ESRI-L sáng nay có một câu hỏi về cách xem hoặc xuất tất cả các miền giá trị được mã hóa cho cơ sở dữ liệu địa lý. Mục tiêu là trình bày nội dung của các tên miền dưới dạng bảng, để chúng dễ đọc.

Công cụ DomainToTable thực hiện điều này một cách dễ dàng cho một tên miền, nhưng khi có nhiều tên miền, nó sẽ nhanh chóng trở nên mệt mỏi. Lời khuyên tốt nhất tôi có thể đưa ra là tính năng xử lý hàng loạt , nhưng ngay cả điều đó đòi hỏi phải biết hoặc tìm kiếm tên miền riêng lẻ.

Chắc chắn có một cách tốt hơn?


1
Có thể điều chỉnh mã này (xem bài đăng của Chris Snyder) để có được những gì bạn muốn: forum.arcgis.com/threads/ Kẻ
blah238

Tất cả các tên miền được liệt kê trong trường "Tên miền" của bảng GDB_Domains. Bạn có thể dễ dàng lặp qua các tên và đưa chúng vào công cụ xử lý địa lý DomainToTable thông qua mã đơn giản. Bạn cũng cần cẩn thận với SubTypes vì ​​mỗi SubType có thể có miền riêng.
Brent Edwards

@BrentEdwards, bạn thấy GDB_Domainsbảng ở đâu? Tôi đã mở một gdb cá nhân với các tên miền trong Access và nó không có ở đó. Tôi đã tìm thấy GDB_Itemsvới một Definitiontrường có vẻ chứa các miền, nhưng chúng bị chôn vùi trong XML.
matt wilkie

Bạn đang sử dụng ArcGIS 10? GDB_Domains chỉ tồn tại trong 9.3 và trước đó. Xem: blog.esri.com/esri/arcgis/2010/03/15/ từ
blah238

cảm ơn vì trang đó @ blah238. Tôi không biết về điều đó (và vâng, tôi đang sử dụng v10)
matt wilkie

Câu trả lời:


12

Đây là thứ tôi kết hợp hoạt động trên gdb đơn giản mà tôi có trong tay. Tôi không biết làm thế nào nó có thể hoặc có thể không xử lý các loại phụ với nhiều tên miền (xem bình luận của Brent).

Sử dụng:

python export_gdb_domains.py [input geodatabase]

Nó xuất các bảng sang cùng một gdb mà nó nhận được các tên miền từ đó. Nó sẽ thất bại nếu (các) bảng đã tồn tại.

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

Phiên bản cập nhật trên github tại https://github.com/envygeo/arcplus/blob/master/ArcToolbox/Scripts/export_gdb_domains.py . Tùy chọn ghi vào XLS và ghi đè lên các bảng hiện có.

Tài nguyên:


Lịch sử

Ban đầu, tôi đã cố gắng sử dụng một thư mục đầu ra và các tệp .csv cho kết quả, nhưng vẫn nhận được "ERROR 000142: Tên trường trong bảng dBASE có thể dài hơn 10 ký tự" . Dường như luôn diễn giải đường dẫn là một phần của tên bảng ( table = dòng cf ) {shrug}.

[Sau đó]: @ dgj32784 tìm thấy nguyên nhân, 'description'ở mức 11 ký tự là quá dài.


Tôi đã thấy rằng xuất CSV trong xử lý địa lý về cơ bản là không tồn tại, mặc dù bạn có thể thực hiện tương tác thông qua hộp thoại Xuất dữ liệu trong ArcMap. Tôi thường chỉ sử dụng csvmô-đun Python .
blah238

1
Khi xuất CSV, hãy xem câu hỏi liên quan: gis.stackexchange.com/questions/26227/ trên
blah238

4

Đây là một số mã xuất tất cả các tên miền sang tệp Excel. Ngoài ra, bạn đang gặp lỗi khi cố gắng xuất sang DBF vì từ "mô tả" dài 11 ký tự.

''' 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: định dạng in cố định (dòng 20)


cảm ơn đã sửa lỗi 'mô tả'! Tôi đã thêm nó vào kịch bản của mình
matt wilkie
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.