Sto cercando di comprendere la creazione di un geoprocesso con ModelBuilder, ma non so perché sia importante utilizzare i feature layer invece delle classi di feature quando si crea un geoprocesso con ModelBuilder. Qualcuno può spiegare perché?
Sto cercando di comprendere la creazione di un geoprocesso con ModelBuilder, ma non so perché sia importante utilizzare i feature layer invece delle classi di feature quando si crea un geoprocesso con ModelBuilder. Qualcuno può spiegare perché?
Risposte:
I modelli possono avere molti livelli di output dei processi secondari a seconda delle loro dimensioni e complessità. Per eliminare i file che vengono scritti sul disco rigido, alcuni strumenti consentono di utilizzare i layer delle funzionalità (ad es. Selezione delle funzionalità di iterazione o Seleziona per attributo ). I feature layer sono temporanei e non persistono al termine del modello.
Ci sono un paio di ragioni per cui si desidera fare riferimento a Livelli di funzionalità in ModelBuilder, anziché a Classi di funzioni. Innanzitutto è utile comprendere le differenze.
Quindi, dato questo background, ecco alcuni motivi per cui si desidera utilizzare lo strumento "Crea feature layer" come intermediario tra i dati grezzi e altri strumenti di geoprocessing.
Se si desidera eseguire un modello da ArcCatalog o esportare il modello in uno script Python che può essere eseguito al di fuori di ArcGIS, è necessario utilizzare "Feature Layer" per convertire i dati di origine grezzi in "Layer". Ciò sarebbe analogo a "aggiungere dati" alla sessione ArcMap.
L'uso dei livelli semplifica il sottoinsieme dei dati man mano che procedi nel processo ModelBuilder. Supponi di voler elaborare tutti i dati con l'attributo "A" con un metodo, ma tutti i dati con l'attributo "B" con un altro metodo. È possibile fare riferimento una volta ai dati non elaborati, quindi suddividere i dati in due "rami" utilizzando i livelli funzione ed elaborare ciascun set in modo indipendente, ma influendo / aggiornando il singolo set di dati di origine.
L'incorporazione di livelli temporanei nei modelli riduce anche i tempi di elaborazione. Dal punto di vista dell'elaborazione, è molto più efficiente scrivere sulla memoria rispetto alla scrittura su disco. Allo stesso modo, puoi scrivere dati temporanei nello spazio di lavoro in_memory , che è anche più efficiente dal punto di vista computazionale.
Molte operazioni in ArcGIS richiedono livelli temporanei come input. Ad esempio, Seleziona livello per posizione (Gestione dati) è uno strumento molto potente e utile che consente di selezionare le funzioni di un livello che condividono le relazioni spaziali con un'altra funzione di selezione. Puoi specificare relazioni complesse come "HAVE_THEIR_CENTER_IN" o "BOUNDARY_TOUCHES", ecc.
Modificare:
Per curiosità e per elaborare le differenze di elaborazione utilizzando i feature layer e l'area di lavoro in_memory, considera il seguente test di velocità in cui 39.000 punti vengono bufferizzati a 100m:
import arcpy, time
from arcpy import env
# Set overwrite
arcpy.env.overwriteOutput = 1
# Parameters
input_features = r'C:\temp\39000points.shp'
output_features = r'C:\temp\temp.shp'
###########################
# Method 1 Buffer a feature class and write to disk
StartTime = time.clock()
arcpy.Buffer_analysis(input_features,output_features, "100 Feet")
EndTime = time.clock()
print "Method 1 finished in %s seconds" % (EndTime - StartTime)
time.sleep(5)
############################
# Method 2 Buffer a feature class and write in_memory
StartTime = time.clock()
arcpy.Buffer_analysis(input_features, "in_memory/temp", "100 Feet")
EndTime = time.clock()
print "Method 2 finished in %s seconds" % (EndTime - StartTime)
time.sleep(5)
############################
# Method 3 Make a feature layer, buffer then write to in_memory
StartTime = time.clock()
arcpy.MakeFeatureLayer_management(input_features, "out_layer")
arcpy.Buffer_analysis("out_layer", "in_memory/temp", "100 Feet")
EndTime = time.clock()
print "Method 3 finished in %s seconds" % (EndTime - StartTime)
time.sleep(5)
Possiamo vedere che i metodi 2 e 3 sono equivalenti e circa 3 volte più veloci del metodo 1. Ciò dimostra la potenza dell'utilizzo dei feature layer come passaggi intermedi in flussi di lavoro più grandi.
in_memory
nell'area di lavoro sono comunque dati (ad es. Classi e tabelle di feature) che occupano ancora (potenzialmente un sacco di) spazio. I Layer di funzionalità, d'altra parte, sono una vista sui dati, che consente di selezionare un sottoinsieme di dati e utilizzarlo nei processi successivi, anziché duplicare i dati solo per ottenerne un sottoinsieme. I layer delle funzionalità non occupano quasi spazio. Mi piace pensarli come "puntatori con metadati", ad esempio indicano alcuni dati e descrivono come interrogarli / renderli.
in-memory
lavoro è fondamentalmente un file geodatabase che si trova in memoria, se ti piace pensarlo in quel modo.