Durchführen von QGIS Modeler-Mehrfachrasterberechnungen mit Daten aus externer CSV?

20

Ich muss mehrere Berechnungen für eine Reihe von Rastern basierend auf Werten in einer CSV-Metadatendatei durchführen.

Ich bin mit den grafischen Modellierer QGIS und kann ein bestimmtes Feld in einer CSV mit dem Anruf Tableund Table FieldEingängen.

Wie rufe ich die bestimmte Zeile auf, da ich mehrere Raster habe und jedes Raster einen entsprechenden Wert in der CSV hat? (ähnlich zum Beispiel einer Suche).

Ich möchte kein Skript hinzufügen, wenn dies nicht für eine einfache Verwendung erforderlich ist.

HDunn
quelle
1
Es wäre wahrscheinlich einfacher, dies durch Konvertieren der Raster in Punktdateien zu erreichen. Von dort aus wäre es einfacher, die erforderlichen Verknüpfungen zwischen den beiden Dateien herzustellen. webhelp.esri.com/arcgisdesktop/9.3/…
Jamie2483
3
Machen Sie eine Liste (Pseudocode) Ihrer Aufgabe. Hier erfahren Sie, ob Sie für Ihre Arbeit auf ein Skript zurückgreifen müssen. Iterationen oder bedingte Prozeduren sind Indikatoren dafür, dass Sie auf Skripte zurückgreifen müssen. Mit Struktur-Skripten fertig sind deine Freunde.
Ragnvald

Antworten:

2

Wirklich alter Beitrag, aber ich denke, eine mögliche Lösung ist, leider für Ihren Fall ein Skript in Ihrem Modellierer zu verwenden, das:

  • Ruft die Namen aller geladenen Raster-Layer ab.
  • Durchlaufen Sie die Metadaten, die eine Spalte mit Rasternamen enthalten.
  • Stimmt die geladenen Rasternamen mit denen in den Metadaten überein.
  • Wenn Übereinstimmungen gefunden werden, wird der entsprechende Wert des Rasters extrahiert.

  1. Sie können ein Skript erstellen aus:

    Processing Toolbox > Scripts > Tools > Create new script
    

    Dann benutze etwas wie das Folgende:

    ##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. Fügen Sie dann das Skript in Ihren Modellierer ein (ich habe ein einfaches Beispiel mit nur zwei Eingaben erstellt):

    Modeler

    Wenn ich dieses Modell mit dem obigen Skript ausführe, druckt es einfach den Ausgabewert aus den Metadaten, die dem Namen des Rasters entsprechen:

    Ergebnis


  1. Je nachdem, wie Ihr Modell aufgebaut ist und möglicherweise das Skript optimiert wird, können Sie mehrere Raster-Berechnungen durchführen.
Joseph
quelle