नीचे आर्कब में "संबंधित तालिकाओं" बटन को दोहराने के लिए मैं कोड का उपयोग कर रहा हूं। ArcMap में वह बटन किसी एक सुविधा वर्ग या तालिका में किसी अन्य संबंधित सुविधा वर्ग या तालिका में सुविधाओं के चयन के आधार पर सुविधाओं का चयन करता है।
ArcMap में मैं सेकंड के एक मामले में संबंधित चयन के लिए मेरे चयन को "पुश" करने के लिए उस बटन का उपयोग कर सकता हूं। मैं आर्कपी में निर्मित कुछ भी खोजने में असमर्थ था जो बटन को दोहराता है इसलिए मैंने उसी कार्य को करने के लिए कुछ नेस्टेड छोरों का उपयोग किया।
नीचे दिए गए कोड "उपचार" की एक तालिका के माध्यम से छोरों। प्रत्येक उपचार के लिए, यह "पेड़ों" की एक सूची से गुजरता है। जब उपचार और पेड़ों के आईडी क्षेत्रों के बीच एक मैच पाया जाता है, तो पेड़ की परत में एक चयन होता है। एक बार जब एक उपचार के लिए एक मैच पाया जाता है, तो कोड अतिरिक्त मैचों के लिए पेड़ की परत को खोजना जारी नहीं रखता है। यह उपचार तालिका में वापस जाता है, अगले उपचार का चयन करता है और फिर से ट्री फीचर क्लास के माध्यम से खोज करता है।
कोड स्वयं ठीक काम करता है, लेकिन यह आश्चर्यजनक रूप से धीमा है। इस मामले में "उपचार तालिका" में 16,000 रिकॉर्ड हैं। "ट्री" फीचर क्लास में 60,000 रिकॉर्ड हैं।
क्या ईएसआरआई क्या कर रहा है इसे चुनने के लिए एक और अधिक कुशल तरीका है जब यह चयन को एक मेज से दूसरे तक पहुंचाता है? क्या मुझे तालिकाओं के लिए एक सूचकांक बनाना चाहिए? नोट: यह डेटा एक एसडीई में संग्रहीत है।
# Create search cursor to loop through the treatments
treatments = arcpy.SearchCursor(treatment_tv)
treatment_field = "Facility_ID"
for treatment in treatments:
#Get ID of treatment
treatment_ID = treatment.getValue(treatment_field)
# Create search cursor for looping through the trees
trees = arcpy.SearchCursor(tree_fl)
tree_field = "FACILITYID"
for tree in trees:
# Get FID of tree
tree_FID = tree.getValue(tree_field)
if tree_FID == treatment_FID:
query = "FACILITYID = " + str(tree_FID)
arcpy.SelectLayerByAttribute_management(tree_fl, "REMOVE_FROM_SELECTION", query)
break