ST_MapAlgebraExpr — 1 栅格波段版本:创建一个新的单波段栅格,方法是将有效的 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 已从 2.1.0 版开始弃用。请改用 ST_MapAlgebra (expression version)。 |
创建一个新的单波段栅格,方法是将 expression
定义的有效 PostgreSQL 代数运算应用于输入栅格 (rast
)。如果没有指定 band
,则假定为波段 1。新栅格将具有与原始栅格相同的地理参考、宽度和高度,但只有一个波段。
如果传入 pixeltype
,则新栅格将具有该像素类型的波段。如果 pixeltype 传入 NULL,则新栅格波段将具有与输入 rast
波段相同的像素类型。
在表达式中,可以使用术语 [rast]
来引用原始波段的像素值,[rast.x]
来引用基于 1 的像素列索引,[rast.y]
来引用基于 1 的像素行索引。
可用性:2.0.0
从我们的原始栅格创建一个新的 1 波段栅格,它是原始栅格波段的模 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 的新 1 波段栅格,对该栅格进行重新分类并将无数据值设置为 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
|
|
从我们的原始 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;