名稱

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

描述:變體 1 和 2 (單個光柵)

建立一個新的單波段光柵,方法是對輸入光柵 (rast) 應用由 expression 定義的有效 PostgreSQL 代數運算。如果未提供 nband,則假設為波段 1。新的光柵將具有與原始光柵相同的地理參考、寬度和高度,但只會有一個波段。

如果傳入 pixeltype,則新的光柵將具有該像素類型的波段。如果傳入 NULL 作為 pixeltype,則新的光柵波段將具有與輸入 rast 波段相同的像素類型。

  • expression 允許使用的關鍵字

    1. [rast] - 感興趣像素的像素值

    2. [rast.val] - 感興趣像素的像素值

    3. [rast.x] - 感興趣像素的從 1 開始的像素欄位

    4. [rast.y] - 感興趣像素的從 1 開始的像素列

描述:變體 3 和 4 (兩個光柵)

建立一個新的單波段光柵,方法是對兩個輸入光柵波段 rast1 和 (rast2) 應用由 expression 定義的有效 PostgreSQL 代數運算。如果未指定 band1band2,則假設為波段 1。結果光柵將與由第一個光柵定義的網格對齊(比例、傾斜和像素角)。結果光柵將具有由 extenttype 參數定義的範圍。

expression

一個 PostgreSQL 代數表達式,涉及兩個光柵和 PostgreSQL 定義的函數/運算子,這些函數/運算子將定義像素相交時的像素值。例如 (([rast1] + [rast2])/2.0)::integer

pixeltype

輸出光柵的結果像素類型。必須是 ST_BandPixelType 中列出的其中一種,省略或設定為 NULL。如果未傳入或設定為 NULL,則預設為第一個光柵的像素類型。

extenttype

控制結果光柵的範圍

  1. INTERSECTION - 新光柵的範圍是兩個光柵的交集。這是預設值。

  2. UNION - 新光柵的範圍是兩個光柵的聯集。

  3. FIRST - 新光柵的範圍與第一個光柵的範圍相同。

  4. SECOND - 新光柵的範圍與第二個光柵的範圍相同。

nodata1expr

一個只涉及 rast2 或常數的代數表達式,用於定義當 rast1 的像素為 nodata 值,且空間上對應的 rast2 像素有值時,要傳回的內容。

nodata2expr

一個只涉及 rast1 或常數的代數表達式,用於定義當 rast2 的像素為 nodata 值,且空間上對應的 rast1 像素有值時,要傳回的內容。

nodatanodataval

當空間上對應的 rast1 和 rast2 像素都為 nodata 值時,要傳回的數值常數。

  • expressionnodata1exprnodata2expr 中允許使用的關鍵字

    1. [rast1] - 來自 rast1 的感興趣像素的像素值

    2. [rast1.val] - 來自 rast1 的感興趣像素的像素值

    3. [rast1.x] - 來自 rast1 的感興趣像素的從 1 開始的像素欄位

    4. [rast1.y] - 來自 rast1 的感興趣像素的從 1 開始的像素列

    5. [rast2] - 來自 rast2 的感興趣像素的像素值

    6. [rast2.val] - 來自 rast2 的感興趣像素的像素值

    7. [rast2.x] - 來自 rast2 的感興趣像素的從 1 開始的像素欄位

    8. [rast2.y] - 來自 rast2 的感興趣像素的從 1 開始的像素列

範例:變體 1 和 2

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;
                    

範例:變體 3 和 4

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;