الاسم
ST_Reclass — تُنشئ رسترًا جديدًا يتكون من أنواع نطاقات مُعاد تصنيفها من الأصل. nband هو النطاق المراد تغييره. إذا لم يُحدَّد nband فيُفترض أنه 1. تُعاد جميع النطاقات الأخرى دون تغيير. حالة الاستخدام: تحويل نطاق 16BUI إلى 8BUI وما إلى ذلك لتسهيل العرض بصيغ قابلة للعرض.
المختصر
raster ST_Reclass(raster rast, integer nband, text reclassexpr, text pixeltype, double precision nodataval=NULL);
raster ST_Reclass(raster rast, reclassarg[] VARIADIC reclassargset);
raster ST_Reclass(raster rast, text reclassexpr, text pixeltype);
الوصف
تُنشئ رسترًا جديدًا يتكون بتطبيق عملية إعادة تصنيف يعرّفها reclassexpr على الرستر المُدخل (rast). راجع reclassarg للاطلاع على وصف تعابير إعادة التصنيف. إذا لم يُحدَّد band فيُفترض النطاق 1.
سيكون للرستر الجديد الإسناد الجغرافي والعرض والارتفاع نفسها للرستر الأصلي. ويكون نوع بكسلات نطاقات الرستر الجديد هو pixeltype. إذا حُدِّد reclassargset فإن كل reclassarg يحدد نوع النطاق الهدف. وتُعاد النطاقات غير المعيّنة دون تغيير.
متاحة منذ: 2.0.0
مثال: أساسي
إنشاء رستر جديد من الأصل يُحوَّل فيه النطاق 2 من 8BUI إلى 4BUI وتُضبط جميع القيم من 101 إلى 254 على قيمة nodata.
ALTER TABLE dummy_rast ADD COLUMN reclass_rast raster;
UPDATE dummy_rast SET reclass_rast = ST_Reclass(rast,2,'0-87:1-10, 88-100:11-15, 101-254:0-0', '4BUI',0) WHERE rid = 2;
SELECT i as col, j as row, ST_Value(rast,2,i,j) As origval,
ST_Value(reclass_rast, 2, i, j) As reclassval,
ST_Value(reclass_rast, 2, i, j, false) As reclassval_include_nodata
FROM dummy_rast CROSS JOIN generate_series(1, 3) AS i CROSS JOIN generate_series(1,3) AS j
WHERE rid = 2;
col | row | origval | reclassval | reclassval_include_nodata
-----+-----+---------+------------+---------------------------
1 | 1 | 78 | 9 | 9
2 | 1 | 98 | 14 | 14
3 | 1 | 122 | | 0
1 | 2 | 96 | 14 | 14
2 | 2 | 118 | | 0
3 | 2 | 180 | | 0
1 | 3 | 99 | 15 | 15
2 | 3 | 112 | | 0
3 | 3 | 169 | | 0
مثال: متقدم باستخدام عدة reclassarg
إنشاء رستر جديد من الأصل تُحوَّل فيه النطاقات 1 و2 و3 إلى 1BB و4BUI و4BUI على التوالي ويُعاد تصنيفها. لاحظ أن هذا يستخدم الوسيط variadic reclassarg الذي يمكنه أن يقبل مُدخلًا عددًا غير محدد من reclassarg (نظريًا بعدد ما لديك من نطاقات)
UPDATE dummy_rast SET reclass_rast =
ST_Reclass(rast,
ROW(2,'0-87]:1-10, (87-100]:11-15, (101-254]:0-0', '4BUI',NULL)::reclassarg,
ROW(1,'0-253]:1, 254:0', '1BB', NULL)::reclassarg,
ROW(3,'0-70]:1, (70-86:2, [86-150):3, [150-255:4', '4BUI', NULL)::reclassarg
) WHERE rid = 2;
SELECT i as col, j as row,ST_Value(rast,1,i,j) As ov1, ST_Value(reclass_rast, 1, i, j) As rv1,
ST_Value(rast,2,i,j) As ov2, ST_Value(reclass_rast, 2, i, j) As rv2,
ST_Value(rast,3,i,j) As ov3, ST_Value(reclass_rast, 3, i, j) As rv3
FROM dummy_rast CROSS JOIN generate_series(1, 3) AS i CROSS JOIN generate_series(1,3) AS j
WHERE rid = 2;
col | row | ov1 | rv1 | ov2 | rv2 | ov3 | rv3
----+-----+-----+-----+-----+-----+-----+-----
1 | 1 | 253 | 1 | 78 | 9 | 70 | 1
2 | 1 | 254 | 0 | 98 | 14 | 86 | 3
3 | 1 | 253 | 1 | 122 | 0 | 100 | 3
1 | 2 | 253 | 1 | 96 | 14 | 80 | 2
2 | 2 | 254 | 0 | 118 | 0 | 108 | 3
3 | 2 | 254 | 0 | 180 | 0 | 162 | 4
1 | 3 | 250 | 1 | 99 | 15 | 90 | 3
2 | 3 | 254 | 0 | 112 | 0 | 108 | 3
3 | 3 | 254 | 0 | 169 | 0 | 175 | 4
مثال: متقدم لتحويل رستر 32BF ذي نطاق واحد إلى عدة نطاقات قابلة للعرض
إنشاء رستر جديد بثلاثة نطاقات (رستر قابل للعرض 8BUI,8BUI,8BUI) من رستر لا يملك إلا نطاقًا واحدًا من نوع 32bf
ALTER TABLE wind ADD COLUMN rast_view raster;
UPDATE wind
set rast_view = ST_AddBand( NULL,
ARRAY[
ST_Reclass(rast, 1,'0.1-10]:1-10,9-10]:11,(11-33:0'::text, '8BUI'::text,0),
ST_Reclass(rast,1, '11-33):0-255,[0-32:0,(34-1000:0'::text, '8BUI'::text,0),
ST_Reclass(rast,1,'0-32]:0,(32-100:100-255'::text, '8BUI'::text,0)
]
);
انظر أيضًا
ST_AddBand, ST_Band, ST_BandPixelType, ST_MakeEmptyRaster, reclassarg, ST_Value