Effectuer des calculs raster multiples de QGIS modeler avec des données de CSV externe?

20

J'ai besoin d'effectuer plusieurs calculs sur un ensemble de rasters en fonction des valeurs d'un fichier de métadonnées CSV.

J'utilise le modeleur graphique QGIS et je peux appeler un champ spécifique dans un CSV avec les entrées Tableet Table Field.

Étant donné que j'ai plusieurs rasters et que chaque raster a une valeur correspondante dans le CSV, comment appeler la ligne spécifique? (similaire à une recherche par exemple).

Je ne veux pas ajouter de script si je n'en ai pas besoin pour en faciliter l'utilisation.

HDunn
la source
1
Il serait probablement plus facile d'aborder cela en convertissant les rasters en fichiers de points. À partir de là, il serait plus facile de faire les liens nécessaires entre les deux fichiers. webhelp.esri.com/arcgisdesktop/9.3/…
Jamie2483
3
Faites une liste (pseudocode) de votre tâche. Cela vous indiquera si vous devez recourir à un script pour faire votre travail. Les itérations ou les procédures conditionnelles indiquent que vous devez recourir à des scripts. Les scripts de structure sont vos amis.
ragnvald

Réponses:

2

Vraiment un vieux post mais je suppose qu'une solution possible est, malheureusement pour votre cas, d'utiliser un script dans votre modeleur qui:

  • Récupère les noms de toutes les couches raster chargées.
  • Parcourez les métadonnées qui contiennent une colonne avec des noms raster.
  • Correspond aux noms de raster chargés avec ceux des métadonnées.
  • Si des correspondances sont trouvées, la valeur correspondante du raster est extraite.

  1. Vous pouvez créer un script à partir de:

    Processing Toolbox > Scripts > Tools > Create new script
    

    Ensuite, utilisez quelque chose comme ce qui suit:

    ##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. Ajoutez ensuite le script dans votre modeleur (j'ai fait un exemple simple avec seulement deux entrées):

    Modeleur

    Si je lance ce modèle en utilisant le script ci-dessus, il affiche simplement la valeur de sortie des métadonnées qui correspond au nom du raster:

    Résultat


  1. Selon la façon dont votre modèle est construit et éventuellement peaufiné le script, vous pouvez effectuer vos multiples calculs raster.
Joseph
la source