Le statistiche di zona 2 finiscono per causare un errore fatale. C'è un'alternativa?
Di recente sono passato all'utilizzo dello strumento supplementare "Statistiche zonali come tabella 2" invece delle normali "Statistiche zonali" perché ho poligoni sovrapposti di cui le statistiche zonali non si occupano. Tuttavia, ho provato a eseguire le statistiche zonali 2 un paio di volte e dopo aver eseguito per molte ore durante la notte si è verificato un errore fatale e non si è concluso. Non sono sicuro di come migliorare questo problema. Sto cercando di calcolare l'elevazione media all'interno di oltre 100.000 poligoni buffer e dovrò farlo più volte con altri livelli raster. C'è un'alternativa o un modo per ottenere lo strumento per completare il comando?
Risposte
Per risolvere questo problema dovrai dividere i tuoi poligoni in gruppi senza sovrapposizioni. Si chiama colorazione del grafico .
Per far funzionare lo script seguente a) installa il pacchetto networkx e b) esegui:
PolygonNeighbors("POLYGONS", "neighbours", area_overlap="AREA_OVERLAP")
Sceneggiatura:
'''
creates non-adjacent groups of polygons
'''
import arcpy
import networkx as nx
infc = arcpy.GetParameterAsText(0)
table = arcpy.GetParameterAsText(1)
sourceList=[f.name for f in arcpy.ListFields(table)]
FTO=sourceList[1:3]
fromto=arcpy.da.TableToNumPyArray(table,FTO)
try:arcpy.AddField_management(infc, "COLOR","Short")
except:pass
G=nx.Graph()
G.add_edges_from(fromto)
allGroups=sorted(nx.connected_components(G), key = len, reverse=True)
arcpy.AddMessage("%i connected groups found" %len(allGroups))
D={}
for item in allGroups:
arcpy.AddMessage(len(item))
subG=G.subgraph(item)
d = nx.coloring.greedy_color(subG, strategy=nx.coloring.strategy_largest_first)
D.update(d)
with arcpy.da.UpdateCursor(infc,("OID@","COLOR")) as cursor:
for row in cursor:
if row[0] not in item:continue
row[1]=D[row[0]]+1
cursor.updateRow(row)
arcpy.AddMessage("Done")
aggiungerà e popolerà il campo "COLOR" con i numeri nell'intervallo (1..4). Questo è un intervallo teorico, aspettati qualcosa di più grande, a seconda dell'entità delle sovrapposizioni. Direi che lo scenario peggiore è 7 colori. Potresti codificare la feature class di input (infc) e la tabella di adiacenza (tabella) se non vuoi assegnare lo script allo strumento con 2 parametri.
Si noti che lo script salta i poligoni dell'isola, questo risulterà nel valore Nessuno o 0 nel campo COLOR a seconda dell'origine della feature class:

Hai un paio di opzioni su come procedere:
- definire manualmente n livelli da POLIGONI utilizzando query di definizione, ad esempio "COLORE" = 1, eseguire statistiche zonali su ciascuno. Unisci i risultati.
- Scrivi uno script o sviluppa un modello per automatizzare le attività di cui sopra.
Sospetto che questo sia esattamente ciò che le statistiche zonali 2 fanno dietro le quinte, non sono sicuro del motivo per cui fallisce, a meno che tu non abbia incasinato l'estensione dell'elaborazione e le impostazioni dell'ambiente delle dimensioni della cella o utilizzi proiezioni diverse su raster e buffer.