আরকি দিয়ে আমি কীভাবে কোনও ফাইল জিডিবিতে সম্পর্কের ক্লাস সনাক্ত করতে পারি (বা আমি পারি না)?


10

আমি একটি ফাইল জিডিবিতে সম্পর্কের ক্লাস সনাক্ত করতে সক্ষম হতে চাই। যেহেতু আমার স্ক্রিপ্টের ব্যবহারকারীদের কাছে কেবল একটি আরকভিউ স্তরের লাইসেন্স থাকতে পারে, তারা সম্পর্কের ক্লাস রয়েছে এমন একটি ওয়ার্কস্পেসে থাকা কোনও বৈশিষ্ট্য শ্রেণির (বিশেষত একটি ক্ষেত্র যোগ করার জন্য) স্কিমা ব্যবহার করতে পারবেন না। আমি কীভাবে সম্পর্কের ক্লাসগুলির উপস্থিতি সনাক্ত করব, যাতে আমি সেগুলি নথিভুক্ত করতে পারি, অগ্রগতিতে এড়াতে পারি এবং স্ক্রিপ্টটি চালিয়ে যেতে পারি?

উত্তর:


6

relationshipClassNamesসম্পত্তি অনুমিত এই কাজ করতে কিন্তু এটা আমার জন্য কাজ বলে মনে হচ্ছে না (একটি ফাইল geodatabase পরীক্ষিত, দুই বৈশিষ্ট্য শ্রেণীর মধ্যে সম্পর্ক তৈরি হয়েছে শ্রেণী, সম্পত্তি চেক করা থাকে, তালিকা ফিরে উভয়ের জন্য খালি)। হয়তো এটা আপনার জন্য কাজ করবে।


ধন্যবাদ। আমি প্রথমে সম্পর্কের ক্লাসে কীভাবে যাব তা অনুপস্থিত ছিল তবে আপনি আমাকে ক্লু দিয়েছিলেন। আমি সম্পর্কের ক্লাসনামস সম্পত্তিটি যাচাই করব এবং আপনাকে এটি জানায় যে এটি কীভাবে কাজ করে (বা না)।
সেল্টিক ফ্লাইট

3

@ ব্লাহ ২৩৮ এর পরামর্শ অনুসারে, এই অজগর কোডটি জিওডাটাবেসিসের মধ্যে সমস্ত সম্পর্কের শ্রেণি তালিকাভুক্ত করে এবং এগুলি একটি অনন্য তালিকায় রাখে (রিলক্লাস):

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 এ আছি এবং দেখে মনে হচ্ছে সম্পর্কটি ক্লাসনামগুলি আমাকে সম্পর্কের শ্রেণির নামের তালিকা দিচ্ছে যা মনে করা হয়

layer = "C:\\Geodatabases\\somegeodatabase.gdb\\my_layer"
desc = arcpy.Describe(layer)
print desc.relationshipClassNames
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.