आर्कपी के साथ, मैं एक फ़ाइल GDB (या मैं नहीं कर सकता) में संबंध वर्गों का पता कैसे लगा सकता हूं?


10

मैं एक फ़ाइल GDB में संबंध वर्गों का पता लगाने में सक्षम होना चाहूंगा। क्योंकि मेरी स्क्रिप्ट के उपयोगकर्ताओं के पास केवल एक ArcView स्तर का लाइसेंस हो सकता है, वे एक फीचर वर्ग (विशेष रूप से एक फ़ील्ड जोड़ने के लिए) के स्कीमा को हेरफेर करने में सक्षम नहीं होंगे जो कि कार्यक्षेत्र में है जो संबंध वर्ग है। मैं रिश्ते वर्गों की उपस्थिति का पता कैसे लगाऊं, ताकि मैं उन्हें दस्तावेज बना सकूं, उन्हें प्रोग्राम से बच सकें, और स्क्रिप्ट को जारी रखने की अनुमति दे सकूं?

जवाबों:


6

relationshipClassNamesसंपत्ति है चाहिए ऐसा करने के लिए, लेकिन यह मेरे लिए काम नहीं लगता है (एक फ़ाइल geodatabase में परीक्षण किया गया, दो फीचर वर्गों के बीच बनाई संबंध वर्ग, संपत्ति की जाँच की, सूची लौटे दोनों के लिए खाली है)। शायद यह आपके लिए काम करेगा।


धन्यवाद। मुझे याद आ रहा था कि पहली बार रिश्ते की कक्षाओं में कैसे जाना है, लेकिन आपने मुझे सुराग दिया। मैं रिश्ते की जाँच करूँगा संपत्ति के नाम और आपको बताऊँगा कि यह कैसे काम करता है (या नहीं)।
celticflute

3

@ Blah238 के सुझाव के अनुसार, यह अजगर कोड एक जियोडेटाबेस के भीतर सभी रिश्ते वर्गों को सूचीबद्ध करता है और उन्हें एक अनूठी सूची (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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.