Нижче наведено код, який я використовую для копіювання кнопки "пов'язані таблиці" в ArcMap. У ArcMap ця кнопка вибирає функції одного класу характеристик або таблиці на основі вибору функцій в іншому пов'язаному класі чи таблиці функцій.
В ArcMap я можу скористатися цією кнопкою, щоб "натиснути" свій вибір на відповідну таблицю за лічені секунди. Мені не вдалося знайти нічого вбудованого в архпію, яка копіює кнопку, тому я використав кілька вкладених циклів, щоб виконати те саме завдання.
Код нижче перебирає таблицю "процедур". Для кожної обробки вона перебирає список «дерев». Коли між полями обробки ідентифікаторів і деревами знайдено збіг, у шарі дерева відбувається виділення. Після того, як для обробки буде знайдено збіг, код не продовжує шукати в шарі дерева додаткові збіги. Він повертається до таблиці обробки, вибирає наступну обробку і знову проводить пошук по дереву класу функцій.
Сам код працює чудово, але він мучить повільно. "Таблиця лікування" в цьому випадку має 16 000 записів. Особливий клас "дерево" налічує 60 000 записів.
Чи існує інший більш ефективний спосіб відтворити те, що робить ESRI, коли він висуває вибір з однієї таблиці в іншу? Чи слід створювати індекс для таблиць? ПРИМІТКА. Ці дані зберігаються в SDE.
# 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