全部產品
Search
文件中心

ApsaraDB RDS:ST_MapAlgebra

更新時間:Feb 28, 2024

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

文法

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

參數

參數名稱描述
rasters需要進行代數運算的raster對象數組。
algebraExprJSON字串用於表示代數運算運算式。
storageOptionJSON字串表示的返回結果的儲存選項。
說明 傳入的raster對象只要求長和寬一致,並不會對空間參考或解析度等進行檢查。如不一致可以通過ST_TransformST_ResizeST_Clip先進行處理。

algebraExpr為JSON字串數組,每個子JSON對象指明代數運算運算式, 參數如下。

參數名稱描述類型預設值說明
algebraExpr代數運算運算式。string--
nodata是否使用nodata。booleanfalse
  • 如果為true,則如果像素值為nodata,柵格對象也為nodata。
  • 如果為false,則作為普通數值進行計算。
nodataValuenodata值。float80-

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