ด้วย arcpy ฉันจะตรวจสอบคลาสความสัมพันธ์ในไฟล์ GDB (หรือฉันไม่สามารถ) ได้อย่างไร


10

ฉันต้องการตรวจสอบคลาสความสัมพันธ์ในไฟล์ GDB เนื่องจากผู้ใช้สคริปต์ของฉันอาจมีสิทธิ์ใช้งานระดับ ArcView เท่านั้นพวกเขาจะไม่สามารถจัดการสคีมาของคลาสคุณลักษณะ (โดยเฉพาะเพื่อเพิ่มฟิลด์) ที่อยู่ในพื้นที่ทำงานที่มีคลาสความสัมพันธ์ ฉันจะตรวจสอบการมีอยู่ของคลาสความสัมพันธ์เพื่อให้ฉันสามารถจัดทำเอกสารพวกเขาหลีกเลี่ยงพวกเขาเป็นโปรแกรมและอนุญาตให้สคริปต์เพื่อดำเนินการต่อ

คำตอบ:


6

relationshipClassNamesทรัพย์สินควรจะทำเช่นนี้ แต่ก็ดูเหมือนจะไม่ทำงานสำหรับฉัน (ทดสอบใน geodatabase ไฟล์ระดับความสัมพันธ์ที่สร้างขึ้นระหว่างสองชั้นเรียนที่มีคุณลักษณะการตรวจสอบทรัพย์สินรายการกลับเป็นที่ว่างเปล่าสำหรับทั้งสอง) บางทีมันอาจจะเหมาะกับคุณ


ขอบคุณ ฉันพลาดวิธีไปที่คลาสความสัมพันธ์ในตอนแรก แต่คุณให้เบาะแสกับฉัน ฉันจะตรวจสอบคุณสมบัติความสัมพันธ์ ClassClassNames และแจ้งให้คุณทราบว่ามันทำงานอย่างไร (หรือไม่)
celticflute

3

ตามข้อเสนอแนะ @ blah238 รหัสหลามนี้แสดงคลาสความสัมพันธ์ทั้งหมดภายใน Geodatabase และวางไว้ในรายการที่ไม่ซ้ำกัน (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.