使用来自外部CSV的数据执行QGIS Modeler多个栅格计算?


20

我需要根据CSV元数据文件中的值对一组栅格执行多次计算。

我正在使用QGIS图形建模器,并且可以使用TableTable Field输入在CSV中调用特定字段。

由于我有多个栅格,并且每个栅格在CSV中都有一个对应的值,因此如何调用特定的行?(例如类似于查找)。

如果我不需要为了易用性而不想添加脚本。


1
通过将栅格转换为点文件可能更容易实现此目的。从那里可以更轻松地在两个文件之间建立必要的链接。 webhelp.esri.com/arcgisdesktop/9.3/...
Jamie2483

3
列出您的任务(伪代码)。这将告诉您是否需要使用脚本来完成工作。迭代或条件过程是您必须诉诸脚本的指示。与结构脚本一起做的是您的朋友。
ragnvald

Answers:


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. 根据模型的构造方式以及可能的脚本调整方式,可以执行多个栅格计算。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.