ST_MapAlgebra 函數通過使用代數計算表達式(Algebra Computing Language)對多個源對象的像素值進行計算,從而生成一個新的raster對象。
語法
raster ST_MapAlgebra(raster[] rasters ,
cstring algebraExpr default NULL,
cstring storageoption default '')
參數
參數名稱 | 描述 |
---|---|
rasters | 需要進行代數運算的raster對象數組。 |
algebraExpr | JSON字符串用于表示代數運算表達式。 |
storageOption | JSON字符串表示的返回結果的存儲選項。 |
algebraExpr為JSON字符串數組,每個子JSON對象指明代數運算表達式, 參數如下。
參數名稱 | 描述 | 類型 | 默認值 | 說明 |
---|---|---|---|---|
algebraExpr | 代數運算表達式。 | string | - | - |
nodata | 是否使用nodata。 | boolean | false |
|
nodataValue | nodata值。 | float8 | 0 | - |
algebraExpr代數運算表達式有以下關鍵字。
- [r, b]
- r:raster在數組中的id,0-n-1。
- b:對應raster所在的波段號, 0-n-1。
- x
該象元所在的列號。
- y
該象元所在的行號。
表達式支持以下運算:
分類 | 運算符/函數 | 備注 |
---|---|---|
運算符 |
|
- |
位運算 |
|
- |
邏輯運算 |
|
- |
運算函數 |
|
參數個數為1個。 |
統計函數 |
|
參數個數至少為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一致 | 必須是以下一種:
|
endian | 字節序。 | string | 和原始raster一致 | 必須為以下其中之一:
|
示例
-- 永久表
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"}'
);