Arcpy ile GDB dosyasındaki ilişki sınıflarını nasıl tespit ederim (veya yapamıyorum)?


10

GDB dosyasındaki ilişki sınıflarını tespit edebilmek istiyorum. Betiğimin kullanıcıları yalnızca ArcView düzeyinde lisansa sahip olabildikleri için, ilişki sınıflarına sahip bir çalışma alanındaki bir özellik sınıfının (özellikle bir alan eklemek için) şemasını değiştiremezler. İlişki sınıflarının varlığını nasıl saptayabilirim, böylece bunları belgeleyebilir, programlı olarak önleyebilir ve komut dosyasının devam etmesine izin verebilirim?

Yanıtlar:


6

relationshipClassNamesMülkiyet olduğu sözde bunu ama benim için işe görünmüyor (bir dosya coğrafi veritabanında test, iki özellik sınıfları arasında oluşturulan ilişki sınıf, özellik kontrol döndürülen liste ikisi için boş). Belki senin için işe yarar.


Teşekkürler. İlk etapta ilişki sınıflarına nasıl gideceğimi özledim, ama bana ipucunu verdin. RelationClassNames özelliğini kontrol edip nasıl çalıştığını (veya çalışmadığını) size bildiririm.
celticflute

3

@ Blah238 önerisine göre, bu python kodu bir Coğrafi Veritabanı içindeki tüm ilişki sınıflarını listeler ve bunları benzersiz bir listeye (relClasses) yerleştirir:

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'nin ilişki sınıflarını ilişkilendirildikleri tablolar aracılığıyla görene kadar bununla mücadele ettim. Uzunluk 30'dan büyük ilişki sınıfı adlarını kontrol etmek için küçük bir kod parçası:

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'deyim ve relationClassNames bana olması gerektiği gibi ilişki sınıfı isimlerinin listesini veriyor gibi görünüyor

layer = "C:\\Geodatabases\\somegeodatabase.gdb\\my_layer"
desc = arcpy.Describe(layer)
print desc.relationshipClassNames
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.