ST_MapAlgebraFctNgb — 1波段版本:使用自定义PostgreSQL函数的地图代数最近邻。返回值为PLPGSQL用户函数的结果的栅格,该用户函数涉及输入栅格波段中的值的邻域。
raster ST_MapAlgebraFctNgb(
raster rast, integer band, text pixeltype, integer ngbwidth, integer ngbheight, regprocedure onerastngbuserfunc, text nodatamode, text[] VARIADIC args)
;
![]() | |
ST_MapAlgebraFctNgb 从2.1.0开始不建议使用。使用 ST_MapAlgebra(回调函数版本) 取而代之的是。 |
(一个栅格版本)返回一个栅格,该栅格的值是PLPGSQL用户函数的结果,该用户函数涉及输入栅格标注栏中的值的邻域。User函数将像素值的邻域作为数字数组,对于每个像素,返回User函数的结果,将当前检查的像素的像素值替换为函数结果。
对其计算用户函数的栅格。
要评估的栅格的波段编号。默认为1。
输出栅格的结果像素类型。必须是中列出的 ST_BandPixelType 或被省略或设置为空。如果未传入或设置为空,则默认为 rast
。如果结果大于允许的像素值类型,则结果将被截断。
邻居的宽度,以单元格为单位。
社区的高度,单位为单元格。
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像素的像素进行平均后的新栅格
|