الاسم
ST_MapAlgebraExpr — نسخة نطاق رستر واحد: تُنشئ رسترًا جديدًا بنطاق واحد يتكون بتطبيق عملية جبرية صالحة في PostgreSQL على نطاق الرستر المُدخل وبنوع البكسل المقدَّم. يُفترض النطاق 1 إذا لم يُحدَّد نطاق.
المختصر
raster ST_MapAlgebraExpr(raster rast, integer band, text pixeltype, text expression, double precision nodataval=NULL);
raster ST_MapAlgebraExpr(raster rast, text pixeltype, text expression, double precision nodataval=NULL);
الوصف
|
|
|
ST_MapAlgebraExpr مُهملة (deprecated) منذ 2.1.0. استخدم ST_MapAlgebra (expression version) بدلًا منها. |
تُنشئ رسترًا جديدًا بنطاق واحد يتكون بتطبيق عملية جبرية صالحة في PostgreSQL يعرّفها expression على الرستر المُدخل (rast). إذا لم يُحدَّد band فيُفترض النطاق 1. سيكون للرستر الجديد الإسناد الجغرافي والعرض والارتفاع نفسها للرستر الأصلي، لكن سيكون له نطاق واحد فقط.
إذا مُرِّر pixeltype، فسيكون للرستر الجديد نطاق من ذلك النوع. وإذا مُرِّر pixeltype بقيمة NULL، فسيكون لنطاق الرستر الجديد نوع البكسل نفسه لنطاق rast المُدخل.
في التعبير يمكنك استخدام المصطلح [rast] للإشارة إلى قيمة البكسل في النطاق الأصلي، و[rast.x] للإشارة إلى فهرس عمود البكسل (يبدأ من 1)، و[rast.y] للإشارة إلى فهرس صف البكسل (يبدأ من 1).
متاحة منذ: 2.0.0
أمثلة
إنشاء رستر جديد بنطاق واحد من الرستر الأصلي يكون دالة لباقي القسمة على 2 لنطاق الرستر الأصلي.
ALTER TABLE dummy_rast ADD COLUMN map_rast raster;
UPDATE dummy_rast SET map_rast = ST_MapAlgebraExpr(rast,NULL,'mod([rast]::numeric,2)') WHERE rid = 2;
SELECT
ST_Value(rast,1,i,j) As origval,
ST_Value(map_rast, 1, i, j) As mapval
FROM dummy_rast
CROSS JOIN generate_series(1, 3) AS i
CROSS JOIN generate_series(1,3) AS j
WHERE rid = 2;
origval | mapval
---------+--------
253 | 1
254 | 0
253 | 1
253 | 1
254 | 0
254 | 0
250 | 0
254 | 0
254 | 0
إنشاء رستر جديد بنطاق واحد من نوع البكسل 2BUI من الرستر الأصلي بعد إعادة تصنيفه، وضبط قيمة nodata على 0.
ALTER TABLE dummy_rast ADD COLUMN map_rast2 raster;
UPDATE dummy_rast SET
map_rast2 = ST_MapAlgebraExpr(rast,'2BUI'::text,'CASE WHEN [rast] BETWEEN 100 and 250 THEN 1 WHEN [rast] = 252 THEN 2 WHEN [rast] BETWEEN 253 and 254 THEN 3 ELSE 0 END'::text, '0')
WHERE rid = 2;
SELECT DISTINCT
ST_Value(rast,1,i,j) As origval,
ST_Value(map_rast2, 1, i, j) As mapval
FROM dummy_rast
CROSS JOIN generate_series(1, 5) AS i
CROSS JOIN generate_series(1,5) AS j
WHERE rid = 2;
origval | mapval
---------+--------
249 | 1
250 | 1
251 |
252 | 2
253 | 3
254 | 3
SELECT
ST_BandPixelType(map_rast2) As b1pixtyp
FROM dummy_rast
WHERE rid = 2;
b1pixtyp
----------
2BUI
|
![]() الأصل (العمود rast_view)
|
![]() rast_view_ma
|
إنشاء رستر جديد بثلاثة نطاقات وبنوع البكسل نفسه من الرستر الأصلي ذي النطاقات الثلاثة، مع تعديل النطاق الأول بجبر الخرائط وإبقاء النطاقين الآخرين دون تعديل.
SELECT
ST_AddBand(
ST_AddBand(
ST_AddBand(
ST_MakeEmptyRaster(rast_view),
ST_MapAlgebraExpr(rast_view,1,NULL,'tan([rast])*[rast]')
),
ST_Band(rast_view,2)
),
ST_Band(rast_view, 3)
) As rast_view_ma
FROM wind
WHERE rid=167;
انظر أيضًا
ST_MapAlgebraExpr, ST_MapAlgebraFct, ST_BandPixelType, ST_GeoReference, ST_Value

