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)(表达式版本)代替。 |
通过应用由输入栅格 (rast) 上的expression的有效 PostgreSQL 代数运算来创建新的单波段栅格。 如果未指定波段,则假定为波段 1。 新栅格将具有与原始栅格相同的地理参考、宽度和高度,但只有一个波段。
如果传入像素类型,则新栅格将具有该像素类型的波段。 如果将像素类型传递为 NULL,则新的栅格带将具有与输入栅格带相同的像素类型。
在表达式中,您可以使用术语 [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;
2BUI
A self-contained source raster and the raster produced by classifying its values into four display levels.
WITH source AS (
SELECT ST_SetValues(
ST_AddBand(
ST_MakeEmptyRaster(8, 8, 0, 8, 1, -1, 0, 0, 0),
1, '8BUI', 0, 0
),
1, 1, 1,
ARRAY[
[0, 1, 2, 3, 4, 5, 6, 7],
[8, 9, 10, 11, 12, 13, 14, 15],
[16, 17, 18, 19, 20, 21, 22, 23],
[24, 25, 26, 27, 28, 29, 30, 31],
[32, 33, 34, 35, 36, 37, 38, 39],
[40, 41, 42, 43, 44, 45, 46, 47],
[48, 49, 50, 51, 52, 53, 54, 55],
[56, 57, 58, 59, 60, 61, 62, 63]
]::double precision[][]
) AS rast
), variants AS (
SELECT 'source' AS title, rast AS rendered
FROM source
UNION ALL
SELECT
'classified',
ST_MapAlgebraExpr(rast, '8BUI', 'floor([rast] / 16) * 85')
FROM source
)
SELECT title, ST_AsPNG(rendered) AS image
FROM variants
ORDER BY title DESC;
title | image ------------+------------------------- source | PNG image, 8 x 8 pixels classified | PNG image, 8 x 8 pixels
Map algebra altering the first band of a three-band raster.
原始(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;