Die neueste Version meines QGIS-Plugins SciPy-Filter enthält RasterWizard
, eine Hilfsklasse für Python-Benutzer, um schnell die Daten eines Raster-Layers als NumPy-Array und das Verarbeitungsergebnis zurück in QGIS als neuen Raster-Layer zu erhalten. Dies ermöglicht die Verarbeitung mit NumPy, SciPy, scikit-image, scikit-learn oder anderen Python-Bibliotheken – und die sofortige Visualisierung der Ergebnisse in QGIS. Dies ist ideal für die Entwicklung von Prototypen und das Experimentieren mit Algorithmen.
Einfach in QGIS die Python-Konsole öffnen und etwas ausführen wie:
from scipy_filters.helpers import RasterWizard from scipy import ndimage wizard = RasterWizard() # Verwendet das aktive Layer, wenn kein Layer gegeben a = wizard.toarray() # Gibt NumPy-Array mit allen Bändern zurück # Irgendeine Berechnung, z.B. Sobel-Filter mit Scipy # In diesem Beispiel ist das Ergebnis ein NumPy-Array mit dtype float32 b = ndimage.sobel(a, output="float32") # Ergebnis als geotiff speichern und in QGIS laden wizard.tolayer(b, name="Sobel", filename="/path/to/sobel.tif")
Das NumPy-Array hat die Dimensionen [Bänder], x, y
. Man kann also ein Band mit z.B. a[0]
auswählen. Mit der Option bands_last=True
bekommt man stattdessen x, y, [Bänder]
, wie es scikit-image erwartet.
Das resultierende NumPy-Array kann als neuer Rasterlayer zurück in QGIS geladen werden, solange die Anzahl der Pixel die gleiche ist wie die des Eingangslayers und die Geotransformation nicht verändert wird (keine Reprojektion, kein Subsetting in NumPy). Die Anzahl der Bänder und der Datentyp können unterschiedlich sein.
Weitere Infos über das Raster:
# Pixelwerte an Index [x, y] wizard[0,10] # Informationen wie shape, CRS, usw. wizard.shape # wie numpy_array.shape wizard.crs_wkt # CRS als WKT string wizard.crs # CRS als QgsCoordinateReferenceSystem
Das Plugin kann in QGIS mit „Erweiterungen verwalten und installieren“ installiert werden. Für weitere Informationen siehe die API-Dokumentation für RasterWizard.