全部產品
Search
文件中心

ApsaraDB RDS:ST_MapAlgebra

更新時間:Aug 21, 2026

ST_MapAlgebra 函數通過使用代數計算運算式(Algebra Computing Language)對多個來源物件的像素值進行計算,從而產生一個新的raster對象。

文法

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

參數

參數名稱

描述

rasters

需要進行代數運算的raster對象數組。

algebraExpr

JSON字串用於表示代數運算運算式。

storageOption

JSON字串表示的返回結果的儲存選項。

說明

傳入的raster對象只要求長和寬一致,並不會對空間參考或解析度等進行檢查。如不一致可以通過ST_Transform、ST_Resize和ST_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

是否使用分Block Storage。

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"}'
);