Vous trouverez ci-dessous le code que j'utilise pour répliquer le bouton "tables associées" dans ArcMap. Dans ArcMap, ce bouton sélectionne des entités dans une classe d'entités ou une table en fonction de la sélection d'entités dans une autre classe d'entités ou table associée.
Dans ArcMap, je peux utiliser ce bouton pour "pousser" ma sélection vers la table associée en quelques secondes. Je n'ai pas pu trouver quoi que ce soit intégré à arcpy qui reproduise le bouton, j'ai donc utilisé des boucles imbriquées pour faire la même tâche.
Le code ci-dessous fait une boucle à travers un tableau de "traitements". Pour chaque traitement, il parcourt une liste "d'arbres". Lorsqu'une correspondance est trouvée entre les champs ID de traitement et les arbres, une sélection se produit dans la couche d'arbre. Une fois qu'une correspondance est trouvée pour un traitement, le code ne continue pas de rechercher dans la couche d'arborescence des correspondances supplémentaires. Il revient à la table de traitement, sélectionne le traitement suivant et effectue une nouvelle recherche dans la classe d'entités arborescentes.
Le code lui-même fonctionne bien, mais il est terriblement lent. La "table de traitement" contient dans ce cas 16 000 enregistrements. La classe d'entités "arborescence" contient 60 000 enregistrements.
Existe-t-il un autre moyen plus efficace de recréer ce que fait ESRI quand il pousse la sélection d'une table à une autre? Dois-je créer un index pour les tables? REMARQUE: ces données sont stockées dans un 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