Чому важливо використовувати функціональні шари в ModelBuilder?


9

Я намагаюся зрозуміти створення геопроцесу за допомогою ModelBuilder, але не знаю, чому важливо використовувати шари функції замість класів функцій при створенні геопроцесу з ModelBuilder. Може хтось, будь ласка, пояснить, чому?


Відповіді:


4

Моделі можуть мати багато підпроцесорних вихідних шарів залежно від їх розміру та складності. Для усунення запису файлів на жорсткий диск деякі інструменти змушують використовувати шари функцій (наприклад, Iterate Selection Feature або Select by Attribute ). Шари функцій тимчасові і не зберігатимуться після закінчення вашої моделі.

Див. Розділ Зробити шар функції


9

Є кілька причин, чому ви хочете посилатись на Feature Layers у ModelBuilder, на відміну від класів Feature. Спочатку корисно зрозуміти відмінності.

  • "Класи функцій" як просто посилання на необроблені дані в цілому. Один простий приклад цього, коли FC - це файл форми на диску.
  • "Шари функцій" - це посилання на абстракцію даних, де ви можете взаємодіяти з однією або кількома функціями в необробленому наборі даних (на відміну від усього набору даних). Шари - це те, з чим ви ефективно взаємодієте, як тільки ви завантажили дані в ArcMap.

Отже, враховуючи цей фон, ось кілька причин, чому ви хочете використовувати інструмент "Зробити функціональний шар" в якості переходу між необробленими даними та іншими інструментами геообробки.

  1. Багато інструментів GP в ModelBuilder вимагають використання шару і не приймають FC як вхідний. Це особливо вірно, якщо вашим інструментам (ів) GP потрібно вибрати дані. У цьому сценарії вам потрібно взаємодіяти з ПРОСТО, а не з необробленими даними. Приклад: Якщо у вас не було відкрито ArcMap (або іншої програми ГІС), як би ви вибрали функції із необробленого файлу форм ... ви не можете. Вам потрібно взаємодіяти із шаром в ArcMap, щоб зробити цей вибір.
  2. Якщо ви хочете запустити модель з ArcCatalog або експортувати свою модель в сценарій Python, який можна запустити за межами ArcGIS, вам потрібно скористатися "Шарами функцій" для того, щоб ваші вихідні вихідні дані були перетворені на "Шари". Це було б аналогічно "додаванню даних" у ваш сеанс ArcMap.

  3. Використання шарів дозволяє легко підмножувати ваші дані під час проходження процесу ModelBuilder. Скажімо, ви хотіли обробити всі дані з атрибутом "A" одним методом, але всі дані з атрибутом "B" іншим методом. Ви можете один раз посилатись на свої необроблені дані, а потім розділити їх на дві "гілки" за допомогою функціональних шарів та обробити кожен набір незалежно, але впливаючи / оновлюючи єдиний набір даних.

  4. Ви можете створити шари "in_memory", які є справді тимчасовими "бункерами" для обробки даних і які можуть обробляти дані набагато швидше, ніж записувати на диск після кожної операції. Це також обмежує кількість сміття, яке ви повинні очистити після завершення обробки.

Дуже дякую, Райан. Ваша відповідь дуже повна і зрозуміла.
Дієго Пардо

7

Включення тимчасових шарів у ваші моделі також скорочує час обробки. З точки зору обробки, це набагато ефективніше запис у пам'ять порівняно із записом на диск. Аналогічно, ви можете записувати тимчасові дані в робочу область in_memory , що також є обчислювально ефективнішим.

Багато операцій в ArcGIS вимагають тимчасових шарів як вхідних даних. Наприклад, Select Layer By Location (Управління даними) - це дуже потужний і зручний інструмент, який дозволяє вибрати функції шару, що розділяє просторові відносини з іншою функцією вибору. Ви можете вказати складні відносини, такі як "HAVE_THEIR_CENTER_IN" або "BOUNDARY_TOUCHES" тощо.

Редагувати:

З цікавості та детальної обробки відмінностей за допомогою функціональних шарів та робочої області в пам’яті розглянемо наступний тест на швидкість, де на 100 м буферизовано 39 000 балів:

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.