ジオデータベースからすべてのコード化値ドメインをエクスポートします


11

今朝のESRI-Lメーリングリストで、ジオデータベースのすべてのコード化された値ドメインを表示またはエクスポートする方法についての質問がありました。目的は、ドメインのコンテンツを表形式で提示して、読みやすくすることです。

DomainToTableツールは、単一のドメインのために、この簡単に行いますが、多くのドメインがある場合、それはすぐに退屈に成長します。私ができる最高のアドバイスはバッチ処理機能ですが、それでもドメインの名前を個別に知っているか調べる必要があります。

確かにもっと良い方法がありますか?


1
おそらくあなたが望むで取得する(クリス・スナイダーの記事を参照してください)このコードを適応させることができます:forums.arcgis.com/threads/...
blah238

すべてのドメインは、GDB_Domainsテーブルの「DomainName」フィールドにリストされています。名前を簡単にループして、簡単なコードでDomainToTableジオプロセシングツールにフィードすることができます。各サブタイプは独自のドメインを持つ可能性があるため、サブタイプにも注意する必要があります。
ブレントエドワーズ

@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を使用しています)
マットウィルキー

回答:


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

https://github.com/envygeo/arcplus/blob/master/ArcToolbox/Scripts/export_gdb_domains.pyにあるgithubの更新バージョン。オプションで、XLSに書き込み、既存のテーブルを上書きします。

リソース:


歴史

最初に出力ディレクトリと.csvファイルを使用して結果を取得しようとしましたが、「エラー000142:dBASEテーブルのフィールド名は10文字を超えることはできません」というメッセージが表示され続けました。パスは常にテーブル名(cf table = line){shrug}の一部として解釈されるようです。

[後で]: @ dgj32784が原因を見つけまし。11'description'文字では長すぎます。


ArcMapの[データのエクスポート]ダイアログを使用してインタラクティブに実行できますが、ジオプロセシングでのCSVのエクスポートは基本的に存在しないことがわかりました。私は通常、Python 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行目)


「説明」のバグ修正に感謝します!スクリプトに追加しました
マットウィルキー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.