Я пытаюсь понять создание геообработки с ModelBuilder, но я не знаю, почему важно использовать слои объектов вместо классов пространственных объектов при создании геообработки с ModelBuilder. Может кто-нибудь объяснить, почему?
Я пытаюсь понять создание геообработки с ModelBuilder, но я не знаю, почему важно использовать слои объектов вместо классов пространственных объектов при создании геообработки с ModelBuilder. Может кто-нибудь объяснить, почему?
Ответы:
Модели могут иметь много выходных слоев подпроцесса в зависимости от их размера и сложности. Чтобы исключить запись файлов на жесткий диск, некоторые инструменты заставляют вас использовать слои объектов (например, « Итерация выбора объектов» или « Выбор по атрибуту» ). Слои объектов являются временными и не будут сохраняться после окончания работы модели.
Есть несколько причин, по которым вы хотите ссылаться на слои объектов в ModelBuilder, а не на классы объектов. Сначала полезно понять различия.
Исходя из этого, вот несколько причин, по которым вы хотите использовать инструмент «Создать векторный слой» в качестве посредника между необработанными данными и другими инструментами геообработки.
Если вы хотите запустить модель из ArcCatalog или экспортировать вашу модель в скрипт Python, который можно запустить вне ArcGIS, вам необходимо использовать «Слои объектов», чтобы преобразовать исходные данные в «Слои». Это было бы аналогично «добавлению данных» в ваш сеанс ArcMap.
Использование слоев упрощает поднабор ваших данных в процессе ModelBuilder. Скажем, вы хотите обработать все данные с атрибутом «A» одним методом, но все данные с атрибутом «B» другим методом. Вы можете ссылаться на ваши необработанные данные один раз, а затем разделить данные на две «ветви», используя Feature Layers, и обрабатывать каждый набор независимо, но влияя на / обновляя один исходный набор данных.
Включение временных слоев в ваши модели также сокращает время обработки. С точки зрения обработки, это гораздо более эффективная запись в память по сравнению с записью на диск. Точно так же вы можете записать временные данные в рабочую область in_memory , что также более эффективно с точки зрения вычислений.
Многие операции в ArcGIS требуют временных слоев в качестве входных данных. Например, « Выбор слоя по местоположению» («Управление данными») - это очень мощный и удобный инструмент, который позволяет вам выбирать элементы слоя, которые совместно используют пространственные отношения с другим элементом выбора. Вы можете указать сложные отношения, такие как "HAVE_THEIR_CENTER_IN" или "BOUNDARY_TOUCHES" и т. Д.
Редактировать:
Из любопытства и для уточнения обработки различий с использованием векторных слоев и рабочей области in_memory рассмотрим следующий тест скорости, где 39 000 точек буферизуются на 100 м:
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)
Мы можем видеть, что методы 2 и 3 эквивалентны и примерно в 3 раза быстрее, чем метод 1. Это показывает мощь использования векторных слоев в качестве промежуточных шагов в больших рабочих процессах.
in_memory
рабочее пространство, по-прежнему являются данными (например, классы пространственных объектов и таблицы), которые все еще занимают (потенциально много) пространства. Слои объектов, с другой стороны, представляют собой представление данных, позволяющее вам выбирать подмножество данных и использовать их в последующих процессах, а не дублировать данные просто для того, чтобы получить их подмножество. Слои объектов практически не занимают места. Мне нравится думать о них как об «указателях с метаданными», например, они указывают на некоторые данные и описывают, как их запрашивать / отображать.
in-memory
рабочая область - это, по сути, файловая база геоданных, которая находится в памяти, если вам нравится думать об этом таким образом.