Dlaczego tak ważne jest stosowanie warstw obiektów w ModelBuilder?


Odpowiedzi:



9

Istnieje kilka powodów, dla których chcesz odwoływać się do warstw elementów w ModelBuilder, w przeciwieństwie do klas elementów. Po pierwsze, pomocne jest zrozumienie różnic.

  • „Klasy funkcji” jako po prostu odniesienia do nieprzetworzonych danych w całości. Jednym prostym przykładem tego, gdzie FC jest plikiem kształtu na dysku.
  • „Warstwy obiektów” to odniesienia do abstrakcji danych, w których można wchodzić w interakcje z jedną lub kilkoma funkcjami surowego zestawu danych (w przeciwieństwie do całego zestawu danych). Warstwy są tym, z czym efektywnie współpracujesz po załadowaniu danych do ArcMap.

Biorąc pod uwagę to tło, oto kilka powodów, dla których chcesz użyć narzędzia „Make Feature Layer” jako pośrednika między danymi surowymi a innymi narzędziami geoprzetwarzania.

  1. Wiele narzędzi GP w ModelBuilder wymaga użycia warstwy i nie zaakceptuje FC jako danych wejściowych. Jest to szczególnie prawdziwe, jeśli narzędzia GP muszą wybrać dane. W tym scenariuszu musisz wchodzić w interakcje z WARSTWĄ, a nie z surowymi danymi. Przykład: Jeśli nie masz otwartego ArcMap (lub innego programu GIS), jak wybierzesz funkcje z surowego pliku kształtu ... nie możesz. Musisz dokonać interakcji z warstwą w ArcMap, aby dokonać tego wyboru.
  2. Jeśli chcesz uruchomić Model z ArcCatalog lub wyeksportować swój model do skryptu Python, który można uruchomić poza ArcGIS, musisz użyć „Warstw funkcji”, aby przekonwertować surowe dane źródłowe na „Warstwy”. Byłoby to analogiczne do „dodawania danych” do sesji ArcMap.

  3. Korzystanie z warstw ułatwia podzestaw danych podczas pracy w ModelBuilder. Powiedzmy, że chcesz przetwarzać wszystkie dane z atrybutem „A” za pomocą jednej metody, ale wszystkie dane z atrybutem „B” za pomocą innej metody. Możesz raz odwołać się do swoich surowych danych, a następnie podzielić je na dwie „gałęzie” za pomocą warstw funkcji i przetworzyć każdy zestaw niezależnie, ale wpływając na / aktualizując pojedynczy zestaw danych źródłowych.

  4. Możesz tworzyć warstwy funkcji „in_memory”, które są naprawdę tymczasowymi „pojemnikami” przetwarzania danych i które mogą przetwarzać dane znacznie szybciej niż zapisywanie na dysku po każdej operacji. Ogranicza to również ilość śmieci, które musisz wyczyścić po zakończeniu przetwarzania.

Dziękuję bardzo Ryan. Twoja odpowiedź jest bardzo kompletna i jasna.
Diego Pardo,

7

Włączenie tymczasowych warstw do modeli skraca również czas przetwarzania. Z punktu widzenia przetwarzania jest znacznie wydajniejsze zapisywanie w pamięci niż zapisywanie na dysku. Podobnie możesz zapisać dane tymczasowe w obszarze roboczym in_memory , który jest również bardziej wydajny obliczeniowo.

Wiele operacji w ArcGIS wymaga tymczasowych warstw jako danych wejściowych. Na przykład Wybierz warstwę według lokalizacji (zarządzanie danymi) jest bardzo potężnym i poręcznym narzędziem, które pozwala wybierać cechy warstwy, które dzielą relacje przestrzenne z inną funkcją zaznaczania. Możesz określić złożone relacje, takie jak „HAVE_THEIR_CENTER_IN” lub „BOUNDARY_TOUCHES” itp.

Edytować:

Z ciekawości i aby rozwinąć różnice w przetwarzaniu przy użyciu warstw obiektów i przestrzeni roboczej in_memory, rozważ następujący test prędkości, w którym 39 000 punktów jest buforowanych 100 m:

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)

wprowadź opis zdjęcia tutaj


Widzimy, że metody 2 i 3 są równoważne i około 3 razy szybsze niż metoda 1. Pokazuje to siłę użycia warstw cech jako pośrednich kroków w większych przepływach pracy.


Wydaje się, że łączy to dwie rzeczy (dane w pamięci i warstwy obiektów). One nie są takie same. Dane zapisywane w in_memoryobszarze roboczym to nadal dane (np. Klasy elementów i tabele) nadal zajmują (potencjalnie dużo) miejsca. Z drugiej strony Warstwy funkcji to widok danych, umożliwiający wybranie podzbioru danych i wykorzystanie ich w kolejnych procesach, a nie duplikowanie danych tylko w celu uzyskania ich podzbioru. Warstwy funkcji nie zajmują prawie wcale miejsca. Lubię myśleć o nich jako o „wskaźnikach z metadanymi”, np. Wskazują one pewne dane i opisują, jak je wyszukiwać / renderować.
blah238

Aby dodać do mojego poprzedniego komentarza, przeczytałem gdzieś na tej stronie, że in-memoryobszar roboczy jest w zasadzie geobazą plików, która znajduje się w pamięci, jeśli chcesz o tym myśleć w ten sposób.
blah238

Podobnie jak geobaza plików, ale obszary kształtu nie są obliczane, gdy in_memory - poda link do tego później.
PolyGeo

W zaktualizowanym drugim przykładzie tworzysz klasę elementów w pamięci, a nie warstwę elementów.
blah238

2
Minęło trochę czasu, ale oto link, który obiecałem ponad 6 miesięcy temu.
PolyGeo
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.