GISarabia.org
PostGIS › الدليل الرسمي › 11. مرجع الرستر › 11.6. دوال الوصول إلى بكسلات الرستر وضبطها
PostGIS 3.6 · Official Manual · ترجمة عربية

ST_Neighborhood

الصفحة الأصلية بالإنجليزية postgis.net ↗

الاسم

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 * (distanceX|distanceY) + 1. لذا عندما تكون قيمة distanceX وdistanceY تساوي 1، ستكون المصفوفة المُعادة 3x3.

[ملاحظة]

يمكن تمرير المصفوفة ثنائية الأبعاد الناتجة إلى أيٍّ من دوال معالجة الرستر المدمجة، مثل 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}}