Name

ST_MapAlgebra (expression version) — Version mit Ausdrücken - Gibt für einen oder zwei Ausgangsraster, Bandindizes und einer oder mehreren vom Anwender vorgegebenen SQL-Ausdrücken, einen Raster mit einem Band zurück.

Synopsis

raster ST_MapAlgebra(raster rast, integer nband, text pixeltype, text expression, double precision nodataval=NULL);

raster ST_MapAlgebra(raster rast, text pixeltype, text expression, double precision nodataval=NULL);

raster ST_MapAlgebra(raster rast1, integer nband1, raster rast2, integer nband2, text expression, text pixeltype=NULL, text extenttype=INTERSECTION, text nodata1expr=NULL, text nodata2expr=NULL, double precision nodatanodataval=NULL);

raster ST_MapAlgebra(raster rast1, raster rast2, text expression, text pixeltype=NULL, text extenttype=INTERSECTION, text nodata1expr=NULL, text nodata2expr=NULL, double precision nodatanodataval=NULL);

Beschreibung

Version mit Ausdrücken - Gibt für einen oder zwei Ausgangsraster, Bandindizes und einer oder mehreren vom Anwender vorgegebenen SQL-Ausdrücken, einen Raster mit einem Band zurück.

Verfügbarkeit: 2.1.0

Beschreibung: Variante 1 und 2 (ein Raster)

Erstellt ein neues Rasterband indem eine gültige algebraische PostgreSQL Operation (expression) auf den Ausgangsraster (rast) angewendet wird. Wenn nband nicht angegeben ist, wird Band 1 angenommen. Der Zielraster hat die selbe Georeferenzierung, Breite und Höhe wie der ursprüngliche Raster, hat aber nur ein Band.

Wenn pixeltype angegeben ist, dann hat das Band des neuen Rasters diesen Pixeltyp. Wenn für den Pixeltyp NULL übergeben wird, dann hat das neue Rasterband denselben Pixeltyp wie das gegebene Band von rast

  • Erlaubte Schlüsselwörter für expression

    1. [rast] - Zellwert der Pixel von Interesse

    2. [rast.val] - Zellwert der Pixel von Interesse

    3. [rast.x] - Rasterspalte (von 1 wegzählend) der Pixel von Interesse

    4. [rast.y] - Rasterszeile (von 1 wegzählend) der Pixel von Interesse

Beschreibung: Variante 3 und 4 (zwei Raster)

Erstellt einen neuen Raster mit einem Band, indem eine gültige algebraische PostgreSQL Operation auf die beiden, durch den Ausdruck expression bestimmten Ausgangsrasterbänder rast1 und rast2) angewendet wird. Wenn band1 oder band2 nicht angegeben ist, wird Band 1 angenommen. Der Zielraster wird an dem Gitter des ersten Raster ausgerichtet (Größe, Versatz und Eckpunkte der Pixel). Die Ausdehnung des Zielrasters wird durch den Parameter extenttype bestimmt.

expression

Ein algebraischer PostgreSQL Ausdruck, der zwei Raster und in PostgreSQL definierte Funktionen/Operatoren einbezieht, die den Pixelwert für sich schneidende Pixel festlegt. z.B. (([rast1] + [rast2])/2.0)::integer

pixeltype

Der resultierende Pixeltyp des Zielraster muss entweder aus ST_BandPixelType sein, weggelassen oder auf NULL gesetzt werden. Wenn er nicht übergeben wird oder auf NULL gesetzt ist, wird er standardmäßig auf den Pixeltyp des ersten Raster gesetzt.

extenttype

Bestimmt die Ausdehnung des resultierenden Raster

  1. INTERSECTION - Die Ausdehnung des neuen Raster entspricht der Schnittmenge der beiden Raster. Die Standardeinstellung.

  2. UNION - Die Ausdehnung des neuen Raster entspricht der Vereinigungsmenge der beiden Raster.

  3. FIRST - Die Ausdehnung des neuen Raster entspricht jener des ersten Raster.

  4. SECOND - Die Ausdehnung des neuen Raster entspricht jender des zweiten Raster.

nodata1expr

Ein algebraischer Ausdruck der nur rast2 oder eine Konstante einbezieht. Dieser bestimmt was zurückgegeben wird, wenn die Pixel von rast1 NODATA Werte sind und die räumlich übereinstimmenden Pixel von rast2 Werte aufweisen.

nodata2expr

Ein algebraischer Ausdruck der nur rast1 oder eine Konstante einbezieht. Dieser bestimmt was zurückgegeben wird, wenn die Pixel von rast2 NODATA Werte haben und die räumlich übereinstimmenden Pixel von rast1 Werte aufweisen.

nodatanodataval

Eine numerische Konstante die ausgegeben wird, wenn die übereinstimmenden Pixel der beiden Raster "rast1" und "rast2" nur NODATA Werte enthalten.

  • Zugelassene Schlüsselwörter in expression, nodata1expr und nodata2expr

    1. [rast1] - Zellwert der Pixel von Interesse von rast1

    2. [rast1.val] - Zellwert der Pixel von Interesse von rast1

    3. [rast1.x] - Rasterspalte (von 1 wegzählend) der Pixel von Interesse von rast1

    4. [rast1.y] - Rasterzeile (von 1 wegzählend) der Pixel von Interesse von rast1

    5. [rast2] - Zellwert der Pixel von Interesse von rast2

    6. [rast2.val] - Zellwert der Pixel von Interesse von rast2

    7. [rast2.x] - Rasterspalte (von 1 wegzählend) der Pixel von Interesse von rast2

    8. [rast2.y] - Rasterzeile (von 1 wegzählend) der Pixel von Interesse von rast2

Beispiele: Varianten 1 und 2

WITH foo AS (
    SELECT ST_AddBand(ST_MakeEmptyRaster(10, 10, 0, 0, 1, 1, 0, 0, 0), '32BF'::text, 1, -1) AS rast
)
SELECT
    ST_MapAlgebra(rast, 1, NULL, 'ceil([rast]*[rast.x]/[rast.y]+[rast.val])')
FROM foo;
                    

Beispiele: Varianten 3 und 4

WITH foo AS (
    SELECT 1 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0), 2, '8BUI', 10, 0), 3, '32BUI'::text, 100, 0) AS rast UNION ALL
    SELECT 2 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 1, 1, -1, 0, 0, 0), 1, '16BUI', 2, 0), 2, '8BUI', 20, 0), 3, '32BUI'::text, 300, 0) AS rast
)
SELECT
    ST_MapAlgebra(
        t1.rast, 2,
        t2.rast, 1,
        '([rast2] + [rast1.val]) / 2'
    ) AS rast
FROM foo t1
CROSS JOIN foo t2
WHERE t1.rid = 1
    AND t2.rid = 2;