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
)
;
通过应用由定义的有效PostgreSQL代数运算创建新的单波段栅格
expression
在输入栅格上(
rast
)。如果
nband
未提供,则假定为带1。新栅格将具有与原始栅格相同的地理参考、宽度和高度,但只有一个波段。
如果
pixeltype
则新栅格将具有该像素类型的带。如果将像素类型传递为空,则新栅格波段将具有与输入相同的像素类型
rast
乐队。
允许的关键字
expression
[rast]
-感兴趣像素的像素值
[rast.val]
-感兴趣像素的像素值
[rast.x]
感兴趣的像素的基于1的像素列
[rast.y]
感兴趣像素的以1为基础的像素行
通过对由定义的两个波段应用有效的PostgreSQL代数运算来创建新的单波段栅格
expression
关于两个输入栅格波段
rast1
、(
rast2
)。如果没有
band1
,
band2
是指定的,则假定为带1。生成的栅格将在第一个栅格定义的栅格上对齐(缩放、倾斜和像素角)。生成的栅格将具有由
extenttype
参数。
涉及两个栅格的PostgreSQL代数表达式和PostgreSQL定义的函数/运算符,它们将在像素相交时定义像素值。例如([rast1]+[rast2])/2.0)::整数
输出栅格的结果像素类型。必须是中列出的 ST_BandPixelType 、省略或设置为空。如果未传入或设置为空,则默认为第一个栅格的像素类型。
控制生成的栅格的范围
INTERSECTION
-新栅格的范围是两个栅格的交点。这是默认设置。
UNION
-新栅格的范围是两个栅格的并集。
FIRST
-新栅格的范围与第一个栅格的范围相同。
SECOND
-新栅格的范围与第二个栅格的范围相同。
一种仅涉及
rast2
或一个常量,该常量定义当像素的
rast1
是无数据值,并且空间上对应的rast2像素具有值。
一种仅涉及
rast1
或一个常量,该常量定义当像素的
rast2
是无数据值,并且空间上对应的rast1像素具有值。
当空间上对应的rast1和rast2像素都为无数据值时返回的数值常量。
中允许的关键字
expression
,
nodata1expr
和
nodata2expr
[rast1]
-感兴趣的像素的像素值来自
rast1
[rast1.val]
-感兴趣的像素的像素值来自
rast1
[rast1.x]
感兴趣的像素的-1\f25 Pixel-1列
rast1
[rast1.y]
感兴趣的像素的-1像素行
rast1
[rast2]
-感兴趣的像素的像素值来自
rast2
[rast2.val]
-感兴趣的像素的像素值来自
rast2
[rast2.x]
感兴趣的像素的-1\f25 Pixel-1列
rast2
[rast2.y]
感兴趣的像素的-1像素行
rast2
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;