ST_MapAlgebraFctNgb — 單波段版本:使用使用者定義的 PostgreSQL 函數進行地圖代數最近鄰計算。返回一個光柵,其值是來自輸入光柵波段的鄰域值的 PLPGSQL 使用者函數的結果。
raster ST_MapAlgebraFctNgb(
raster rast, integer band, text pixeltype, integer ngbwidth, integer ngbheight, regprocedure onerastngbuserfunc, text nodatamode, text[] VARIADIC args)
;
![]() |
|
自 2.1.0 版本起,ST_MapAlgebraFctNgb 已被棄用。請改用 ST_MapAlgebra (回呼函數版本)。 |
(單一光柵版本) 返回一個光柵,其值是來自輸入光柵波段的鄰域值的 PLPGSQL 使用者函數的結果。使用者函數將像素值的鄰域作為數字陣列,對於每個像素,返回使用者函數的結果,將目前檢查像素的像素值替換為函數結果。
rast
在其上評估使用者函數的光柵。
band
要評估的光柵的波段編號。預設為 1。
pixeltype
輸出光柵的結果像素類型。必須是 ST_BandPixelType 中列出的其中一種,或省略或設定為 NULL。如果未傳入或設定為 NULL,則預設為 rast
的像素類型。如果結果大於像素類型所允許的值,則會被截斷。
ngbwidth
鄰域的寬度,以像元為單位。
ngbheight
鄰域的高度,以像元為單位。
onerastngbuserfunc
要應用於光柵單個波段的鄰域像素的 PLPGSQL/psql 使用者函數。第一個元素是一個表示矩形像素鄰域的二維數字陣列。
nodatamode
定義要傳遞給函數的鄰域像素值,該像素為 nodata 或 NULL。
'ignore':在計算中忽略鄰域中遇到的任何 NODATA 值 — 此標誌必須傳送給使用者回呼函數,並且使用者函數決定如何忽略它。
'NULL':在鄰域中遇到的任何 NODATA 值都會導致結果像素為 NULL — 在這種情況下,將跳過使用者回呼函數。
'value':在鄰域中遇到的任何 NODATA 值都將被參考像素(位於鄰域中心的像素)替換。請注意,如果此值為 NODATA,則行為與 'NULL' 相同(對於受影響的鄰域)。
args
要傳遞到使用者函數的參數。
可用性: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 像素範圍內對像素取平均值後的新光柵
|