Виконуєте моделювання QGIS декількох растрових обчислень з даними із зовнішнього CSV?


20

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

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

Оскільки у мене є кілька растрових і кожен растр має відповідне значення у CSV, як я можу викликати конкретний рядок? (як, наприклад, пошук).

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


1
Можливо, було б простіше підійти до цього шляхом перетворення растрових файлів у точкові файли. Звідти було б простіше зробити необхідні зв’язки між двома файлами. webhelp.esri.com/arcgisdesktop/9.3/…
Jamie2483

3
Складіть список (псевдокод) свого завдання. Це підкаже вам, чи вам потрібно вдатися до сценарію, щоб виконувати свою роботу. Ітерації або умовні процедури - це показники того, що вам потрібно вдаватися до сценаріїв. Зі сценаріями структури - ваші друзі.
ragnvald

Відповіді:


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