Це можна зробити за допомогою інструменту « Обчислити значення (управління даними) » та деякої магії Python. Дивіться також це пов'язане питання: Додати довільний код до конструктора моделі Arcgis?
Багатозначний змінна просто між якими ставиться крапка з комою рядок значень, так що multivaluesToCsv
функція нижче робить це розділити багатозначними змінні в списки і перенести їх в рядки , які потім записуються в вигляді CSV (значення , розділені комами) текстовий файл.
Ітератори моделі запускають ВСІ процеси в моделі один раз за ітерацію - це небажано для нашого інструменту «Розрахувати значення», який ми просто хочемо запустити один раз в кінці. Досягнення цього полягає в створенні іншої, зовнішньої моделі для обгортання оригінальної внутрішньої моделі. Про це йдеться у довідковій темі Інтеграція моделі в модель .
Отже, ось що потрібно зробити, щоб це працювало:
Внутрішня модель - Ітератує класи функцій, обробляє їх, збирає значення:
- У свою оригінальну модель, яка буде нашою "внутрішньою" моделлю, додайте ще один інструмент "Збір значень" для збору
Name
значень змінної, щоб ми могли зіставити статистичні значення відстаней у відповідні назви класів функцій.
- Розкрийте вхідні та вихідні змінні як параметри моделі (клацніть правою кнопкою миші овал та встановіть прапорець Параметр моделі). Зробіть це для кожного з результатів інструментів Collect Value, а також усіх необхідних вхідних параметрів, таких як Input Workspace.
- Збережіть і закрийте внутрішню модель.
Зовнішня модель - запускає внутрішню модель, запускає інструмент «Обчислити значення» лише один раз, коли внутрішня модель завершується:
- Створіть нову модель - це буде наша "зовнішня" модель.
- Додайте змінну типу,
Folder
щоб ви могли вказати, де створити вихідний CSV-файл.
- Додайте змінну типу,
String
щоб ви могли вказати ім'я вихідного CSV-файла.
- Додайте Внутрішню модель до нової моделі (перетягніть з ArcToolbox або клацніть правою кнопкою миші та Додати дані або інструмент, перейдіть до внутрішньої моделі та натисніть Додати)
- Створіть змінні для будь-яких параметрів внутрішньої моделі, яку ви хочете мати можливість встановити із зовнішньої моделі, наприклад, вхідної робочої області (клацніть правою кнопкою миші внутрішню модель та оберіть Зробити змінну-з параметра).
- Додайте інструмент "Обчислити значення" до нової моделі
Вставте наступне у відповідні поля інструменту «Обчислити значення»:
Вираз :
multivaluesToCsv(r"%Output CSV File Location%", "%Output CSV File Name%", "%Feature Class Names%", "%Minimum Distance Values%", "%Average Distance Values%", "%Maximum Distance Values%")
- При цьому використовується підстановка змінної в рядку для передачі змінних моделі у функцію. Налаштуйте відповідно до назв змінних вашої моделі.
r
До того "%Output CSV File Location%"
значний: це вказує на те, що це сировина рядок ; оскільки шляхи до файлової системи Windows зазвичай містять зворотні косої риси ( символ втечі в Python), ми повинні використовувати це для запобігання неправильному трактуванню косої косої риски та наступних символів Python як спеціальні послідовності символів.
- Обов'язково поставте лапки навколо рядкових змінних, оскільки без них Python буде думати, що вони є ідентифікаторами, а не рядками.
Блок коду:
import os, csv
def multivaluesToCsv(csvfilepath, csvfilename, fcnames, minvalues, avgvalues, maxvalues):
ext = 'csv' # Define output file extension (e.g. csv or txt)
header = ['FC', 'MIN', 'AVG', 'MAX'] # Define header row (column names)
# Join CSV file path and name, adding extension if necessary
csvfile = os.path.join(csvfilepath, os.extsep.join((csvfilename, ext)) if not os.path.splitext(csvfilename)[1].lower().endswith(ext) else csvfilename)
# Open text file for writing
with open(csvfile, 'wb') as f:
w = csv.writer(f)
w.writerow(header) # Write header row
rows = zip(*map(lambda x: x.split(';'), [fcnames, minvalues, avgvalues, maxvalues])) # Transpose the semicolon-delimited values into rows
w.writerows(rows)
return csvfile
(Необов’язково) Розкрийте вхідні та вихідні змінні як параметри моделі, якщо ви хочете мати змогу запускати їх із діалогового вікна інструменту моделі або ланцюжком разом з іншими моделями / сценаріями. Єдиний вихід зовнішньої моделі - це файл CSV.
- (Необов’язково) Підключіть вхідні змінні та внутрішні вихідні моделі до інструменту «Розрахувати значення» як передумови. Я не думаю, що це насправді не має ніякого ефекту, це просто робить візуально більш зрозумілим, що відбувається.
Я перевірив це за допомогою ModelBuilder і працював над ним (див. Скріншоти).
Внутрішня модель :
Зовнішня модель:
Внутрішня модель запускає всі свої процеси один раз на клас особливості, а потім інструмент «Обчислити значення» запускається один раз в кінці, щоб вивести файл CSV один раз і лише один раз.