Di seguito è riportato il codice che sto usando per replicare il pulsante "tabelle correlate" in ArcMap. In ArcMap quel pulsante seleziona le funzionalità in una classe o tabella di funzionalità in base alla selezione di funzioni in un'altra classe o tabella di funzionalità correlate.
In ArcMap posso usare quel pulsante per "spingere" la mia selezione nella tabella correlata in pochi secondi. Non sono riuscito a trovare nulla incorporato in arcpy che replica il pulsante, quindi ho usato alcuni loop nidificati per fare lo stesso compito.
Il codice seguente scorre attraverso una tabella di "trattamenti". Per ogni trattamento, scorre un elenco di "alberi". Quando viene trovata una corrispondenza tra i campi ID del trattamento e gli alberi, si verifica una selezione nel livello dell'albero. Una volta trovata una corrispondenza per un trattamento, il codice non continua a cercare ulteriori livelli nel livello dell'albero. Torna alla tabella dei trattamenti, seleziona il trattamento successivo e cerca nuovamente nella classe di caratteristiche dell'albero.
Il codice stesso funziona bene, ma è stranamente lento. La "tabella di trattamento" in questo caso ha 16.000 record. La classe di funzionalità "albero" ha 60.000 record.
C'è un altro modo più efficace per ricreare ciò che ESRI sta facendo quando spinge la selezione da una tabella all'altra? Devo creare un indice per le tabelle? NOTA: questi dati sono memorizzati in 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