ส่งออกโดเมนค่าที่เข้ารหัสทั้งหมดจากฐานข้อมูลภูมิศาสตร์


11

ในรายชื่อผู้รับจดหมาย ESRI-L เช้านี้มีคำถามเกี่ยวกับวิธีดูหรือส่งออกโดเมนค่าที่มีการเข้ารหัสทั้งหมดสำหรับฐานข้อมูลภูมิศาสตร์ เป้าหมายคือการนำเสนอเนื้อหาของโดเมนในรูปแบบตารางเพื่อให้ง่ายต่อการอ่าน

DomainToTableเครื่องมือทำอย่างนี้ได้อย่างง่ายดายสำหรับโดเมนเดียว แต่เมื่อมีหลายโดเมนมันได้อย่างรวดเร็วเติบโตที่น่าเบื่อ คำแนะนำที่ดีที่สุดที่ฉันสามารถให้ได้คือคุณสมบัติการประมวลผลแบบกลุ่ม

แน่นอนมีวิธีที่ดีกว่า


1
อาจปรับรหัสนี้ (ดูโพสต์ของ Chris Snyder) เพื่อให้ได้สิ่งที่คุณต้องการ: forums.arcgis.com/threads/…
blah238

โดเมนทั้งหมดแสดงอยู่ในฟิลด์ "DomainName" ของตาราง GDB_Domains คุณสามารถวนซ้ำชื่อและป้อนเข้าสู่เครื่องมือการประมวลผลโดเมน DomainToTable ได้อย่างง่ายดายด้วยรหัสอย่างง่าย คุณต้องระวัง SubTypes ด้วยเนื่องจาก SubType แต่ละประเภทอาจมีโดเมนเป็นของตัวเอง
Brent Edwards

@BrentEdwards คุณเห็นGDB_Domainsโต๊ะอยู่ที่ไหน ฉันเปิด gdb ส่วนบุคคลพร้อมโดเมนใน Access และไม่มีอยู่ ฉันพบGDB_ItemsกับDefinitionเขตข้อมูลที่ดูเหมือนจะมีโดเมน แต่พวกเขาถูกฝังอยู่ใน XML
matt wilkie

คุณใช้ ArcGIS 10 หรือไม่ GDB_Domains มีเฉพาะใน 9.3 และก่อนหน้านี้ ดู: blogs.esri.com/esri/arcgis/2010/03/15/…
blah238

ขอบคุณสำหรับหน้านั้น @ blah238 ฉันไม่รู้เกี่ยวกับเรื่องนั้น (และใช่ฉันใช้ v10)
matt wilkie

คำตอบ:


12

นี่คือสิ่งที่ฉันรวบรวมไว้ซึ่งทำงานบน gdb อย่างง่ายที่ฉันมีอยู่ในมือ ฉันไม่ทราบว่าจะจัดการกับประเภทย่อยที่มีหลายโดเมนได้อย่างไร

การใช้งาน:

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

Updated รุ่นบน GitHub ที่https://github.com/envygeo/arcplus/blob/master/ArcToolbox/Scripts/export_gdb_domains.py เลือกเขียนไปที่ XLS และเขียนทับตารางที่มีอยู่

แหล่งข้อมูล:


ประวัติศาสตร์

ผมเริ่มพยายามที่จะใช้ไดเรกทอรีออกและไฟล์ .csv สำหรับผลการแทน แต่ยังคงได้รับ"ข้อผิดพลาด 000142: ชื่อฟิลด์ในตาราง dBASE ไม่สามารถจะยาวกว่า 10 ตัวอักษร" ดูเหมือนจะแปลพา ธ เป็นส่วนหนึ่งของชื่อตาราง ( table = บรรทัดcf ) {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")

แก้ไข: รูปแบบการพิมพ์คงที่ (บรรทัด 20)


ขอบคุณสำหรับการแก้ไขข้อผิดพลาด 'description'! ฉันได้เพิ่มลงในสคริปต์ของฉัน
matt wilkie
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.