Name

ST_MapAlgebraFctNgb — 1波段版本:使用自定义PostgreSQL函数的地图代数最近邻。返回值为PLPGSQL用户函数的结果的栅格,该用户函数涉及输入栅格波段中的值的邻域。

Synopsis

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

描述

[Warning]

ST_MapAlgebraFctNgb 从2.1.0开始不建议使用。使用 ST_MapAlgebra(回调函数版本) 取而代之的是。

(一个栅格版本)返回一个栅格,该栅格的值是PLPGSQL用户函数的结果,该用户函数涉及输入栅格标注栏中的值的邻域。User函数将像素值的邻域作为数字数组,对于每个像素,返回User函数的结果,将当前检查的像素的像素值替换为函数结果。

RAST

对其计算用户函数的栅格。

频带

要评估的栅格的波段编号。默认为1。

像素类型

输出栅格的结果像素类型。必须是中列出的 ST_BandPixelType 或被省略或设置为空。如果未传入或设置为空,则默认为 rast 。如果结果大于允许的像素值类型,则结果将被截断。

NGBWIDH

邻居的宽度,以单元格为单位。

NGBHeight

社区的高度,单位为单元格。

一种转储功能

PLPGSQL/psql用户函数,用于应用于栅格的单个波段的邻近像素。第一个元素是表示矩形像素邻域的二维数组

结点模式

定义为nodata或空的邻域像素要传递给函数的值

‘Ignore’:在邻域中遇到的任何NODATA值都会被计算忽略--此标志必须发送给User回调函数,User函数决定如何忽略它。

‘NULL’:邻域中遇到的任何NODATA值都将导致结果像素为空--在这种情况下将跳过用户回调函数。

‘Value’:在邻域中遇到的任何NODATA值都将被参考像素(位于邻域中心的像素)替换。请注意,如果此值为NODATA,则行为与‘NULL’相同(对于受影响的邻域)

参数

要传递给User函数的参数。

可用性:2.0.0

示例

示例将Katrina栅格作为单个切片加载,如中所述 http://trac.osgeo.org/gdal/wiki/frmts_wtkraster.html 然后在 ST_Rescale 示例

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

我们栅格的第一个波段

对彼此4x4像素的像素进行平均后的新栅格

另请参阅

ST_MapAlgebraFct, ST_MapAlgebraExpr, ST_Rescale