Экспорт данных из выходных данных «Сбор значений» в ArcGIS ModelBuilder?

11

Я сейчас играю с ModelBuilder. Я добавил фотографию модели, которая у меня есть на данный момент.

Эта модель в настоящее время повторяет 6 шейп-файлов, поэтому каждое из «выходных значений» содержит 6 цифр в списке. Я не могу найти способ извлечь значения из этих списков в таблицу / текстовый файл или аналогичный.

Есть ли способ сделать это?

модель

Вот что показано, когда я открываю «выходные значения» после запуска модели: введите описание изображения здесь

Я просто хочу как-то взять эти 6 цифр ...

JPD
источник
Это в основном то же самое, что вы спрашиваете здесь правильно? gis.stackexchange.com/questions/25922/… Сбор значений делает именно это. Если вы прочитаете справку, она скажет вам, что она собирает значения, которые можно передать в другой инструмент. Так что вы пытаетесь сделать со значениями? Это просто записать их в файл или они нужны для дальнейшей обработки?
theJones
Я просто хочу записать их в файл. Я не могу найти инструмент для ввода выходных значений в конструктор моделей для их извлечения.
JPD

Ответы:

17

Вы можете сделать это, используя инструмент Calculate Value (Data Management) и немного магии Python. Смотрите также этот связанный вопрос: Добавить произвольный код в компоновщик моделей Arcgis?

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

Итераторы модели запускают ВСЕ процессы в модели один раз за итерацию - это нежелательно для нашего инструмента Calculate Value, который мы просто хотим запустить один раз в конце. Способ, которым вы достигнете этого, - создать другую внешнюю модель, чтобы обернуть оригинальную внутреннюю модель. Это обсуждается в разделе справки « Интеграция модели в модель» .

Итак, вот что вам нужно сделать, чтобы это заработало:

Внутренняя модель - перебирает классы объектов, обрабатывает их, собирает значения:

  1. В вашей исходной модели, которая будет нашей «внутренней» моделью, добавьте еще один инструмент «Сбор значений» для сбора Nameзначений переменной, чтобы мы могли сопоставить значения статистики расстояний с соответствующими именами классов объектов.
  2. Выставьте входные и выходные переменные в качестве параметров модели (щелкните правой кнопкой мыши овал и выберите параметр модели). Сделайте это для каждого из выходов инструментов Collect Value, а также для любых необходимых вам входных параметров, таких как Рабочая область ввода.
  3. Сохраните и закройте внутреннюю модель.

Внешняя модель - запускает внутреннюю модель, запускает инструмент Calculate Value только один раз, когда внутренняя модель завершает:

  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%")
    • Это использует встроенную подстановку переменных для передачи переменных модели в функцию. Настройте в соответствии с именами переменных вашей модели.
    • Значение rbefore "%Output CSV File Location%"является значительным: это указывает на то, что это необработанная строка ; Поскольку пути файловой системы Windows обычно содержат обратную косую черту ( escape-символ в 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. (Необязательно) Подключите входные переменные и внутренние выходные данные модели к инструменту Calculate Value в качестве предварительных условий. Я не думаю, что это на самом деле имеет какой-либо эффект, это только делает визуально более ясным, что происходит.

Я проверил это с ModelBuilder и получил его работать (см. Скриншоты).

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

Наружная модель: Внешняя модель

Внутренняя модель запускает все свои процессы один раз для каждого класса пространственных объектов, а затем инструмент «Расчет значения» запускается один раз в конце, чтобы вывести файл CSV один раз и только один раз.

blah238
источник
Здравствуйте, спасибо, что приложили столько усилий для вашего ответа и извинения за мой поздний ответ. Я пытаюсь запустить модель, как вы описали, но у меня проблемы с CSV. Я создал пустой файл CSV в Excel и сохранил его, а затем загрузил в модель. ОШИБКА 000539: Ошибка при выполнении выражения: multivaluesToCsv (r "% CSV File%", "% FC Имя значения%", "% Минимальные значения%", "% Средние значения%", "% Максимальные значения%") <исключения типа " .IOError '>: [Errno 13] Отказано в доступе: u'% CSV File% 'Не удалось выполнить (вычислить значение). Я продолжаю получать эту ошибку. Мой CSV называется CSVFile.csv.
JPD
1
Просто починили - это идеальное решение. Большое спасибо за Вашу помощь!
JPD
Код Python создаст файл CSV для вас, нет необходимости создавать его заранее. Как вы уже видели, если вы откроете файл в Excel, он заблокирует файл, и Python не сможет записать его, пока вы не закроете его.
blah238
2
К вашему сведению, я обновил инструкции и снимки экрана, чтобы использовать вложенные модели, чтобы избежать многократного выполнения вычисления значения, а также устранить проблему, когда текстовый файл должен был существовать заранее (теперь вы указываете его выходное местоположение и имя файла в качестве двух отдельных параметров).
blah238
Отличный ответ! Помог мне решить аналогичную проблему, выводя статистику перекрестной проверки геостатистического уровня в CSV-файл. Спасибо @ blah238!
Коттон.Роквуд
1

Вывод, который описывает ваша модель - это просто значение, обновленное в таблице атрибутов, не так ли? Не можете ли вы просто открыть файл .dbf, связанный с обновленным шейп-файлом?

В противном случае Table Select (Инструменты анализа> Извлечь) должен работать с запросом SQL.

veedub
источник
Здравствуйте, спасибо за ваш ответ. Боюсь, он не обновляет файл .dbf каждого шейп-файла. Добавление «Выбор таблицы» к построителю модели также не работает, поскольку я не могу подключить «Минимальное / Среднее / Максимальное расстояние» или «Выходные значения» в качестве входных данных для инструмента.
JPD