すべてのプロダクト
Search
ドキュメントセンター

PolarDB:ST_MapAlgebra

最終更新日:Mar 29, 2026

ST_MapAlgebra は、代数コンピューティング言語で記述された代数式を適用することで、複数のラスターオブジェクトを単一のラスターオブジェクトにマージします。

構文

raster ST_MapAlgebra(raster[] rasters,
        cstring algebraExpr  default NULL,
        cstring storageoption default '')

パラメーター

パラメーター説明
rasters変換する入力ラスターオブジェクト。
algebraExpr適用する代数式を定義する JSON 文字列。 詳細については、「algebraExpr パラメーター」をご参照ください。
storageOption出力ラスターのストレージ方法を制御する JSON 文字列。 詳細については、「storageOption パラメーター」をご参照ください。
ST_MapAlgebra は、入力ラスターの長さと幅の測定単位が同じであることのみを要求します。 空間参照系や解像度はチェックしません。 ご利用のラスターの単位が異なる場合は、まず ST_TransformST_Resize、および ST_Clip を使用してそれらを揃える必要があります。

algebraExpr パラメーター

algebraExpr パラメーターは JSON 配列を受け取ります。 配列内の各オブジェクトは、次のフィールドを使用して 1 つの出力バンドを定義します。

フィールド

フィールドデフォルト説明
algebraExprStringこのバンドの代数式。
nodataBooleanfalsenodata ピクセルの処理方法を制御します。 true: nodata ピクセルは有効な値として扱われ、変換されません。 false: nodata ピクセルは無効な値として扱われ、変換されます。
nodataValuefloat80出力ラスターに書き込まれる nodata 値。

式のキーワード

代数式で次のキーワードを使用してピクセル値を参照します:

  1. [r, b] — ラスターインデックス r とバンドインデックス b (両方とも 0 から始まる、0 から n-1) のピクセル値。

  2. x — 現在のピクセルの 0 から始まる列インデックス。

  3. y — 現在のピクセルの 0 から始まる行インデックス。

サポートされている操作

演算子と関数注意
算術+-*/% (剰余)、 ** (べき乗)
ビット単位<<>>&|^
論理<>==!=<=>=&&||!
数学関数abssqrtexploglnsincostansinhcoshtanharcsinarccosarctanceilfloorround式ごとに 1 つの数学関数のみ。
統計関数minmaxsummeanmajorityminoritystdmedianrangevariety2 つ以上の引数が必要です。

algebraExpr の例

例 1 — 算術式を使用したシングルバンド出力

raster[0]band[0] + raster[1]band[0] * raster[1]band[1] を使用して 1 バンドのラスターを生成します:

[
    {
        "expr": "([0,0] + [1,0] * [1,1]) ",
        "nodata": true,
        "nodataValue": 999
    }
]

例 2 — 統計関数を使用したシングルバンド出力

最初のラスターの 3 つのバンドにわたる標準偏差を計算します:

[
    {
        "expr": "(std([0,0],[0,1],[0,2]))",
        "nodata": true,
        "nodataValue": 999
    }
]

例 3 — バンドごとに一意の式を持つマルチバンド出力

3 つのバンドにわたって min、max、mean を適用し、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 パラメーター

フィールドデフォルト説明
chunkingBoolean入力ラスターと同じ出力ラスターをチャンクとして保存するかどうか。
chunkdimString入力ラスターと同じチャンクディメンション。 chunkingtrue の場合にのみ有効です。
chunktableString'' (空の文字列)チャンクテーブルの名前。 デフォルトでは、ランダムな名前の一時テーブルが作成され、現在のセッションでのみ有効です。 出力を永続的に保存するには、名前を指定します。
compressionString入力ラスターと同じ圧縮形式。 有効な値: NoneJPEGZlibPNGLZOLZ4
qualityInteger入力ラスターと同じ画質。 JPEG 形式でのみ有効です。
interleavingString入力ラスターと同じインターリーブタイプ。 有効な値: bip (バンドインターリーブバイピクセル、BIP)、 bil (バンドインターリーブバイライン、BIL)、 bsq (バンドシーケンシャル、BSQ)。
endianString入力ラスターと同じバイトオーダー。 有効な値: NDR (リトルエンディアン)、 XDR (ビッグエンディアン)。

次の例では、永続的なチャンクテーブルを作成し、そこに ST_MapAlgebra の結果を挿入します。 両方のラスターが配列に収集され、単一の算術式が最初のラスターのバンド 0 を 2 番目のラスターのバンド 0 とバンド 1 と組み合わせます。

-- 永続的なチャンクテーブルを作成します。
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"}'
);