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

ApsaraDB RDS:ST_MapAlgebra

最終更新日:Aug 21, 2026

代数計算言語のピクセルレベルの代数式を適用して、複数のラスターオブジェクトを単一のラスターオブジェクトにマージします。

構文

raster ST_MapAlgebra(raster[] rasters,
        cstring algebraExpr  DEFAULT NULL,
        cstring storageOption DEFAULT '')

パラメーター

パラメーター 説明
rasters 処理対象のソースラスターオブジェクトの配列です。
algebraExpr 適用する代数式を定義する JSON 配列です。配列内の各 JSON オブジェクトは、1 つの出力バンドを生成します。
storageOption 出力ラスターオブジェクトの保存方法を制御する JSON オブジェクトです。
この関数では、すべてのソースラスターオブジェクトの幅と高さの測定単位が同じであることのみが要求されます。空間参照系や解像度の検証は行いません。ソースラスターの単位が異なる場合は、まず ST_TransformST_ResizeST_Clip を使用して正規化してください。

algebraExpr パラメーター

algebraExpr は JSON 配列を受け入れます。配列内の各オブジェクトは、1 つの出力バンドを定義します。

式のキーワード

式の中でピクセル値と位置を参照するには、次のキーワードを使用します。

キーワード 説明
[r, b] ラスター r のバンド b におけるピクセル値です。rb はどちらも 0 から始まるインデックス (0 から n−1) です。
x 現在のピクセルの 0 から始まる列インデックスです。
y 現在のピクセルの 0 から始まる行インデックスです。

JSON フィールド

フィールド デフォルト 説明
algebraExpr 文字列 各ピクセルに対して評価する代数式です。
nodata ブール値 false nodata 値を持つピクセルの処理方法を制御します。true に設定すると、これらのピクセルはスキップされ、その出力値は nodataValue に設定されます。false に設定すると、計算に含められます。
nodataValue float8 0 nodatatrue であるためにスキップされた出力ピクセルに書き込まれる値です。

サポートされている演算子と関数

種類 演算子 / 関数 注意
算術 +-*/% (剰余)、** (べき乗)
ビット単位 <<>>&|^
論理 <>==!=<=>=&&||!
数学関数 abssqrtexploglnsincostansinhcoshtanharcsinarccosarctanceilfloorround 数学関数は 1 つだけ指定してください。
統計関数 minmaxsummeanmajorityminoritystdmedianrangevariety 統計関数は 2 つ以上指定してください。

algebraExpr の例

例 1:バンドの線形結合 (単一出力バンド)

単一バンドのラスターを生成します。この式は、raster[0] のバンド 0 と raster[1] のバンド 0 およびバンド 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 バンドのラスターを生成します。各 JSON オブジェクトは、それぞれ 3 つのソースバンドの最小値、最大値、平均値の 1 つの出力バンドを生成します。

[
    {
        "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 パラメーター

storageOption は、以下のフィールドを持つ JSON オブジェクトを受け入れます。すべてのフィールドはオプションであり、デフォルトではソースラスターオブジェクトと同じ設定になります。

フィールド デフォルト 説明
chunking ブール値 ソースと同じ 出力をチャンクとして保存するかどうかを指定します。
chunkdim 文字列 ソースと同じ チャンクのディメンションです。chunkingtrue の場合にのみ有効です。
chunktable 文字列 '' (空) チャンクテーブルの名前です。デフォルトでは、ランダムな名前の一時テーブルが作成され、現在のセッションでのみ有効です。名前を指定すると、出力ラスターオブジェクトが永続化されます。
compression 文字列 ソースと同じ 圧縮形式です。有効な値は NoneJPEGZlibPNGLZOLZ4 です。
quality 整数 ソースと同じ 画質です。compressionJPEG の場合にのみ有効です。
interleaving 文字列 ソースと同じ インターリーブ形式です。有効な値は、bip (ピクセル単位のバンドインターリーブ、BIP)、bil (ライン単位のバンドインターリーブ、BIL)、bsq (バンドシーケンシャル、BSQ) です。
endian 文字列 ソースと同じ バイトオーダーです。NDR はリトルエンディアン、XDR はビッグエンディアンです。

次の例では、2 つのテーブルからラスターを読み取り、バンドの線形結合式を適用し、結果を永続的なチャンクテーブルに書き込みます。

-- 出力ラスターオブジェクトを保持するための永続的なチャンクテーブルを作成します。
CREATE TABLE rast_mapalgebra_result(id integer, rast raster);

-- t1 と t2 からラスターをマージし、結果を永続的なチャンクテーブルに書き込みます。
-- 式: raster[0] の band[0] + 0.5 × raster[1] の band[0] − raster[1] の band[1]
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"}'  -- 出力を永続的なチャンクテーブル "algebra_rbt" に保存します
);