Name

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

Synopsis

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

描述:变量1和变量2(一个栅格)

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

如果 pixeltype 则新栅格将具有该像素类型的带。如果将像素类型传递为空,则新栅格波段将具有与输入相同的像素类型 rast 乐队。

  • 允许的关键字 expression

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

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

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

    4. [rast.y] 感兴趣像素的以1为基础的像素行

描述:变量3和4(两个栅格)

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

表达式

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

像素类型

输出栅格的结果像素类型。必须是中列出的 ST_BandPixelType 、省略或设置为空。如果未传入或设置为空,则默认为第一个栅格的像素类型。

区段类型

控制生成的栅格的范围

  1. INTERSECTION -新栅格的范围是两个栅格的交点。这是默认设置。

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

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

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

Nodata1expr

一种仅涉及 rast2 或一个常量,该常量定义当像素的 rast1 是无数据值,并且空间上对应的rast2像素具有值。

Nodata2expr

一种仅涉及 rast1 或一个常量,该常量定义当像素的 rast2 是无数据值,并且空间上对应的rast1像素具有值。

Nodatandataval

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

  • 中允许的关键字 expressionnodata1exprnodata2expr

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

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

    3. [rast1.x] 感兴趣的像素的-1\f25 Pixel-1列 rast1

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

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

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

    7. [rast2.x] 感兴趣的像素的-1\f25 Pixel-1列 rast2

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

例子:变种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;
                    

另请参阅

粗制滥造, ST_Union, ST_MapAlgebra(回调函数版本)