Rasterrechner

Bemerkung

Der Rasterrechner steht ab PlexMap 6 zur Verfügung.

Der Rasterrechner (grid.calc) ermöglicht es, Berechnungen auf ein oder mehreren Rastern anhand einer Berechnungsvorschrift durchzuführen. Im Folgenden werden die Grundfunktionen und der Syntax erläutert und anschließend Beispiele für die Anwendungen gegeben.

../_images/grid_calc_switchboard.png

Die Switchboard-Funktion des Rasterrechners

Die Dimensionen der Eingangsraster müssen 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

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 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.

Beispiele

Gelände überhöhen

Durch Multiplikation können beispielsweise Höhenunterschiede hervorgehoben werden:

(* (read 0) 1.5)

Einheitenkonvertierung

Mit einer Division lassen sich Werte in Meter in Angaben in 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 Höhen von mindestens 12 m übernommen werden und niedrigere Objekte gefiltert 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)
../_images/ndom_example.png

Die Abbildung zeigt ein normalisiertes digitales Oberflächenmodell, auf das die vorhergehende Berechnungsvorschrift angewendet wird.

../_images/filter_example.png

Durch die Anwendung der Berechnungsvorschrift wird der Wert 1 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.