Perché è importante utilizzare i feature layer in ModelBuilder?


9

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:



9

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.

  • "Classi di caratteristiche" come semplici riferimenti ai dati grezzi, nella loro interezza. Un semplice esempio di ciò in cui FC è un file di forma su disco.
  • I "Livelli di funzionalità" sono riferimenti a un'astrazione dei dati, in cui è possibile interagire con una o più delle funzionalità nel set di dati non elaborato (al contrario dell'intero set di dati). I livelli sono ciò con cui interagisci efficacemente dopo aver caricato i dati in ArcMap.

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.

  1. Molti strumenti GP in ModelBuilder richiedono l'uso di un layer e non accettano un FC come input. Ciò è particolarmente vero se gli strumenti GP devono selezionare i dati. In questo scenario, è necessario interagire con LAYER, non con i dati non elaborati. Esempio: se ArcMap (o un altro programma GIS) non fosse aperto, come selezionereste le funzionalità dal file di forma non elaborato ... non è possibile. È necessario interagire con il livello in ArcMap per effettuare tale selezione.
  2. 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.

  3. 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.

  4. È possibile creare feature layer "in_memory" che sono "bin" di elaborazione dei dati veramente temporanei e che possono elaborare i dati molto più rapidamente rispetto alla scrittura su disco dopo ogni operazione. Limita anche la quantità di spazzatura che devi ripulire una volta completata l'elaborazione.

Grazie mille Ryan. La tua risposta è molto completa e chiara.
Diego Pardo

7

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)

inserisci qui la descrizione dell'immagine


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.


Questo sembra fondere due cose (dati in memoria e feature layer). Non sono gli stessi. I dati scritti in_memorynell'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.
blah238,

Solo per aggiungere al mio commento precedente, ho letto da qualche parte su questo sito che l'area di in-memorylavoro è fondamentalmente un file geodatabase che si trova in memoria, se ti piace pensarlo in quel modo.
blah238,

Come un file geodatabase, ma le aree della forma non vengono calcolate quando in_memory - fornirà il collegamento a questo in seguito.
PolyGeo

Nel secondo esempio aggiornato, si sta creando una classe di funzionalità in memoria, non un livello di funzionalità.
blah238,

2
È passato del tempo, ma ecco il link che ho promesso 6+ mesi fa.
PolyGeo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.