Як я можу виявити класи відносин у файлі GDB (чи не можу) за допомогою arcpy?


10

Я хотів би мати можливість виявити класи відносин у файлі GDB. Оскільки користувачі мого сценарію можуть мати лише ліцензію рівня ArcView, вони не зможуть маніпулювати схемою класу функцій (спеціально для додавання поля), що знаходиться в робочій області з класами відносин. Як я можу виявити наявність класів взаємовідносин, щоб я міг їх документувати, уникати програмно та дозволяти сценарію продовжуватись?

Відповіді:


6

relationshipClassNamesВластивість передбачається зробити це , але це не схоже на роботу для мене (перевірено в файлі бази геоданих, створений клас відносин між двома клас, перевіряється властивість, список повертається порожній для обох). Можливо, це допоможе тобі.


Дякую. Мені не вистачало, як потрапити до занять у першу чергу, але ти дав мені підказку. Я перевіряю властивість RelationsClassNames і повідомляю, як воно працює (чи ні).
celticflute

3

Згідно з пропозицією @ blah238, цей код python перераховує всі класи відносин у базі даних Geodata та додає їх до унікального списку (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

Я боровся з цим, поки усвідомлюючи архпію, не бачить класи відносин через таблиці, з якими вони асоціюються. Ось невеликий фрагмент коду для перевірки назви класів відносин, що перевищує довжину 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.