ST_MapAlgebraExpr — Version mit 1 Rasterband: Erzeugt ein neues Rasterband, dass über eine gültige, algebraische PostgreSQL Operation für ein Rasterband mit gegebenen Pixeltyp erstellt wird. Wenn kein Band bestimmt ist, wird Band 1 angenommen.
raster ST_MapAlgebraExpr(raster rast, integer band, text pixeltype, text expression, double precision nodataval=NULL);
raster ST_MapAlgebraExpr(raster rast, text pixeltype, text expression, double precision nodataval=NULL);
|
|
|
ST_MapAlgebraExpr Seit der Version 2.1.0 überholt. Benutzen Sie stattdessen bitte ST_MapAlgebra (expression version) . |
Erstellt ein neues Rasterband indem eine gültige algebraische PostgreSQL Operation (expression) auf den Ausgangsraster (rast) angewendet wird. Wenn kein band festgelegt 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
Im Ausdruck können Sie folgende Terme verwenden: [rast] für den Zellwert des ursprünglichen Bandes, [rast.x] für den von 1 wegzählenden Index der Rasterspalten, [rast.y] für den von 1 wegzählenden Index der Rasterzeilen.
Verfügbarkeit: 2.0.0
Erzeugt einen Einzelbandraster, der sich durch die Anwendung der Funktion "modulo 2" auf das ursprüngliche Rasterband ergibt.
ALTER TABLE dummy_rast ADD COLUMN map_rast raster;
UPDATE dummy_rast SET map_rast = ST_MapAlgebraExpr(rast,NULL,'mod([rast]::numeric,2)') WHERE rid = 2;
SELECT
ST_Value(rast,1,i,j) As origval,
ST_Value(map_rast, 1, i, j) As mapval
FROM dummy_rast
CROSS JOIN generate_series(1, 3) AS i
CROSS JOIN generate_series(1,3) AS j
WHERE rid = 2;
origval | mapval
---------+--------
253 | 1
254 | 0
253 | 1
253 | 1
254 | 0
254 | 0
250 | 0
254 | 0
254 | 0
Erzeugt einen neuen Einzelbandraster mit dem Pixeltyp 2BUI. Der ursprüngliche Raster wird dabei neu klassifiziert und mit einem NODATA Wert von 0 versehen.
ALTER TABLE dummy_rast ADD COLUMN map_rast2 raster;
UPDATE dummy_rast SET
map_rast2 = ST_MapAlgebraExpr(rast,'2BUI'::text,'CASE WHEN [rast] BETWEEN 100 and 250 THEN 1 WHEN [rast] = 252 THEN 2 WHEN [rast] BETWEEN 253 and 254 THEN 3 ELSE 0 END'::text, '0')
WHERE rid = 2;
SELECT DISTINCT
ST_Value(rast,1,i,j) As origval,
ST_Value(map_rast2, 1, i, j) As mapval
FROM dummy_rast
CROSS JOIN generate_series(1, 5) AS i
CROSS JOIN generate_series(1,5) AS j
WHERE rid = 2;
origval | mapval
---------+--------
249 | 1
250 | 1
251 |
252 | 2
253 | 3
254 | 3
SELECT
ST_BandPixelType(map_rast2) As b1pixtyp
FROM dummy_rast
WHERE rid = 2;
b1pixtyp
----------
2BUI
|
![]() Original (Spalte "rast_view")
|
![]() rast_view_ma
|
Erzeugt einen neuen Raster mit 3 Bändern und demselben Pixeltyp als unser ursprünglicher Raster mit 3 Bändern. Das erste Band wird über einen Map Algebra Ausdruck geändert, die verbleibenden 2 Bänder sind unverändert.
SELECT
ST_AddBand(
ST_AddBand(
ST_AddBand(
ST_MakeEmptyRaster(rast_view),
ST_MapAlgebraExpr(rast_view,1,NULL,'tan([rast])*[rast]')
),
ST_Band(rast_view,2)
),
ST_Band(rast_view, 3)
) As rast_view_ma
FROM wind
WHERE rid=167;
ST_MapAlgebraExpr, ST_MapAlgebraFct, ST_BandPixelType, ST_GeoReference, ST_Value