arcpyを使用して、ファイルGDBでリレーションシップクラスを検出するにはどうすればよいですか(またはできません)?


10

ファイルGDBで関係クラスを検出できるようにしたいと思います。スクリプトのユーザーはArcViewレベルのライセンスしか持っていない可能性があるため、リレーションシップクラスのあるワークスペースにあるフィーチャクラスのスキーマを操作する(特にフィールドを追加する)ことはできません。 関係クラスの存在を検出して、それらを文書化し、プログラムで回避し、スクリプトを続行できるようにするにはどうすればよいですか?

回答:


6

relationshipClassNamesプロパティがされたはずこれを行うには、それは私のために動作するようには思えない(ファイルジオデータベースでテストし、2つの特徴クラス間のリレーションシップクラスを作成し、返されたリストには、両方のための空で、プロパティをチェックします)。多分それはあなたのために働くでしょう。


ありがとう。そもそもリレーションシップクラスへの行き方がわからなかったのですが、手がかりをくれました。relationshipClassNamesプロパティをチェックアウトして、それがどのように機能するか(または機能しないか)をお知らせします。
celticflute

3

@ blah238の提案に従って、このPythonコードはジオデータベース内のすべてのリレーションシップクラスをリストし、それらを一意のリスト(relClasses)に入れます。

inGDB = r"D:\mygeodatabase.gdb"
env.workspace = inGDB
#################Getting all Tables and Feature Classes###########
fcs = []
#root of workspace
for item in arcpy.ListFeatureClasses("*"):    fcs.append(item)
for item in arcpy.ListTables("*"):    fcs.append(item)

fds = arcpy.ListDatasets("*","Feature")
for fd in fds:
    env.workspace = inGDB +'\\'+fd
    for fc in arcpy.ListFeatureClasses("*"):
        fcs.append(fd+'/'+fc)
    for tb in arcpy.ListTables("*"):
        fcs.append(fd+'/'+tb)

env.workspace = inGDB
relClasses = set()
for i,fc in enumerate(fcs): 
    desc = arcpy.Describe(fc)
    for j,rel in enumerate(desc.relationshipClassNames):
        relDesc = arcpy.Describe(rel)
        if relDesc.isAttachmentRelationship:
            continue
        relClasses.add(rel)

print relClasses

1

arcpyが関連付けられているテーブルを通じてリレーションシップクラスを参照できるようになるまで、私はこれに取り組みました。長さ30を超える関係クラス名を確認するためのコードの一部を次に示します。

arcpy.env.workspace = 'C:/workspace'

# Local variables
tables = arcpy.ListTables()

# Iterate through tables in file geodatabase (workspace)
for t in tables:
    # Get relationship class(es) associated with table
    desc = arcpy.Describe(t)
    rcs = desc.relationshipClassNames
# Iterate through any relationship classes associated with current table in loop
    for r in rcs:
        if len(r) > 30:
            print 'Relationship class ' + r + ' has ' + str(len(r)) + ' characters.'

0

10.5.1にいて、relationshipClassNamesが想定しているようなリレーションシップクラス名のリストを提供しているようです

layer = "C:\\Geodatabases\\somegeodatabase.gdb\\my_layer"
desc = arcpy.Describe(layer)
print desc.relationshipClassNames
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.