Dengan arcpy, bagaimana cara mendeteksi kelas hubungan dalam file GDB (atau tidak bisa saya)?


10

Saya ingin dapat mendeteksi kelas hubungan dalam file GDB. Karena pengguna skrip saya mungkin hanya memiliki lisensi level ArcView, mereka tidak akan dapat memanipulasi skema kelas fitur (khusus untuk menambahkan bidang) yang ada di ruang kerja yang memiliki kelas hubungan. Bagaimana cara mendeteksi keberadaan kelas hubungan, sehingga saya dapat mendokumentasikannya, menghindarinya secara terprogram, dan memungkinkan skrip untuk melanjutkan?

Jawaban:


6

The relationshipClassNamesproperti seharusnya untuk melakukan hal ini tetapi tampaknya tidak bekerja untuk saya (diuji dalam geodatabase berkas, menciptakan kelas hubungan antara dua kelas fitur, diperiksa properti, daftar kembali kosong untuk kedua). Mungkin itu akan berhasil untuk Anda.


Terima kasih. Saya kehilangan cara untuk mendapatkan kelas hubungan di tempat pertama, tetapi Anda memberi saya petunjuk. Saya akan memeriksa properti relationshipClassNames dan memberi tahu Anda cara kerjanya (atau tidak).
celticflute

3

Sesuai saran @ blah238, kode python ini mencantumkan semua kelas hubungan dalam Geodatabase dan menempatkannya dalam daftar unik (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

Saya berjuang dengan ini sampai menyadari arcpy melihat kelas hubungan melalui tabel yang terkait dengannya. Berikut sedikit kode untuk memeriksa nama kelas hubungan yang lebih panjang dari 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

Saya di 10.5.1 dan sepertinya relationshipClassNames memberi saya daftar nama kelas hubungan seperti yang seharusnya

layer = "C:\\Geodatabases\\somegeodatabase.gdb\\my_layer"
desc = arcpy.Describe(layer)
print desc.relationshipClassNames
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.