ST_MapAlgebra 函數通過使用代數計算運算式(Algebra Computing Language)對多個來源物件的像素值進行計算,從而產生一個新的raster對象。
文法
raster ST_MapAlgebra(raster[] rasters ,
cstringalgebraExpr default NULL,
cstringstorageoptiondefault '')
參數
參數名稱 | 描述 |
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 | 是否使用分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一致 | 必須是以下一種:
|
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"}'
);