الاسم
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 بكسلات من بعضها
|

