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(表达式版本) 取而代之的是。 |
通过应用由定义的有效PostgreSQL代数运算创建新的单波段栅格
expression
在输入栅格上(
rast
)。如果没有
band
是指定的,则假定为带1。新栅格将具有与原始栅格相同的地理参考、宽度和高度,但只有一个波段。
如果
pixeltype
则新栅格将具有该像素类型的带。如果将像素类型传递为空,则新栅格波段将具有与输入相同的像素类型
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波段栅格,并将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;