ST_MapAlgebra(表达式版本) — 表达式版本 - 返回一个单波段栅格,该栅格由一个或两个输入栅格、波段索引和一个或多个用户指定的 SQL 表达式计算得出。
raster ST_MapAlgebra(
raster rast, integer nband, text pixeltype, text expression, double precision nodataval=NULL)
;
raster ST_MapAlgebra(
raster rast, text pixeltype, text expression, double precision nodataval=NULL)
;
raster ST_MapAlgebra(
raster rast1, integer nband1, raster rast2, integer nband2, text expression, text pixeltype=NULL, text extenttype=INTERSECTION, text nodata1expr=NULL, text nodata2expr=NULL, double precision nodatanodataval=NULL)
;
raster ST_MapAlgebra(
raster rast1, raster rast2, text expression, text pixeltype=NULL, text extenttype=INTERSECTION, text nodata1expr=NULL, text nodata2expr=NULL, double precision nodatanodataval=NULL)
;
表达式版本 - 返回一个单波段栅格,该栅格由一个或两个输入栅格、波段索引和一个或多个用户指定的 SQL 表达式计算得出。
可用性:2.1.0
创建一个新的单波段栅格,该栅格是通过将输入栅格 (rast
) 上由 expression
定义的有效的 PostgreSQL 代数运算应用得出的。如果未提供 nband
,则假定为波段 1。新栅格将具有与原始栅格相同的地理参考、宽度和高度,但将只有一个波段。
如果传入 pixeltype
,则新栅格将具有该像素类型的波段。如果 pixeltype 传入 NULL,则新栅格波段将具有与输入 rast
波段相同的像素类型。
expression
允许使用的关键字
[rast]
- 感兴趣像素的像素值
[rast.val]
- 感兴趣像素的像素值
[rast.x]
- 感兴趣像素的从 1 开始的像素列
[rast.y]
- 感兴趣像素的从 1 开始的像素行
创建一个新的单波段栅格,该栅格是通过将由 expression
定义的有效的 PostgreSQL 代数运算应用于两个输入栅格波段 rast1
, (rast2
) 的两个波段而得出的。如果未指定 band1
, band2
,则假定为波段 1。生成的栅格将在由第一个栅格定义的网格上对齐(比例、倾斜和像素角)。生成的栅格将具有由 extenttype
参数定义的范围。
expression
一个涉及两个栅格和 PostgreSQL 定义的函数/运算符的 PostgreSQL 代数表达式,它将定义像素相交时的像素值。例如,(([rast1] + [rast2])/2.0)::integer
pixeltype
输出栅格的生成像素类型。必须是 ST_BandPixelType 中列出的像素类型之一,或者省略或设置为 NULL。如果未传入或设置为 NULL,则默认为第一个栅格的像素类型。
extenttype
控制生成的栅格的范围
INTERSECTION
- 新栅格的范围是两个栅格的交集。这是默认值。
UNION
- 新栅格的范围是两个栅格的并集。
FIRST
- 新栅格的范围与第一个栅格的范围相同。
SECOND
- 新栅格的范围与第二个栅格的范围相同。
nodata1expr
一个仅涉及 rast2
或常量的代数表达式,用于定义当 rast1
的像素为 nodata 值且空间对应的 rast2 像素具有值时返回什么。
nodata2expr
一个仅涉及 rast1
或常量的代数表达式,用于定义当 rast2
的像素为 nodata 值且空间对应的 rast1 像素具有值时返回什么。
nodatanodataval
当空间对应的 rast1 和 rast2 像素均为 nodata 值时返回的数值常量。
expression
、nodata1expr
和 nodata2expr
中允许使用的关键字
[rast1]
- 来自 rast1
的感兴趣像素的像素值
[rast1.val]
- 来自 rast1
的感兴趣像素的像素值
[rast1.x]
- 来自 rast1
的感兴趣像素的从 1 开始的像素列
[rast1.y]
- 来自 rast1
的感兴趣像素的从 1 开始的像素行
[rast2]
- 来自 rast2
的感兴趣像素的像素值
[rast2.val]
- 来自 rast2
的感兴趣像素的像素值
[rast2.x]
- 来自 rast2
的感兴趣像素的从 1 开始的像素列
[rast2.y]
- 来自 rast2
的感兴趣像素的从 1 开始的像素行
WITH foo AS ( SELECT ST_AddBand(ST_MakeEmptyRaster(10, 10, 0, 0, 1, 1, 0, 0, 0), '32BF'::text, 1, -1) AS rast ) SELECT ST_MapAlgebra(rast, 1, NULL, 'ceil([rast]*[rast.x]/[rast.y]+[rast.val])') FROM foo;
WITH foo AS ( SELECT 1 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0), 2, '8BUI', 10, 0), 3, '32BUI'::text, 100, 0) AS rast UNION ALL SELECT 2 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 1, 1, -1, 0, 0, 0), 1, '16BUI', 2, 0), 2, '8BUI', 20, 0), 3, '32BUI'::text, 300, 0) AS rast ) SELECT ST_MapAlgebra( t1.rast, 2, t2.rast, 1, '([rast2] + [rast1.val]) / 2' ) AS rast FROM foo t1 CROSS JOIN foo t2 WHERE t1.rid = 1 AND t2.rid = 2;