¿Realiza cálculos de trama múltiple de QGIS modeler con datos de CSV externo?

20

Necesito realizar múltiples cálculos en un conjunto de rásteres basados ​​en valores en un archivo de metadatos CSV.

Estoy usando el modelador gráfico QGIS y puedo llamar a un campo específico en un CSV con las entradas Tabley Table Field.

Como tengo varios rásteres y cada ráster tiene un valor correspondiente en el CSV, ¿cómo llamo a la fila específica? (similar a una búsqueda, por ejemplo).

No quiero agregar un script si no tengo que hacerlo para facilitar su uso.

HDunn
fuente
1
Probablemente sería más fácil abordar esto convirtiendo los rásteres en archivos de puntos. A partir de ahí, sería más fácil hacer los enlaces necesarios entre los dos archivos. webhelp.esri.com/arcgisdesktop/9.3/…
Jamie2483
3
Haga una lista (pseudocódigo) de su tarea. Esto le dirá si necesita recurrir a un script para hacer su trabajo. Las iteraciones o los procedimientos condicionales son indicadores de que tiene que recurrir a los scripts. Hecho con scripts de estructura son tus amigos.
ragnvald

Respuestas:

2

Publicación muy antigua pero supongo que una posible solución es, desafortunadamente para su caso, usar un script en su modelador que:

  • Recupera los nombres de todas las capas ráster cargadas.
  • Iterar a través de los metadatos que contienen una columna con nombres ráster.
  • Coincide con los nombres de ráster cargados con los de los metadatos.
  • Si se encuentran coincidencias, se extrae el valor correspondiente del ráster.

  1. Puede crear un script desde:

    Processing Toolbox > Scripts > Tools > Create new script
    

    Luego use algo como lo siguiente que:

    ##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. Luego agregue el script a su modelador (hice un ejemplo simple con solo dos entradas):

    Modelador

    Si ejecuto este modelo usando el script anterior, simplemente imprime el valor de salida de los metadatos que corresponde al nombre del ráster:

    Resultado


  1. Dependiendo de cómo se construya su modelo y posiblemente modificando el guión, puede realizar sus múltiples cálculos ráster.
Joseph
fuente