In der folgenden Frage konnte ich eine vollständige Lösung anbieten:
Wie berechnet man ein Interpolations-Raster aus der Python-Konsole in QGIS?
Ich werde die Antwort auch hier erneut veröffentlichen, da das Interesse offensichtlich sehr groß ist:
Antworten:
Die Dokumentation auf PyQGIS ist nicht sehr selbsterklärend, aber ich herausgefunden, wie richtig die damit verbundene Interpolation Klassen nennen ( QgsInterpolator
, QgsTINInterpolator
, QgsIDWInterpolator
, QgsGridFileWriter
) aus Python. Ich werde jeden Schritt des Skripts detailliert beschreiben:
Schritt 1:
Importieren Sie das Kern- und Analysemodul und rufen Sie die gewünschte Vektorebene für die Interpolation ab, indem Sie sie mit einem Mausklick auf der Registerkarte "Ebene" auswählen.
import qgis.core
import qgis.analysis
layer = qgis.utils.iface.activeLayer()
Schritt 2:
Bereiten Sie die Interpolationsklassen mit den erforderlichen Parametern vor. Die genauen Parameter für die Initialisierung der LayerData-Struktur finden Sie in den QGIS-API-Dokumenten (Suchbegriff: QgsInterpolator).
layer_data = QgsInterpolator.LayerData()
layer_data.vectorLayer = layer
layer_data.zCoordInterpolation=False
layer_data.InterpolationAttribute =0
layer_data.mInputType = 1
Bitte beachten Sie, dass ich die z-Koordinate nicht verwende, das erste verfügbare Feld (Index = 0) als Interpolationsattribut erhalte und POINTS als Eingabetyp verwende.
Schritt 3:
Wählen Sie Ihre Interpolationsmaschine. Hier können Sie zwischen der TIN-Interpolationsmethode ( QgsTINInterpolator
) und der IDW-Interpolation ( QgsIDWInterpolator
) wählen . Ich habe das QgsTINInterpolator
in meinen Code übernommen.
tin_interpolator = QgsTINInterpolator([layer_data])
Denken Sie daran, dass Sie eine Python-Liste von layer_data
an die Interpolations-Engine übergeben müssen! Auf diese Weise können Sie auch mehrere layer_data-Szenarien hinzufügen.
Schritt 4:
Stellen Sie die Parameter ein, die für den Export der Interpolationsausgabe benötigt werden (siehe Dokumentation von QgsGridFileWriter
). Diese enthalten ähnliche Informationen wie die Interpolations-GUI (Dateipfad, Umfang, Auflösung, Anzahl der Spalten und Zeilen).
export_path ="C:/SomeFolder/output.asc"
rect = layer.extent()
res = 10
ncol = int( ( rect.xMaximum() - rect.xMinimum() ) / res )
nrows = int( (rect.yMaximum() - rect.yMinimum() ) / res)
output = QgsGridFileWriter(tin_interpolator,export_path,rect,ncol, nrows,res,res)
output.writeFile(True)
iface.addRasterLayer(export_path, "interpolation_output")
Beachten Sie die Dateierweiterung Ihres Ausgabe-Rasters, da QgsGridFileWriter
nur ASCII-Gitter ( .asc
) geschrieben werden. Die Daten werden durch Aufrufen der writeFile()
Methode auf die Festplatte geschrieben . Nach dem Export können Sie die Rasterdatei als Raster zur Zeichenfläche hinzufügen.
Vollständiges Skript als Referenz:
import qgis.analysis
import qgis.core
layer = qgis.utils.iface.activeLayer()
layer_data = QgsInterpolator.LayerData()
layer_data.vectorLayer = layer
layer_data.zCoordInterpolation=False
layer_data.InterpolationAttribute =0
layer_data.mInputType = 1
tin_interpolator = QgsTINInterpolator([layer_data])
export_path = "E:/GIS_Workbench/script_output/test.asc"
rect = layer.extent()
res = 10
ncol = int( ( rect.xMaximum() - rect.xMinimum() ) / res )
nrows = int( (rect.yMaximum() - rect.yMinimum() ) / res)
output = QgsGridFileWriter(tin_interpolator,export_path,rect,ncol,nrows,res,res)
output.writeFile(True)
Beachten Sie, dass die QGIS-API derzeit auf Version 3.0 umgeschrieben wird und die verwendeten Interpolationsklassen von qgis.analysis
nach verschoben werden qgis.core
! Dies hat enorme Auswirkungen auf die Funktionalität dieses Skripts, sodass es für Version 3.0 neu geschrieben werden muss!
from rasterinterpolation import rasterinterpolation
aber nicht sicher, welches Modul ich aufrufen soll (oder wie ich es überhaupt aufrufen soll).