代数計算言語のピクセルレベルの代数式を適用して、複数のラスターオブジェクトを単一のラスターオブジェクトにマージします。
構文
raster ST_MapAlgebra(raster[] rasters,
cstring algebraExpr DEFAULT NULL,
cstring storageOption DEFAULT '')
パラメーター
| パラメーター | 説明 |
|---|---|
rasters |
処理対象のソースラスターオブジェクトの配列です。 |
algebraExpr |
適用する代数式を定義する JSON 配列です。配列内の各 JSON オブジェクトは、1 つの出力バンドを生成します。 |
storageOption |
出力ラスターオブジェクトの保存方法を制御する JSON オブジェクトです。 |
この関数では、すべてのソースラスターオブジェクトの幅と高さの測定単位が同じであることのみが要求されます。空間参照系や解像度の検証は行いません。ソースラスターの単位が異なる場合は、まず ST_Transform、ST_Resize、ST_Clip を使用して正規化してください。
algebraExpr パラメーター
algebraExpr は JSON 配列を受け入れます。配列内の各オブジェクトは、1 つの出力バンドを定義します。
式のキーワード
式の中でピクセル値と位置を参照するには、次のキーワードを使用します。
| キーワード | 説明 |
|---|---|
[r, b] |
ラスター r のバンド b におけるピクセル値です。r と b はどちらも 0 から始まるインデックス (0 から n−1) です。 |
x |
現在のピクセルの 0 から始まる列インデックスです。 |
y |
現在のピクセルの 0 から始まる行インデックスです。 |
JSON フィールド
| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
algebraExpr |
文字列 | — | 各ピクセルに対して評価する代数式です。 |
nodata |
ブール値 | false |
nodata 値を持つピクセルの処理方法を制御します。true に設定すると、これらのピクセルはスキップされ、その出力値は nodataValue に設定されます。false に設定すると、計算に含められます。 |
nodataValue |
float8 | 0 |
nodata が true であるためにスキップされた出力ピクセルに書き込まれる値です。 |
サポートされている演算子と関数
| 種類 | 演算子 / 関数 | 注意 |
|---|---|---|
| 算術 | +、-、*、/、% (剰余)、** (べき乗) |
|
| ビット単位 | <<、>>、&、|、^ |
|
| 論理 | <、>、==、!=、<=、>=、&&、||、! |
|
| 数学関数 | 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] のバンド 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 |
文字列 | ソースと同じ | チャンクのディメンションです。chunking が true の場合にのみ有効です。 |
chunktable |
文字列 | '' (空) |
チャンクテーブルの名前です。デフォルトでは、ランダムな名前の一時テーブルが作成され、現在のセッションでのみ有効です。名前を指定すると、出力ラスターオブジェクトが永続化されます。 |
compression |
文字列 | ソースと同じ | 圧縮形式です。有効な値は None、JPEG、Zlib、PNG、LZO、LZ4 です。 |
quality |
整数 | ソースと同じ | 画質です。compression が JPEG の場合にのみ有効です。 |
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" に保存します
);