Rasterrechner
- grid.calc
- grids – Grid
- expression – Grid-Calc-Expression
- type – String
- output – Grid
Führt Berechnung über ein oder mehrere Raster entsprechend der
Berechnungsvorschrift in expression aus.
Dazu müssen die Dimensionen der Eingangsraster übereinstimmen.
Eingangsdaten werden wiederholt, wenn unterschiedlich viele Raster an den Eingängen anliegen.
Wenn der Parameter type nicht gesetzt ist,
wird der Datentyp des Rasters am ersten Eingang übernommen.
Die Berechnungsvorschrift wird als S-expression formuliert, dabei können mathematische Funktionen
und logische Operatoren verwendet werden.
Weiterführende Informationen und Beispiele finden sich im Benutzerhandbuch.
Mit (+ (read 0) (read 1 1)) wird beispielsweise
das Raster am ersten Eingang mit dem ersten Kanal des zweiten Rasters addiert.
Erweiterte Beschreibung des Rasterrechners Ankerpunkt
Der Rasterrechner Rasterrechner ermöglicht es, Berechnungen auf ein oder mehrere Raster anhand einer Berechnungsvorschrift durchzuführen. Im Folgenden werden die Grundfunktionen sowie die Syntax des Rasterrechners erläutert und einige Anwendungsbeispiele aufgezeigt.
Die Auflösung der Eingangsraster muss für die Berechnung übereinstimmen. Die Metadaten vom ersten Eingangsraster werden übernommen. Eingangsdaten werden wiederholt, wenn unterschiedlich viele Raster an den Eingängen anliegen.
Mit dem optionalen Parameter type kann der Datentyp des Ergebnisrasters festgelegt werden. Wenn type nicht angeben ist, wird der Datentyp des Rasters am ersten Eingang übernommen. Mögliche Werte für type sind: ubyte, uint8, uint16, int16, uint32, int32, float32, float64.
Syntax Ankerpunkt
Die mit dem Parameter expression angegebene Berechnungsvorschrift wird als S-expression formuliert. Dabei können mathematische Funktionen und logische Operatoren verwendet werden:
expression = "(" (operator | function) *argument")"
argument = expression | number
Mit der Funktion read können Raster oder einzelne Bänder eingelesen werden. Die Eingänge sind beginnend mit 0 fortlaufend nummeriert, das Band kann optional angegeben werden und startet bei Index 1. Neben grundlegenden mathematischen (*,+, -,/) und logischen (&, |,<, <=, ==, !=, >=, >) Operatoren stehen viele Funktionen aus dem Python-Package numpy zur Verfügung. Mit der Funktion asarray können Bänder zu einem Raster zusammengefasst werden.
Anwendungsbeispiele Ankerpunkt
Im Folgenden werden einige Anwendungsbeispiele für den Rasterrechner beschrieben.
Gelände überhöhen
Durch Multiplikation können beispielsweise Höhenunterschiede hervorgehoben werden:
(* (read 0) 1.5)
Einheiten umrechnen
Mit einer Division lassen sich Werte der Maßeinheit m in die Maßeinheit Fuß umrechnen.
(/ (read 0) 0.3048)
Zusammengesetzte Ausgabe
Mit der Funktion asarray können Bänder in einem Raster neu arrangiert werden. Zum Beispiel lassen sich Bänder eines Rasters vertauschen:
(asarray (read 0 2) (read 0 1))
Das Ergebnisraster kann ebenso aus Bändern unterschiedlicher Eingangsraster zusammengestellt werden:
(asarray (read 0 1) (read 0 2) (read 0 3) (read 1 4))
nDOM Berechnung
Das normalisierte digitale Oberflächenmodell (nDOM) beschreibt die relative Höhe von Objekten und ergibt sich aus der Differenz aus dem digitalen Geländemodell (DGM) und dem digitalen Oberflächenmodell (DOM).
Die Berechnungsvorschrift für den Rasterrechner sieht wie folgt aus:
(- (read 0) (read 1))
Filtern und Maskieren
Sollen beispielsweise Objekte mit einer Höhe von mindestens 12 m übernommen und niedrigere Objekte herausgefiltert werden, lässt sich das mit diesem Ausdruck realisieren:
(* (>= (read 0) 5) (read 0))
Mit where kann man zusätzlich den Wert angeben, der verwendet werden soll, wenn die Bedingung nicht zutrifft. So lässt sich zum Beispiel eine Maske (das dritte Argument ist der Leerwert) erzeugen:
(where (>= (read 0) 12) 1 -9999)
Die obere Abbildung zeigt ein normalisiertes digitales Oberflächenmodell, auf das die vorhergehende Berechnungsvorschrift angewendet wird.
Wie auf der unteren Abbildung zu sehen, wird der Wert 1 durch die Anwendung der Berechnungsvorschrift für alle Felder gesetzt, auf die die Bedingung zutrifft, andernfalls der Leerwert.
Durchschnitt
Der Durchschnittswert einzelner Zellen über mehrere Bänder lässt sich mittels Addition und Division berechnen:
(/ (+ (read 0 1) (read 0 2) (read 0 3)) 3)
Zu beachten ist, dass im Gegensatz dazu die Funktion mean aus numpy den Mittelwert über alle Felder eines Rasters berechnet.
Minimum und Maximum
Um jeweils den kleinsten Wert aus zwei Rastern auszuwählen, bietet sich die Verwendung der Funktion minimum an:
(minimum (read 0) (read 1))
Analog dazu kann mit maximum das Maximum ermittelt werden. Die Funktionen min und max geben das globale Minimum bzw. Maximum für ein Raster zurück.