ST_MapAlgebra (表達式版本) — 表達式版本 - 根據一個或兩個輸入光柵、波段索引和一個或多個使用者指定的 SQL 表達式,傳回一個單波段光柵。
raster ST_MapAlgebra(
raster rast, integer nband, text pixeltype, text expression, double precision nodataval=NULL)
;
raster ST_MapAlgebra(
raster rast, text pixeltype, text expression, double precision nodataval=NULL)
;
raster ST_MapAlgebra(
raster rast1, integer nband1, raster rast2, integer nband2, text expression, text pixeltype=NULL, text extenttype=INTERSECTION, text nodata1expr=NULL, text nodata2expr=NULL, double precision nodatanodataval=NULL)
;
raster ST_MapAlgebra(
raster rast1, raster rast2, text expression, text pixeltype=NULL, text extenttype=INTERSECTION, text nodata1expr=NULL, text nodata2expr=NULL, double precision nodatanodataval=NULL)
;
表達式版本 - 根據一個或兩個輸入光柵、波段索引和一個或多個使用者指定的 SQL 表達式,傳回一個單波段光柵。
可用性:2.1.0
建立一個新的單波段光柵,方法是對輸入光柵 (rast
) 應用由 expression
定義的有效 PostgreSQL 代數運算。如果未提供 nband
,則假設為波段 1。新的光柵將具有與原始光柵相同的地理參考、寬度和高度,但只會有一個波段。
如果傳入 pixeltype
,則新的光柵將具有該像素類型的波段。如果傳入 NULL 作為 pixeltype,則新的光柵波段將具有與輸入 rast
波段相同的像素類型。
expression
允許使用的關鍵字
[rast]
- 感興趣像素的像素值
[rast.val]
- 感興趣像素的像素值
[rast.x]
- 感興趣像素的從 1 開始的像素欄位
[rast.y]
- 感興趣像素的從 1 開始的像素列
建立一個新的單波段光柵,方法是對兩個輸入光柵波段 rast1
和 (rast2
) 應用由 expression
定義的有效 PostgreSQL 代數運算。如果未指定 band1
和 band2
,則假設為波段 1。結果光柵將與由第一個光柵定義的網格對齊(比例、傾斜和像素角)。結果光柵將具有由 extenttype
參數定義的範圍。
expression
一個 PostgreSQL 代數表達式,涉及兩個光柵和 PostgreSQL 定義的函數/運算子,這些函數/運算子將定義像素相交時的像素值。例如 (([rast1] + [rast2])/2.0)::integer
pixeltype
輸出光柵的結果像素類型。必須是 ST_BandPixelType 中列出的其中一種,省略或設定為 NULL。如果未傳入或設定為 NULL,則預設為第一個光柵的像素類型。
extenttype
控制結果光柵的範圍
INTERSECTION
- 新光柵的範圍是兩個光柵的交集。這是預設值。
UNION
- 新光柵的範圍是兩個光柵的聯集。
FIRST
- 新光柵的範圍與第一個光柵的範圍相同。
SECOND
- 新光柵的範圍與第二個光柵的範圍相同。
nodata1expr
一個只涉及 rast2
或常數的代數表達式,用於定義當 rast1
的像素為 nodata 值,且空間上對應的 rast2 像素有值時,要傳回的內容。
nodata2expr
一個只涉及 rast1
或常數的代數表達式,用於定義當 rast2
的像素為 nodata 值,且空間上對應的 rast1 像素有值時,要傳回的內容。
nodatanodataval
當空間上對應的 rast1 和 rast2 像素都為 nodata 值時,要傳回的數值常數。
expression
、nodata1expr
和 nodata2expr
中允許使用的關鍵字
[rast1]
- 來自 rast1
的感興趣像素的像素值
[rast1.val]
- 來自 rast1
的感興趣像素的像素值
[rast1.x]
- 來自 rast1
的感興趣像素的從 1 開始的像素欄位
[rast1.y]
- 來自 rast1
的感興趣像素的從 1 開始的像素列
[rast2]
- 來自 rast2
的感興趣像素的像素值
[rast2.val]
- 來自 rast2
的感興趣像素的像素值
[rast2.x]
- 來自 rast2
的感興趣像素的從 1 開始的像素欄位
[rast2.y]
- 來自 rast2
的感興趣像素的從 1 開始的像素列
WITH foo AS ( SELECT ST_AddBand(ST_MakeEmptyRaster(10, 10, 0, 0, 1, 1, 0, 0, 0), '32BF'::text, 1, -1) AS rast ) SELECT ST_MapAlgebra(rast, 1, NULL, 'ceil([rast]*[rast.x]/[rast.y]+[rast.val])') FROM foo;
WITH foo AS ( SELECT 1 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0), 2, '8BUI', 10, 0), 3, '32BUI'::text, 100, 0) AS rast UNION ALL SELECT 2 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 1, 1, -1, 0, 0, 0), 1, '16BUI', 2, 0), 2, '8BUI', 20, 0), 3, '32BUI'::text, 300, 0) AS rast ) SELECT ST_MapAlgebra( t1.rast, 2, t2.rast, 1, '([rast2] + [rast1.val]) / 2' ) AS rast FROM foo t1 CROSS JOIN foo t2 WHERE t1.rid = 1 AND t2.rid = 2;