以下は、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