ST_Neighborhood — 返回一个二维双精度数组,其中包含指定波段像素周围的非NODATA值,该像素由列X和行Y或与栅格相同的空间参考坐标系中表示的几何点指定。
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);
返回一个二维双精度数组,其中包含指定波段像素周围的非NODATA值,该像素由列X和行Y或与栅格相同的空间参考坐标系中表示的几何点指定。distanceX 和 distanceY 参数定义了指定像素周围在 X 和 Y 轴上的像素数,例如,我想要我感兴趣的像素周围 X 轴上 3 个像素距离内以及 Y 轴上 2 个像素距离内的所有值。二维数组的中心值将是由列X和行Y或几何点指定的像素处的值。
波段编号从 1 开始,如果未指定 bandnum,则假定为 1。如果 exclude_nodata_value 设置为 false,则所有像素(包括 nodata 像素)都将被认为相交并返回值。如果未传入 exclude_nodata_value,则从栅格的元数据中读取。
|
|
|
返回的二维数组的每个轴上的元素数为 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}}