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)
;
![]() |
|
自 2.1.0 起,ST_MapAlgebraExpr 已棄用。請改用 ST_MapAlgebra (表達式版本)。 |
基於輸入柵格 (rast
),套用 expression
定義的有效 PostgreSQL 代數運算,建立一個新的單一波段柵格。如果未指定 band
,則假設為波段 1。新的柵格將具有與原始柵格相同的地理參考、寬度和高度,但只會有一個波段。
如果傳入 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
|
從原始的 3 波段柵格建立一個新的 3 波段柵格,具有相同的像素類型,其中第一個波段由地圖代數更改,其餘 2 個波段保持不變。
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;