Próbuję zrozumieć tworzenie geoprocesu za pomocą ModelBuilder, ale nie wiem, dlaczego podczas tworzenia geoprocesu za pomocą ModelBuilder ważne jest stosowanie warstw obiektów zamiast klas elementów. Czy ktoś może wyjaśnić dlaczego?
Próbuję zrozumieć tworzenie geoprocesu za pomocą ModelBuilder, ale nie wiem, dlaczego podczas tworzenia geoprocesu za pomocą ModelBuilder ważne jest stosowanie warstw obiektów zamiast klas elementów. Czy ktoś może wyjaśnić dlaczego?
Odpowiedzi:
Modele mogą mieć wiele warstw wyjściowych podprocesu w zależności od ich wielkości i złożoności. Aby wyeliminować zapisywanie plików na dysku twardym, niektóre narzędzia zmuszają do korzystania z warstw obiektów (np. Iterate Feature Selection lub Select by Attribute ). Warstwy obiektów są tymczasowe i nie będą się utrzymywać po zakończeniu modelu.
Zobacz Tworzenie warstwy obiektów
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.
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.
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.
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.
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)
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.
in_memory
obszarze 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ć.
in-memory
obszar 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.