다음은 ArcMap에서 "관련 테이블"버튼을 복제하는 데 사용하는 코드입니다. ArcMap에서이 버튼은 다른 관련 피쳐 클래스 또는 테이블에서 피쳐 선택을 기반으로 한 피쳐 클래스 또는 테이블에서 피쳐를 선택합니다.
ArcMap에서이 버튼을 사용하여 몇 초 안에 선택한 항목을 관련 테이블로 "밀어 넣을 수 있습니다". 버튼을 복제하는 arcpy에 내장 된 것을 찾을 수 없으므로 동일한 루프를 사용하여 동일한 작업을 수행했습니다.
아래 코드는 "치료"표를 반복합니다. 각 처리에 대해 "트리"목록을 반복합니다. 트리트먼트의 ID 필드와 트리간에 일치하는 것이 있으면 트리 레이어에서 선택이 이루어집니다. 처리에 대한 일치가 발견되면 코드는 트리 계층에서 추가 일치를 계속 검색하지 않습니다. 처리 테이블로 돌아가 다음 처리를 선택하고 트리 피쳐 클래스를 다시 검색합니다.
코드 자체는 잘 작동하지만 느리게 느립니다. 이 경우 "치료 테이블"에는 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