ST_MapAlgebra

ST_MapAlgebra 函数通过使用代数计算表达式(Algebra Computing Language)对多个源对象的像素值进行计算,从而生成一个新的raster对象。

语法

raster ST_MapAlgebra(raster[] rasters ,
      cstringalgebraExpr  default NULL,
     cstringstorageoptiondefault '')

参数

参数名称

描述

rasters

需要进行代数运算的raster对象数组。

algebraExpr

JSON字符串用于表示代数运算表达式。

storageOption

JSON字符串表示的返回结果的存储选项。

说明

传入的raster对象只要求长和宽一致,并不会对空间参考或分辨率等进行检查。如不一致可以通过ST_TransformST_ResizeST_Clip先进行处理。

algebraExpr为JSON字符串数组,每个子JSON对象指明代数运算表达式, 参数如下。

参数名称

描述

类型

默认值

说明

algebraExpr

代数运算表达式。

string

-

-

nodata

是否使用nodata。

boolean

false

  • 如果为true,则如果像素值为nodata,栅格对象也为nodata。

  • 如果为false,则作为普通数值进行计算。

nodataValue

nodata值。

float8

0

-

algebraExpr代数运算表达式有以下关键字。

  • [r, b]

    • r:raster在数组中的id,0-n-1。

    • b:对应raster所在的波段号, 0-n-1。

  • x

    该象元所在的列号。

  • y

    该象元所在的行号。

表达式支持以下运算:

分类

运算符/函数

备注

运算符

  • +

  • -

  • *

  • /

  • % (remainder)

  • ** (power)

-

位运算

  • <<

  • >>

  • &

  • |

  • ^

-

逻辑运算

  • <

  • >

  • ==

  • !=

  • <=

  • >=

  • &&

  • ||

  • !

-

运算函数

  • abs

  • sqrt

  • exp

  • log

  • ln

  • sin

  • cos

  • tan

  • sinh

  • cosh

  • tanh

  • arcsin

  • arccos

  • arctan

  • ceil

  • floor

  • round

参数个数为1个。

统计函数

  • min

  • max

  • sum

  • mean

  • majority

  • minority

  • std

  • median

  • range

  • variety

参数个数至少为2个。

  • 示例1

    本示例表示栅格对象为一个波段,结果值为raster[0]band[0] + raster[1]band[0] * raster[1]band[1]。

    [
        {
            "expr":"([0,0] + [1,0] * [1,1]) ",
            "nodata": true,
            "nodataValue":999
        }
    ]
  • 示例2

    本示例表示计算三个波段的方差。

    [
        {
            "expr":"(std([0,0],[0,1],[0,2]))",
            "nodata": true,
            "nodataValue":999
        }
    ]
  • 示例3

    以下示例表生成三个图层,每个图层使用不同的表达式进行计算。

    [
        {
            "expr":"(min([0,0],[0,1],[0,2]))",
            "nodata": true,
            "nodataValue":999
        },
        {
            "expr":"(max([0,0],[0,1],[0,2]))",
            "nodata": true,
            "nodataValue":999
        },
        {
            "expr":"(mean([0,0],[0,1],[0,2]))",
            "nodata": true,
            "nodataValue":999
        }
    ]

storageOption参数如下。

参数名称

描述

类型

默认值

说明

chunking

是否使用分块存储。

boolean

和原始raster一致

-

chunkdim

分块的维度信息。

string

和原始raster一致

在chunking=true时才有效。

chunktable

分块表名称。

string

''

如果传入''值,则会产生一个随机表名临时块表用于存放数据。 该临时表只在当前会话中有效。如果需要保持一个可访问的裁剪对象,则需要指定块表名称。

compression

压缩算法类型。

string

和原始raster一致

目前只支持none、jpeg、zlib、png、lzo和lz4。

quality

压缩质量。

integer

和原始raster一致

只针对jpeg压缩算法。

interleaving

交错方式。

string

和原始raster一致

必须是以下一种:

  • bip:Band interleaved by pixel

  • bil:Band nterleaved by pixel

  • bsq:Band Sequential

endian

字节序。

string

和原始raster一致

必须为以下其中之一:

  • NDR:Little endian

  • XDR:Big endian

示例

-- 永久表
CREATE TABLE rast_mapalgebra_result(id integer, rast raster);

-- 插入表中
WITH foo AS (
  SELECT 1 AS rid, rast AS rast from t1 WHERE id = 1
UNION ALL
  SELECT 2 AS rid, rast AS rast from t2 WHERE id = 2
)
INSERT INTO rast_mapalgebra_result
SELECT 1, ST_MapAlgebra(
    ARRAY(SELECT rast FROM foo ORDER BY rid),
    '[{"expr":"([0,0] + 0.5 * [1,0] - ([1,1])","nodata": true, "nodataValue":999}]',
    '{"chunktable":"algebra_rbt"}'
);