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.