名称

ST_MapAlgebra(表达式版本)- 表达式版本 - 返回一个单波段光栅,给定一个或两个输入光栅、波段索引和一个或多个用户指定的 SQL 表达式。

语法

光栅 ST_MapAlgebra(光栅 rast,整数 nband,文本 pixeltype,文本 expression,双精度 nodataval=NULL);

光栅 ST_MapAlgebra(光栅 rast,文本 pixeltype,文本 expression,双精度 nodataval=NULL);

光栅 ST_MapAlgebra(光栅 rast1,整数 nband1,光栅 rast2,整数 nband2,文本 expression,文本 pixeltype=NULL,文本 extenttype=INTERSECTION,文本 nodata1expr=NULL,文本 nodata2expr=NULL,双精度 nodatanodataval=NULL);

光栅 ST_MapAlgebra(光栅 rast1,光栅 rast2,文本 expression,文本 pixeltype=NULL,文本 extenttype=INTERSECTION,文本 nodata1expr=NULL,文本 nodata2expr=NULL,双精度 nodatanodataval=NULL);

说明

表达式版本 - 返回一个单波段光栅,给定一个或两个输入光栅、波段索引和一个或多个用户指定的 SQL 表达式。

可用性:2.1.0

说明:变量 1 和 2(一个光栅)

创建一个新的单波段光栅,通过对输入光栅 (rast) 应用 expression 定义的有效 PostgreSQL 代数运算来形成。如果未提供 nband,则假定波段 1。新光栅将与原始光栅具有相同的地理参考、宽度和高度,但仅有一个波段。

如果传入 pixeltype,则新光栅将具有该像素类型的波段。如果 pixeltype 传入 NULL,则新光栅波段将具有与输入 rast 波段相同的像素类型。

  • 允许用于 expression 的关键字

    1. [rast] - 感兴趣像素的像素值

    2. [rast.val] - 感兴趣的像素的像素值

    3. [rast.x] - 感兴趣的像素的基于 1 的像素列

    4. [rast.y] - 感兴趣的像素的基于 1 的像素行

说明:变体 3 和 4(两个栅格)

创建一个新的单波段栅格,通过对两个输入栅格波段 rast1、(rast2) 上由 expression 定义的两个波段应用有效的 PostgreSQL 代数运算来形成。如果没有指定 band1band2,则假定波段 1。生成的栅格将对齐(比例、倾斜和像素角)在第一个栅格定义的网格上。生成的栅格将具有由 extenttype 参数定义的范围。

expression

涉及两个栅格和 PostgreSQL 定义的函数/运算符的 PostgreSQL 代数表达式,当像素相交时,这些函数/运算符将定义像素值。例如 (([rast1] + [rast2])/2.0)::integer

pixeltype

输出栅格的生成像素类型。必须列在 ST_BandPixelType 中,省略或设置为 NULL。如果没有传入或设置为 NULL,则将默认为第一个栅格的像素类型。

extenttype

控制生成栅格的范围

  1. INTERSECTION - 新栅格的范围是两个栅格的交集。这是默认值。

  2. UNION - 新栅格的范围是两个栅格的并集。

  3. FIRST - 新栅格的范围与第一个栅格的范围相同。

  4. SECOND - 新栅格的范围与第二个栅格的范围相同。

nodata1expr

仅涉及 rast2 或常量的代数表达式,该表达式定义当 rast1 的像素为无数据值且空间对应的 rast2 像素有值时返回什么。

nodata2expr

仅涉及 rast1 或常量的代数表达式,该表达式定义当 rast2 的像素为无数据值且空间对应的 rast1 像素有值时返回什么。

nodatanodataval

当空间对应的 rast1 和 rast2 像素均为无数据值时返回的数字常量。

  • expressionnodata1exprnodata2expr 中允许使用的关键字

    1. [rast1] - rast1 中感兴趣像素的像素值

    2. [rast1.val] - rast1 中感兴趣像素的像素值

    3. [rast1.x] - rast1 中感兴趣像素的基于 1 的像素列

    4. [rast1.y] - rast1 中感兴趣像素的基于 1 的像素行

    5. [rast2] - rast2 中感兴趣像素的像素值

    6. [rast2.val] - rast2 中感兴趣像素的像素值

    7. [rast2.x] - rast2 中感兴趣像素的基于 1 的像素列

    8. [rast2.y] - rast2 中感兴趣像素的基于 1 的像素行

示例:变体 1 和 2

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;
                    

示例:变体 3 和 4

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;
                    

另请参见

rastbandargST_UnionST_MapAlgebra (回调函数版本)