名稱

ST_Neighborhood — 傳回一個 2 維雙精度陣列,其中包含指定波段像素周圍的非 NODATA 值。該像素可以透過 columnX 和 rowY 或一個幾何點來指定,該幾何點的空間參考坐標系統與柵格相同。

概要

double precision[][] ST_Neighborhood(raster rast, integer bandnum, integer columnX, integer rowY, integer distanceX, integer distanceY, boolean exclude_nodata_value=true);

double precision[][] ST_Neighborhood(raster rast, integer columnX, integer rowY, integer distanceX, integer distanceY, boolean exclude_nodata_value=true);

double precision[][] ST_Neighborhood(raster rast, integer bandnum, geometry pt, integer distanceX, integer distanceY, boolean exclude_nodata_value=true);

double precision[][] ST_Neighborhood(raster rast, geometry pt, integer distanceX, integer distanceY, boolean exclude_nodata_value=true);

描述

傳回一個 2 維雙精度陣列,其中包含指定波段像素周圍的非 NODATA 值。該像素可以透過 columnX 和 rowY 或一個幾何點來指定,該幾何點的空間參考坐標系統與柵格相同。distanceXdistanceY 參數定義了在 X 和 Y 軸上圍繞指定像素的像素數量。例如,我想要在感興趣像素周圍 X 軸上 3 個像素距離內和 Y 軸上 2 個像素距離內的所有值。該 2 維陣列的中心值將是 columnX 和 rowY 或幾何點所指定像素處的值。

波段編號從 1 開始,如果未指定 bandnum,則預設為 1。如果 exclude_nodata_value 設定為 false,則所有包含 nodata 像素的像素都被視為相交並傳回值。如果未傳入 exclude_nodata_value,則從柵格的元數據中讀取它。

[Note]

返回的 2 維陣列的每個軸上的元素數為 2 * (distanceX|distanceY) + 1。因此,如果 distanceXdistanceY 為 1,則返回的陣列將為 3x3。

[Note]

2 維陣列輸出可以傳遞給任何柵格處理內建函數,例如 ST_Min4ma、ST_Sum4ma、ST_Mean4ma。

可用性:2.1.0

範例

-- pixel 2x2 has value
SELECT
    ST_Neighborhood(rast, 2, 2, 1, 1)
FROM (
    SELECT
        ST_SetValues(
            ST_AddBand(
                ST_MakeEmptyRaster(5, 5, -2, 2, 1, -1, 0, 0, 0),
                '8BUI'::text, 1, 0
            ),
            1, 1, 1, ARRAY[
                [0, 1, 1, 1, 1],
                [1, 1, 1, 0, 1],
                [1, 0, 1, 1, 1],
                [1, 1, 1, 1, 0],
                [1, 1, 0, 1, 1]
            ]::double precision[],
            1
        ) AS rast
) AS foo

         st_neighborhood
---------------------------------
{{NULL,1,1},{1,1,1},{1,NULL,1}}
                
-- pixel 2x3 is NODATA
SELECT
    ST_Neighborhood(rast, 2, 3, 1, 1)
FROM (
    SELECT
        ST_SetValues(
            ST_AddBand(
                ST_MakeEmptyRaster(5, 5, -2, 2, 1, -1, 0, 0, 0),
                '8BUI'::text, 1, 0
            ),
            1, 1, 1, ARRAY[
                [0, 1, 1, 1, 1],
                [1, 1, 1, 0, 1],
                [1, 0, 1, 1, 1],
                [1, 1, 1, 1, 0],
                [1, 1, 0, 1, 1]
            ]::double precision[],
            1
        ) AS rast
) AS foo

       st_neighborhood
------------------------------
 {{1,1,1},{1,NULL,1},{1,1,1}}
                
-- pixel 3x3 has value
-- exclude_nodata_value = FALSE
SELECT
    ST_Neighborhood(rast, 3, 3, 1, 1, false)
FROM ST_SetValues(
            ST_AddBand(
                ST_MakeEmptyRaster(5, 5, -2, 2, 1, -1, 0, 0, 0),
                '8BUI'::text, 1, 0
            ),
            1, 1, 1, ARRAY[
                [0, 1, 1, 1, 1],
                [1, 1, 1, 0, 1],
                [1, 0, 1, 1, 1],
                [1, 1, 1, 1, 0],
                [1, 1, 0, 1, 1]
            ]::double precision[],
            1
        ) AS rast

      st_neighborhood
---------------------------
{{1,1,0},{0,1,1},{1,1,1}}