Почему важно использовать слои объектов в ModelBuilder?

9

Я пытаюсь понять создание геообработки с ModelBuilder, но я не знаю, почему важно использовать слои объектов вместо классов пространственных объектов при создании геообработки с ModelBuilder. Может кто-нибудь объяснить, почему?

Диего Пардо
источник

Ответы:

4

Модели могут иметь много выходных слоев подпроцесса в зависимости от их размера и сложности. Чтобы исключить запись файлов на жесткий диск, некоторые инструменты заставляют вас использовать слои объектов (например, « Итерация выбора объектов» или « Выбор по атрибуту» ). Слои объектов являются временными и не будут сохраняться после окончания работы модели.

См. Создание векторного слоя.

artwork21
источник
9

Есть несколько причин, по которым вы хотите ссылаться на слои объектов в ModelBuilder, а не на классы объектов. Сначала полезно понять различия.

  • «Классы объектов» - это просто ссылки на необработанные данные во всей их полноте. Один простой пример этого, где FC представляет собой шейп-файл на диске.
  • «Слои объектов» - это ссылки на абстракцию данных, где вы можете взаимодействовать с одной или несколькими функциями в наборе необработанных данных (в отличие от всего набора данных). Слои - это то, с чем вы эффективно взаимодействуете после загрузки данных в ArcMap.

Исходя из этого, вот несколько причин, по которым вы хотите использовать инструмент «Создать векторный слой» в качестве посредника между необработанными данными и другими инструментами геообработки.

  1. Многие инструменты GP в ModelBuilder требуют использования слоя и не принимают FC в качестве входных данных. Это особенно верно, если ваш инструмент (ы) GP должны выбрать данные. В этом случае вам нужно взаимодействовать со СЛОЕМ, а не с необработанными данными. Пример: Если у вас не было открыто ArcMap (или другой ГИС-программы), как бы вы выбирали объекты из необработанного шейп-файла ... вы не можете. Вам нужно взаимодействовать со слоем в ArcMap, чтобы сделать этот выбор.
  2. Если вы хотите запустить модель из ArcCatalog или экспортировать вашу модель в скрипт Python, который можно запустить вне ArcGIS, вам необходимо использовать «Слои объектов», чтобы преобразовать исходные данные в «Слои». Это было бы аналогично «добавлению данных» в ваш сеанс ArcMap.

  3. Использование слоев упрощает поднабор ваших данных в процессе ModelBuilder. Скажем, вы хотите обработать все данные с атрибутом «A» одним методом, но все данные с атрибутом «B» другим методом. Вы можете ссылаться на ваши необработанные данные один раз, а затем разделить данные на две «ветви», используя Feature Layers, и обрабатывать каждый набор независимо, но влияя на / обновляя один исходный набор данных.

  4. Вы можете создать слои объектов «in_memory», которые являются действительно временными «корзинами» для обработки данных и которые могут обрабатывать данные намного быстрее, чем запись на диск после каждой операции. Это также ограничивает количество мусора, который вы должны очистить после завершения обработки.
RyanKDalton
источник
Большое спасибо Райан. Ваш ответ очень полный и понятный.
Диего Пардо
7

Включение временных слоев в ваши модели также сокращает время обработки. С точки зрения обработки, это гораздо более эффективная запись в память по сравнению с записью на диск. Точно так же вы можете записать временные данные в рабочую область 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рабочее пространство, по-прежнему являются данными (например, классы пространственных объектов и таблицы), которые все еще занимают (потенциально много) пространства. Слои объектов, с другой стороны, представляют собой представление данных, позволяющее вам выбирать подмножество данных и использовать их в последующих процессах, а не дублировать данные просто для того, чтобы получить их подмножество. Слои объектов практически не занимают места. Мне нравится думать о них как об «указателях с метаданными», например, они указывают на некоторые данные и описывают, как их запрашивать / отображать.
blah238
Просто чтобы добавить к моему предыдущему комментарию, я где-то читал на этом сайте, что in-memoryрабочая область - это, по сути, файловая база геоданных, которая находится в памяти, если вам нравится думать об этом таким образом.
blah238
Подобно файловой базе геоданных, но области формы не рассчитываются, когда in_memory - предоставит ссылку на это позже.
PolyGeo
Во втором обновленном примере вы создаете класс пространственных объектов в памяти, а не векторный слой.
blah238
2
Прошло некоторое время, но вот ссылка, которую я обещал 6+ месяцев назад.
PolyGeo