ST_MapAlgebraExpr
Prev | 12.12. Raster Processing: Map Algebra | Next

## Name

ST_MapAlgebraExpr — 1 raster band version: Creates a new one band raster formed by applying a valid PostgreSQL algebraic operation on the input raster band and of pixeltype provided. Band 1 is assumed if no band is specified.

## Synopsis

`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`)`;

## Description

ST_MapAlgebraExpr is deprecated as of 2.1.0. Use ST_MapAlgebra (expression version) instead.

Creates a new one band raster formed by applying a valid PostgreSQL algebraic operation defined by the `expression` on the input raster (`rast`). If no `band` is specified band 1 is assumed. The new raster will have the same georeference, width, and height as the original raster but will only have one band.

If `pixeltype` is passed in, then the new raster will have a band of that pixeltype. If pixeltype is passed NULL, then the new raster band will have the same pixeltype as the input `rast` band.

In the expression you can use the term `[rast]` to refer to the pixel value of the original band, `[rast.x]` to refer to the 1-based pixel column index, `[rast.y]` to refer to the 1-based pixel row index.

Availability: 2.0.0

## Examples

Create a new 1 band raster from our original that is a function of modulo 2 of the original raster band.

    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

Create a new 1 band raster of pixel-type 2BUI from our original that is reclassified and set the nodata value to be 0.

    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 (column rast_view) | rast_view_ma

Create a new 3 band raster same pixel type from our original 3 band raster with first band altered by map algebra and remaining 2 bands unaltered.

    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;

## See Also

ST_MapAlgebraExpr, ST_MapAlgebraFct, ST_BandPixelType, ST_GeoReference, ST_Value

Prev | Up | Next
ST_MapAlgebra (expression version) | Home | ST_MapAlgebraExpr