Експорт даних із результатів збору значень у ArcGIS ModelBuilder?


11

Зараз я граю з ModelBuilder. Я додав фотографію моделі, яку я маю на даний момент.

Наразі ця модель повторює 6 форм-файлів, тому кожне з "вихідних значень" містить 6 фігур у списку. Я не можу знайти спосіб витягнути значення з цих списків у таблицю / текстовий файл чи подібне.

Чи є спосіб це зробити?

модель

Це те, що відображається, коли я відкриваю 'вихідні значення' після запуску моделі: введіть тут опис зображення

Я просто хочу якось схопити ці 6 номерів ...


Це в основному те саме, що ви запитуєте тут правильно? gis.stackexchange.com/questions/25922/… Колекція значень робить саме це. Якщо ви прочитаєте довідку, вона скаже вам, що вона збирає значення, які можна передати в інший інструмент. То що ви намагаєтеся робити зі значеннями? Це просто записати їх у файл чи вам потрібні для подальшої обробки?
theJones

Я просто хочу записати їх у файл. Я не можу знайти інструмент для введення вихідних значень у конструктор моделей, щоб отримати їх.
JPD

Відповіді:


17

Це можна зробити за допомогою інструменту « Обчислити значення (управління даними) » та деякої магії Python. Дивіться також це пов'язане питання: Додати довільний код до конструктора моделі Arcgis?

Багатозначний змінна просто між якими ставиться крапка з комою рядок значень, так що multivaluesToCsvфункція нижче робить це розділити багатозначними змінні в списки і перенести їх в рядки , які потім записуються в вигляді CSV (значення , розділені комами) текстовий файл.

Ітератори моделі запускають ВСІ процеси в моделі один раз за ітерацію - це небажано для нашого інструменту «Розрахувати значення», який ми просто хочемо запустити один раз в кінці. Досягнення цього полягає в створенні іншої, зовнішньої моделі для обгортання оригінальної внутрішньої моделі. Про це йдеться у довідковій темі Інтеграція моделі в модель .

Отже, ось що потрібно зробити, щоб це працювало:

Внутрішня модель - Ітератує класи функцій, обробляє їх, збирає значення:

  1. У свою оригінальну модель, яка буде нашою "внутрішньою" моделлю, додайте ще один інструмент "Збір значень" для збору Nameзначень змінної, щоб ми могли зіставити статистичні значення відстаней у відповідні назви класів функцій.
  2. Розкрийте вхідні та вихідні змінні як параметри моделі (клацніть правою кнопкою миші овал та встановіть прапорець Параметр моделі). Зробіть це для кожного з результатів інструментів Collect Value, а також усіх необхідних вхідних параметрів, таких як Input Workspace.
  3. Збережіть і закрийте внутрішню модель.

Зовнішня модель - запускає внутрішню модель, запускає інструмент «Обчислити значення» лише один раз, коли внутрішня модель завершується:

  1. Створіть нову модель - це буде наша "зовнішня" модель.
  2. Додайте змінну типу, Folderщоб ви могли вказати, де створити вихідний CSV-файл.
  3. Додайте змінну типу, Stringщоб ви могли вказати ім'я вихідного CSV-файла.
  4. Додайте Внутрішню модель до нової моделі (перетягніть з ArcToolbox або клацніть правою кнопкою миші та Додати дані або інструмент, перейдіть до внутрішньої моделі та натисніть Додати)
  5. Створіть змінні для будь-яких параметрів внутрішньої моделі, яку ви хочете мати можливість встановити із зовнішньої моделі, наприклад, вхідної робочої області (клацніть правою кнопкою миші внутрішню модель та оберіть Зробити змінну-з параметра).
  6. Додайте інструмент "Обчислити значення" до нової моделі
  7. Вставте наступне у відповідні поля інструменту «Обчислити значення»:

    Вираз :

    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
    
  8. (Необов’язково) Розкрийте вхідні та вихідні змінні як параметри моделі, якщо ви хочете мати змогу запускати їх із діалогового вікна інструменту моделі або ланцюжком разом з іншими моделями / сценаріями. Єдиний вихід зовнішньої моделі - це файл CSV.

  9. (Необов’язково) Підключіть вхідні змінні та внутрішні вихідні моделі до інструменту «Розрахувати значення» як передумови. Я не думаю, що це насправді не має ніякого ефекту, це просто робить візуально більш зрозумілим, що відбувається.

Я перевірив це за допомогою ModelBuilder і працював над ним (див. Скріншоти).

Внутрішня модель : Внутрішня модель

Зовнішня модель: Зовнішня модель

Внутрішня модель запускає всі свої процеси один раз на клас особливості, а потім інструмент «Обчислити значення» запускається один раз в кінці, щоб вивести файл CSV один раз і лише один раз.


Привіт, дякую, що доклали стільки зусиль до вашої відповіді та вибачте за мою пізню відповідь. Я намагаюся запустити модель, як ви описали, але у мене проблеми з CSV. Я створив порожній файл CSV в Excel і зберег його, а потім завантажив у модель. ПОМИЛКА 000539: Помилка запуску виразу: multivaluesToCsv (r "% CSV файл%", "% FC name Values%", "Мінімальні значення%", "% Середні значення%", "Максимальні значення%") <тип "винятки .IOError '>: [Errno 13] Дозвіл відхилено: u'% CSV файл% 'Не вдалося виконати (Обчислити значення). Я продовжую отримувати цю помилку. Мій CSV називається CSVFile.csv.
JPD

1
Просто зафіксовано - це ідеальне рішення. Дякую за допомогу!
JPD

Код Python створить файл CSV для вас, не потрібно заздалегідь створювати його. Як ви вже бачили, якщо ви відкриєте файл в Excel, він блокує файл, і він не може бути записаний Python, поки ви не закриєте його.
bla22

2
FYI Я оновив інструкції та скріншоти для використання вкладених моделей, щоб уникнути запуску обчисленої величини кілька разів, а також виправити проблему, коли текстовий файл повинен був існувати заздалегідь (тепер ви вказуєте його вихідне місце та ім'я файлу як два окремих параметра).
blah238

Відмінна відповідь! Допоміг мені вирішити аналогічну проблему, виводячи статистику геостатистичного перехресного перевтілення в файл CSV. Дякую @ blah238!
Cotton.Rockwood

1

Вихід, який описує ваша модель, просто значення, оновлене в таблиці атрибутів, чи не так? Ви не можете просто відкрити .dbf файл, пов’язаний із оновленим файлом форми?

Якщо цього не вдалося, Вибір таблиці (Інструменти аналізу> Витяг) повинен працювати з SQL-запитом.


Привіт, дякую за вашу відповідь. Я боюся, що він не оновлює .dbf файл кожного файлу форм. Додавання «Вибору таблиці» до конструктора моделі також не працює, оскільки я не можу підключити ні «Мінімальне / Середнє / Максимальне відстань», ні «Вихідні значення» як вхід для інструменту.
JPD
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.