الاسم
ST_Neighborhood — تُعيد مصفوفة ثنائية الأبعاد من نوع double precision تضم القيم غير 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);
الوصف
تُعيد مصفوفة ثنائية الأبعاد من نوع double precision تضم القيم غير NODATA المحيطة ببكسل نطاق معيّن محدد إما بـ columnX وrowY أو بنقطة هندسية مُعبَّر عنها في نظام الإحداثيات المرجعي المكاني نفسه للرستر. يحدد المعاملان distanceX وdistanceY عدد البكسلات المحيطة بالبكسل المحدد على المحورين X وY، مثلًا: أريد جميع القيم ضمن مسافة 3 بكسلات على المحور X ومسافة 2 بكسل على المحور Y حول البكسل الذي يهمني. ستكون القيمة المركزية في المصفوفة ثنائية الأبعاد هي القيمة عند البكسل المحدد بـ columnX وrowY أو بالنقطة الهندسية.
يبدأ ترقيم النطاقات من 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}}
انظر أيضًا
ST_NearestValue، ST_Min4ma، ST_Max4ma، ST_Sum4ma، ST_Mean4ma، ST_Range4ma، ST_Distinct4ma، ST_StdDev4ma