Выполнение QGIS modeler нескольких растровых расчетов с данными из внешнего CSV?

20

Мне нужно выполнить несколько вычислений для набора растров на основе значений в файле метаданных CSV.

Я использую графический редактор QGIS и могу вызывать определенное поле в CSV с помощью Tableи Table Fieldвходов.

Так как у меня есть несколько растров, и у каждого растра есть соответствующее значение в CSV, как мне вызвать определенную строку? (похоже на поиск, например).

Я не хочу добавлять скрипт, если мне не нужно для простоты использования.

HDunn
источник
1
Вероятно, было бы проще приблизиться к этому путем преобразования растров в точечные файлы. Оттуда было бы легче сделать необходимые связи между этими двумя файлами. webhelp.esri.com/arcgisdesktop/9.3/…
Jamie2483
3
Составьте список (псевдокод) вашей задачи. Это скажет вам, если вам нужно прибегнуть к сценарию, чтобы сделать свою работу. Итерации или условные процедуры являются признаками того, что вам приходится прибегать к сценариям. Сделано со структурой скриптов ваших друзей.
Raggnvald

Ответы:

2

Действительно старый пост, но я думаю, что возможное решение состоит в том, чтобы, к сожалению, для вашего случая, использовать скрипт в вашей модели, который:

  • Получает имена всех загруженных растровых слоев.
  • Перебирайте метаданные, содержащие столбец с растровыми именами.
  • Сопоставляет имена загруженных растров с именами в метаданных.
  • Если какие-либо совпадения найдены, соответствующее значение растра извлекается.

  1. Вы можете создать скрипт из:

    Processing Toolbox > Scripts > Tools > Create new script
    

    Затем используйте что-то вроде следующего:

    ##Example=name
    ##Table=table
    ##Field=Field Table
    ##Output_value=output Number
    
    from qgis.core import QgsMapLayer, QgsMapLayerRegistry
    import csv
    
    raster_list = [layer.name() for layer in QgsMapLayerRegistry.instance().mapLayers().values() if layer.type() == QgsMapLayer.RasterLayer]
    with open(Table) as f:
        reader = csv.reader(f)
        for row in reader:
            for raster in raster_list:
                if raster in row[0]:
                    Output_value = row[1]
                    print Output_value
    

  1. Затем добавьте скрипт в ваш моделер (я сделал простой пример с двумя входами):

    лепщик

    Если я запускаю эту модель с использованием приведенного выше сценария, она просто печатает выходное значение из метаданных, которое соответствует имени растра:

    Результат


  1. В зависимости от того, как построена ваша модель и, возможно, внесены изменения в сценарий, вы можете выполнить несколько растровых вычислений.
Джозеф
источник