Dưới đây là mã tôi đang sử dụng để sao chép nút "bảng liên quan" trong ArcMap. Trong ArcMap, nút đó chọn các tính năng trong một lớp tính năng hoặc bảng dựa trên lựa chọn các tính năng trong một lớp hoặc bảng tính năng liên quan khác.
Trong ArcMap, tôi có thể sử dụng nút đó để "đẩy" lựa chọn của mình sang bảng liên quan trong vài giây. Tôi không thể tìm thấy bất cứ thứ gì được tích hợp trong arcpy sao chép nút này vì vậy tôi đã sử dụng một số vòng lặp lồng nhau để thực hiện cùng một nhiệm vụ.
Mã dưới đây lặp qua bảng "phương pháp điều trị". Đối với mỗi điều trị, nó lặp qua một danh sách "cây". Khi một kết quả khớp được tìm thấy giữa các trường xử lý ID và cây, một lựa chọn xảy ra trong lớp cây. Khi một kết quả khớp được tìm thấy để xử lý, mã không tiếp tục tìm kiếm lớp cây để tìm các kết quả khớp bổ sung. Nó quay trở lại bảng điều trị, chọn điều trị tiếp theo và tìm kiếm lại thông qua lớp tính năng cây.
Mã này hoạt động tốt, nhưng nó chậm chạp. "Bảng điều trị" trong trường hợp này có 16.000 hồ sơ. Lớp tính năng "cây" có 60.000 bản ghi.
Có cách nào khác hiệu quả hơn để tạo lại những gì ESRI đang làm khi nó đẩy lựa chọn từ bảng này sang bảng khác không? Tôi có nên tạo một chỉ mục cho các bảng không? LƯU Ý: Dữ liệu này được lưu trữ trong 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