ST_MapAlgebra は、代数コンピューティング言語で記述された代数式を適用することで、複数のラスターオブジェクトを単一のラスターオブジェクトにマージします。
構文
raster ST_MapAlgebra(raster[] rasters,
cstring algebraExpr default NULL,
cstring storageoption default '')パラメーター
| パラメーター | 説明 |
|---|---|
rasters | 変換する入力ラスターオブジェクト。 |
algebraExpr | 適用する代数式を定義する JSON 文字列。 詳細については、「algebraExpr パラメーター」をご参照ください。 |
storageOption | 出力ラスターのストレージ方法を制御する JSON 文字列。 詳細については、「storageOption パラメーター」をご参照ください。 |
ST_MapAlgebra は、入力ラスターの長さと幅の測定単位が同じであることのみを要求します。 空間参照系や解像度はチェックしません。 ご利用のラスターの単位が異なる場合は、まず ST_Transform、ST_Resize、および ST_Clip を使用してそれらを揃える必要があります。
algebraExpr パラメーター
algebraExpr パラメーターは JSON 配列を受け取ります。 配列内の各オブジェクトは、次のフィールドを使用して 1 つの出力バンドを定義します。
フィールド
| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
algebraExpr | String | — | このバンドの代数式。 |
nodata | Boolean | false | nodata ピクセルの処理方法を制御します。 true: nodata ピクセルは有効な値として扱われ、変換されません。 false: nodata ピクセルは無効な値として扱われ、変換されます。 |
nodataValue | float8 | 0 | 出力ラスターに書き込まれる nodata 値。 |
式のキーワード
代数式で次のキーワードを使用してピクセル値を参照します:
[r, b]— ラスターインデックスrとバンドインデックスb(両方とも 0 から始まる、0 から n-1) のピクセル値。x— 現在のピクセルの 0 から始まる列インデックス。y— 現在のピクセルの 0 から始まる行インデックス。
サポートされている操作
| 型 | 演算子と関数 | 注意 |
|---|---|---|
| 算術 | +、 -、 *、 /、 % (剰余)、 ** (べき乗) | — |
| ビット単位 | <<、 >>、 &、 |、 ^ | — |
| 論理 | <、 >、 ==、 !=、 <=、 >=、 &&、 ||、 ! | — |
| 数学関数 | abs、 sqrt、 exp、 log、 ln、 sin、 cos、 tan、 sinh、 cosh、 tanh、 arcsin、 arccos、 arctan、 ceil、 floor、 round | 式ごとに 1 つの数学関数のみ。 |
| 統計関数 | min、 max、 sum、 mean、 majority、 minority、 std、 median、 range、 variety | 2 つ以上の引数が必要です。 |
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 パラメーター
| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
chunking | Boolean | 入力ラスターと同じ | 出力ラスターをチャンクとして保存するかどうか。 |
chunkdim | String | 入力ラスターと同じ | チャンクディメンション。 chunking が true の場合にのみ有効です。 |
chunktable | String | '' (空の文字列) | チャンクテーブルの名前。 デフォルトでは、ランダムな名前の一時テーブルが作成され、現在のセッションでのみ有効です。 出力を永続的に保存するには、名前を指定します。 |
compression | String | 入力ラスターと同じ | 圧縮形式。 有効な値: None、 JPEG、 Zlib、 PNG、 LZO、 LZ4。 |
quality | Integer | 入力ラスターと同じ | 画質。 JPEG 形式でのみ有効です。 |
interleaving | String | 入力ラスターと同じ | インターリーブタイプ。 有効な値: bip (バンドインターリーブバイピクセル、BIP)、 bil (バンドインターリーブバイライン、BIL)、 bsq (バンドシーケンシャル、BSQ)。 |
endian | String | 入力ラスターと同じ | バイトオーダー。 有効な値: 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"}'
);