Esecuzione di calcoli raster con modellatore QGIS con dati da CSV esterni?


20

Devo eseguire più calcoli su un set di raster basati sui valori in un file di metadati CSV.

Sto usando il modellatore grafico QGIS e posso chiamare un campo specifico in un CSV con gli input Tablee Table Field.

Poiché ho più raster e ogni raster ha un valore corrispondente nel CSV, come posso chiamare la riga specifica? (simile a una ricerca per esempio).

Non voglio aggiungere uno script se non devo farlo per facilità d'uso.


1
Probabilmente sarebbe più facile affrontarlo convertendo i raster in file di punti. Da lì sarebbe più semplice creare i collegamenti necessari tra i due file. webhelp.esri.com/arcgisdesktop/9.3/…
Jamie2483

3
Crea un elenco (pseudocodice) dell'attività. Questo ti dirà se hai bisogno di ricorrere a uno script per fare il tuo lavoro. Iterazioni o procedure condizionali sono indicatori del fatto che devi ricorrere a script. Fatto con gli script di struttura sono i tuoi amici.
ragnvald,

Risposte:


2

Post davvero vecchio ma immagino che una possibile soluzione sia, purtroppo per il tuo caso, utilizzare uno script nel tuo modellatore che:

  • Recupera i nomi di tutti i livelli raster caricati.
  • Scorrere i metadati che contengono una colonna con nomi raster.
  • Abbina i nomi raster caricati con quelli nei metadati.
  • Se vengono trovate corrispondenze, viene estratto il valore corrispondente del raster.

  1. Puoi creare uno script da:

    Processing Toolbox > Scripts > Tools > Create new script
    

    Quindi utilizzare qualcosa di simile al seguente che:

    ##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. Quindi aggiungi lo script nel tuo modellatore (ho fatto un semplice esempio con solo due input):

    Modellatore

    Se eseguo questo modello usando lo script sopra, stampa semplicemente il valore di output dai metadati che corrisponde al nome del raster:

    Risultato


  1. A seconda di come viene realizzato il modello e, eventualmente, di modificare lo script, è possibile eseguire più calcoli raster.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.