名前

ST_MapAlgebra (expression version) — 数式版 - 一つか二つの入力ラスター、バンド番号、一つ以上のユーザ定義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 式から一つのバンドを持つラスターを返します。

Availability: 2.1.0

説明: 一つ目の形式と二つ目の形式 (一つのラスター)

expressionで定義された妥当な PostgreSQL 代数演算を入力ラスタ (rast) に適用して、一つのバンドを持つラスターを生成します。nbandが指定されない場合には、1番バンドと仮定します。新しいラスターは、元のラスターと同じ地理参照、幅、高さになりますが、バンドは一つだけとなります。

pixeltypeが渡された場合には、新しいラスターのバンドは、そのピクセルタイプになります。pixeltype に NULL が渡された場合には、新しいラスターは入力rastのバンドのピクセルタイプと同じになります。

  • expressionのキーワードは次の通りです。

    1. [rast] - 演算対象ピクセルの値

    2. [rast.val] - 演算対象ピクセルの値

    3. [rast.x] - 演算対象ピクセルの列 (1始まり)

    4. [rast.y] - 演算対象ピクセルの行 (1始まり)

説明: 三つ目と四つ目の形式 (二つのラスター)

expressionで定義された妥当な二つのバンドへの PostgreSQL 代数演算を入力ラスター rast1, (rast2) に適用して、一つのバンドを持つラスターを生成します。band1, band2が指定されない場合には、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

rast1が NODATA 値で、特に rast2ピクセルに値がある時に、rast2だけを返すか返すべき値を定義する定数を含む代数式です。

nodata2expr

rast2が NODATA 値で、特に rast2ピクセルに値がある時に、rast1だけを返すか返すべき値を定義する定数を含む代数式です。

nodatanodataval

rast1と rast2のピクセルの両方が NOADTA 値になる場合に返すべき定数です。

  • 有効なexpression, nodata1expr, nodata2exprのキーワードは次の通りです。

    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;