GISarabia.org
PostGIS › الدليل الرسمي › 11. مرجع الرستر › 11.12. معالجة الرستر: جبر الخرائط (Map Algebra)
PostGIS 3.6 · Official Manual · ترجمة عربية

ST_MapAlgebraFctNgb

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

الاسم

ST_MapAlgebraFctNgb — نسخة النطاق الواحد: جبر الخرائط بالجار الأقرب باستخدام دالة PostgreSQL يعرّفها المستخدم. تُعيد رسترًا تكون قيمه ناتج دالة مستخدم بلغة PLPGSQL تتضمن جوارًا من القيم من نطاق الرستر المُدخل.

المختصر

raster ST_MapAlgebraFctNgb(raster rast, integer band, text pixeltype, integer ngbwidth, integer ngbheight, regprocedure onerastngbuserfunc, text nodatamode, text[] VARIADIC args);

الوصف

[تنبيه]

ST_MapAlgebraFctNgb مُهملة (deprecated) منذ 2.1.0. استخدم ST_MapAlgebra (callback function version) بدلًا منها.

(نسخة الرستر الواحد) تُعيد رسترًا تكون قيمه ناتج دالة مستخدم بلغة 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 المحمَّل كبلاطة واحدة كما هو موصوف في https://gdal.org/user/drivers/raster/postgisraster.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 بكسلات من بعضها