Warum ist es wichtig, Feature-Layer in ModelBuilder zu verwenden?


9

Ich versuche zu verstehen, wie ein Geoprozess mit ModelBuilder erstellt wird, weiß aber nicht, warum es wichtig ist, beim Erstellen eines Geoprozesses mit ModelBuilder Feature-Layer anstelle von Feature-Classes zu verwenden. Kann mir bitte jemand erklären warum?


Antworten:



9

Es gibt mehrere Gründe, warum Sie im Gegensatz zu Feature-Classes auf Feature-Layer in ModelBuilder verweisen möchten. Zunächst ist es hilfreich, die Unterschiede zu verstehen.

  • "Feature-Classes" als einfache Verweise auf die Rohdaten in ihrer Gesamtheit. Ein einfaches Beispiel hierfür, bei dem der FC ein Shapefile auf der Festplatte ist.
  • "Feature-Layer" sind Verweise auf eine Abstraktion der Daten, bei der Sie mit einem oder mehreren Features im Rohdatensatz interagieren können (im Gegensatz zum gesamten Datensatz). Mit Ebenen interagieren Sie effektiv, sobald Sie die Daten in ArcMap geladen haben.

Vor diesem Hintergrund gibt es einige Gründe, warum Sie das Werkzeug "Feature-Layer erstellen" als Vermittler zwischen den Rohdaten und anderen Geoverarbeitungswerkzeugen verwenden möchten.

  1. Viele GP-Tools in ModelBuilder erfordern die Verwendung einer Ebene und akzeptieren keine FC als Eingabe. Dies gilt insbesondere dann, wenn Ihre GP-Tools Daten auswählen müssen. In diesem Szenario müssen Sie mit dem LAYER interagieren, nicht mit den Rohdaten. Beispiel: Wenn Sie ArcMap (oder ein anderes GIS-Programm) nicht geöffnet hätten, wie würden Sie Features aus dem Roh-Shapefile auswählen ... können Sie nicht. Sie müssen mit der Ebene in ArcMap interagieren, um diese Auswahl zu treffen.
  2. Wenn Sie ein Modell aus ArcCatalog ausführen oder Ihr Modell in ein Python-Skript exportieren möchten, das außerhalb von ArcGIS ausgeführt werden kann, müssen Sie "Feature-Layer" verwenden, damit Ihre Rohquelldaten in "Layer" konvertiert werden. Dies wäre analog zum "Hinzufügen von Daten" zu Ihrer ArcMap-Sitzung.

  3. Durch die Verwendung von Ebenen können Sie Ihre Daten im ModelBuilder-Prozess ganz einfach unterteilen. Angenommen, Sie möchten alle Daten mit dem Attribut "A" mit einer Methode verarbeiten, aber alle Daten mit dem Attribut "B" mit einer anderen Methode. Sie können Ihre Rohdaten einmal referenzieren, dann die Daten mithilfe von Feature-Layern in zwei "Zweige" aufteilen und jeden Satz unabhängig verarbeiten, jedoch das einzelne Quellendatensatz beeinflussen / aktualisieren.

  4. Sie können Feature-Layer "in_memory" erstellen, die wirklich temporäre "Bins" für die Datenverarbeitung sind und die Daten nach jedem Vorgang viel schneller verarbeiten können als beim Schreiben auf die Festplatte. Es begrenzt auch die Menge an Müll, die Sie nach Abschluss Ihrer Verarbeitung bereinigen müssen.

Vielen Dank Ryan. Ihre Antwort ist sehr vollständig und klar.
Diego Pardo

7

Durch das Einfügen temporärer Ebenen in Ihre Modelle wird auch die Verarbeitungszeit verkürzt. Unter dem Gesichtspunkt der Verarbeitung ist das Schreiben in den Speicher wesentlich effizienter als das Schreiben auf die Festplatte. In ähnlicher Weise können Sie temporäre Daten in den Arbeitsbereich in_memory schreiben , was auch rechnerisch effizienter ist.

Viele Vorgänge in ArcGIS erfordern temporäre Ebenen als Eingaben. Zum Beispiel ist " Ebene nach Ort auswählen" (Datenverwaltung) ein sehr leistungsfähiges und praktisches Tool, mit dem Sie Merkmale einer Ebene auswählen können, die räumliche Beziehungen mit einem anderen Auswahlmerkmal teilen. Sie können komplexe Beziehungen wie "HAVE_THEIR_CENTER_IN" oder "BOUNDARY_TOUCHES" usw. angeben.

Bearbeiten:

Betrachten Sie aus Neugier und um die Verarbeitungsunterschiede mithilfe von Feature-Layern und dem Arbeitsbereich in_memory zu erläutern, den folgenden Geschwindigkeitstest, bei dem 39.000 Punkte 100 m gepuffert sind:

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)

Geben Sie hier die Bildbeschreibung ein


Wir können sehen, dass die Methoden 2 und 3 äquivalent und ungefähr dreimal schneller als Methode 1 sind. Dies zeigt die Leistungsfähigkeit der Verwendung von Feature-Layern als Zwischenschritte in größeren Workflows.


Dies scheint zwei Dinge miteinander zu verbinden (In-Memory-Daten und Feature-Layer). Sie sind nicht gleich. In den in_memoryArbeitsbereich geschriebene Daten sind weiterhin Daten (z. B. Feature-Classes und Tabellen), die weiterhin (möglicherweise viel) Speicherplatz beanspruchen. Feature-Layer hingegen sind eine Ansicht der Daten, mit der Sie eine Teilmenge der Daten auswählen und in nachfolgenden Prozessen verwenden können, anstatt Daten zu duplizieren, nur um eine Teilmenge davon zu erhalten. Feature-Layer nehmen fast keinen Platz ein. Ich stelle sie mir gerne als "Zeiger mit Metadaten" vor, z. B. zeigen sie auf einige Daten und beschreiben, wie sie abgefragt / gerendert werden.
blah238

Um meinen vorherigen Kommentar zu ergänzen, habe ich irgendwo auf dieser Site gelesen, dass der in-memoryArbeitsbereich im Grunde eine Datei-Geodatabase ist, die sich im Speicher befindet, wenn Sie es so sehen möchten.
blah238

Wie eine Datei-Geodatabase, aber Formbereiche werden nicht berechnet, wenn in_memory - wird später einen Link dazu bereitstellen.
PolyGeo

In Ihrem aktualisierten zweiten Beispiel erstellen Sie eine speicherinterne Feature-Class und keine Feature-Layer.
blah238

2
Es hat eine Weile gedauert, aber hier ist der Link, den ich vor mehr als 6 Monaten versprochen habe.
PolyGeo
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.