Realizando vários cálculos raster do modelador QGIS com dados de CSV externo?

20

Preciso executar vários cálculos em um conjunto de rasters com base nos valores em um arquivo de metadados CSV.

Estou usando o modelador gráfico QGIS e posso chamar um campo específico em um CSV com as entradas Tablee Table Field.

Como tenho vários rasters e cada varredura tem um valor correspondente no CSV, como chamo a linha específica? (semelhante a uma pesquisa, por exemplo).

Não quero adicionar um script se não for necessário para facilitar o uso.

HDunn
fonte
1
Provavelmente seria mais fácil abordar isso convertendo os rasters em arquivos de ponto. A partir daí, seria mais fácil fazer as ligações necessárias entre os dois arquivos. webhelp.esri.com/arcgisdesktop/9.3/...
Jamie2483
3
Faça uma lista (pseudocódigo) da sua tarefa. Isso informará se você precisa recorrer a um script para fazer seu trabalho. Iterações ou procedimentos condicionais são indicadores de que você precisa recorrer a scripts. Feito com scripts de estrutura são seus amigos.
Ragnvald 19/04

Respostas:

2

Post realmente antigo, mas acho que uma solução possível é, infelizmente para o seu caso, usar um script em seu modelador que:

  • Recupera os nomes de todas as camadas rasterizadas carregadas.
  • Repita os metadados que contêm uma coluna com nomes de varredura.
  • Corresponde os nomes da varredura carregados com os dos metadados.
  • Se alguma correspondência for encontrada, o valor correspondente da varredura é extraído.

  1. Você pode criar um script a partir de:

    Processing Toolbox > Scripts > Tools > Create new script
    

    Em seguida, use algo como o seguinte, 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. Em seguida, adicione o script ao seu modelador (fiz um exemplo simples com apenas duas entradas):

    Modelador

    Se eu executar esse modelo usando o script acima, ele simplesmente imprime o valor de saída dos metadados que correspondem ao nome da varredura:

    Resultado


  1. Dependendo de como seu modelo é construído e, possivelmente, aprimorando o script, você pode executar vários cálculos de varredura.
Joseph
fonte