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

## Name

ST_MapAlgebraFctNgb — 1-band version: Map Algebra Nearest Neighbor using user-defined PostgreSQL function. Return a raster which values are the result of a PLPGSQL user function involving a neighborhood of values from the input raster band.

## Synopsis

`raster ST_MapAlgebraFctNgb(`raster rast, integer band, text pixeltype, integer ngbwidth, integer ngbheight, regprocedure onerastngbuserfunc, text nodatamode, text[] VARIADIC args`)`;

## Description

ST_MapAlgebraFctNgb is deprecated as of 2.1.0. Use ST_MapAlgebra (callback function version) instead.

(one raster version) Return a raster which values are the result of a PLPGSQL user function involving a neighborhood of values from the input raster band. The user function takes the neighborhood of pixel values as an array of numbers, for each pixel, returns the result from the user function, replacing pixel value of currently inspected pixel with the function result.

rast

  Raster on which the user function is evaluated.

band

  Band number of the raster to be evaluated. Default to 1.

pixeltype

  The resulting pixel type of the output raster. Must be one listed in ST_BandPixelType or left out or set to NULL. If not passed in or set to NULL, will default to the pixeltype of the `rast`. Results are truncated if they are larger than what is allowed for the pixeltype.

ngbwidth

  The width of the neighborhood, in cells.

ngbheight

  The height of the neighborhood, in cells.

onerastngbuserfunc

  PLPGSQL/psql user function to apply to neighborhood pixels of a single band of a raster. The first element is a 2-dimensional array of numbers representing the rectangular pixel neighborhood

nodatamode

  Defines what value to pass to the function for a neighborhood pixel that is nodata or NULL

  'ignore': any NODATA values encountered in the neighborhood are ignored by the computation -- this flag must be sent to the user callback function, and the user function decides how to ignore it.

  'NULL': any NODATA values encountered in the neighborhood will cause the resulting pixel to be NULL -- the user callback function is skipped in this case.

  'value': any NODATA values encountered in the neighborhood are replaced by the reference pixel (the one in the center of the neighborhood). Note that if this value is NODATA, the behavior is the same as 'NULL' (for the affected neighborhood)

args

  Arguments to pass into the user function.

Availability: 2.0.0

## Examples

Examples utilize the katrina raster loaded as a single tile described in http://trac.osgeo.org/gdal/wiki/frmts_wtkraster.html and then prepared in the ST_Rescale examples

    --
    -- A simple 'callback' user function that averages up all the values in a neighborhood.
    --
    CREATE OR REPLACE FUNCTION rast_avg(matrix float[][], nodatamode text, variadic args text[])
        RETURNS float AS
        $$
        DECLARE
            _matrix float[][];
            x1 integer;
            x2 integer;
            y1 integer;
            y2 integer;
            sum float;
        BEGIN
            _matrix := matrix;
            sum := 0;
            FOR x in array_lower(matrix, 1)..array_upper(matrix, 1) LOOP
                FOR y in array_lower(matrix, 2)..array_upper(matrix, 2) LOOP
                    sum := sum + _matrix[x][y];
                END LOOP;
            END LOOP;
            RETURN (sum*1.0/(array_upper(matrix,1)*array_upper(matrix,2) ))::integer ;
        END;
        $$
    LANGUAGE 'plpgsql' IMMUTABLE COST 1000;

    -- now we apply to our raster averaging pixels within 2 pixels of each other in X and Y direction --
    SELECT ST_MapAlgebraFctNgb(rast, 1,  '8BUI', 4,4,
            'rast_avg(float[][], text, text[])'::regprocedure, 'NULL', NULL) As nn_with_border
        FROM katrinas_rescaled
        limit 1;

First band of our raster | new raster after averaging pixels withing 4x4 pixels of each other

## See Also

ST_MapAlgebraFct, ST_MapAlgebraExpr, ST_Rescale

Prev | Up | Next
ST_MapAlgebraFct | Home | ST_Reclass