このトピックでは、ST_MapAlgebra関数について説明します。 この関数は、代数計算言語に準拠した代数式を使用して、複数の元のラスターオブジェクトを1つのラスターオブジェクトに変換します。
構文
raster ST_MapAlgebra(raster[] rasters ,
cstring algebraExpr default NULL,
cstring storageoption default '')パラメーター
パラメーター | 説明 |
rasters | 変換する元のラスタオブジェクト。 |
algebraExpr | 使用する代数式を指定するJSON文字列。 |
storageOption | 新しいラスターオブジェクトを格納する方法を指定するJSON文字列。 |
システムは、元のラスタオブジェクトの長さおよび幅が同じ測定単位内にあることだけを必要とする。 それらの空間参照システムまたは解像度はチェックされません。 元のラスターオブジェクトの長さと幅が異なる測定単位である場合、ST_Transform、ST_Resize、およびST_Clip関数を使用して、同じ単位に変換できます。
algebraExprパラメーターで指定されたJSON文字列の各子JSONオブジェクトは、代数式に指定されたフィールドを表します。 次の表に、これらのフィールドを示します。
フィールド | 説明 | データ型 | デフォルト値 | 設定ノート |
algebraExpr | 使用する代数式。 | String | N/A | N/A |
odata | nodata値が有効かどうかを指定します。 | Boolean | false |
|
nodataValue | 新しいラスタオブジェクトに返されるnodata値。 | float8 | 0 | N/A |
algebraExprフィールドで指定された代数式には、次のキーワードが含まれます。
[r, b]
r: rastersパラメーターで指定された配列内の新しいラスターオブジェクトのIDを示します。 フォーマット: 0-n-1。
b: 新しいラスターオブジェクトのバンド番号を示します。 フォーマット: 0-n-1。
x
指定されたピクセルが存在する列のシーケンス番号。
y
指定されたピクセルが存在する行のシーケンス番号。
次の表は、代数式に組み込むことができる操作の一覧です。
データ型 | オペレータか機能 | 補足 |
演算子 |
| N/A |
ビットごとの操作 |
| N/A |
論理操作 |
| N/A |
関数の操作 |
| 関数に対して指定できる操作は1つだけです。 |
統計関数 |
| 2つ以上の統計関数を指定する必要があります。 |
例 1
元のラスターオブジェクトを、バンドが1つしかない新しいラスターオブジェクトに変換します。 返される結果は、raster[0]band[0] + raster[1]band[0] * raster[1]band[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つのバンドを持つ新しいラスターオブジェクトに変換します。 各バンドは、一意の式を使用して変換されます。
[ { "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 | Same as the original raster object | N/A |
chunkdim | 新しいラスタオブジェクトをチャンクとして格納するために使用されるディメンション。 | String | Same as the original raster object | このフィールドは、チャンキングフィールドがtrueに設定されている場合にのみ有効です。 |
chunktable | チャンクテーブルの名前です。 | String | Null string ('') | デフォルトでは、データを格納するためにランダムな名前の一時チャンクテーブルが生成されます。 この一時チャンクテーブルは、現在のセッションでのみ有効です。 新しいラスターオブジェクトを永続的に保存するには、chunktableフィールドに永続チャンクテーブルを作成するように指定する必要があります。 |
compression | 画像圧縮に使用される形式。 | String | Same as the original raster object | None、JPEG、Zlib、PNG、LZO、LZ4の6つの圧縮形式がサポートされています。 |
quality | 新しいラスターオブジェクトの画質。 | Integer | Same as the original raster object | このフィールドはJPEG形式でのみ有効です。 |
interleaving | 新しいラスタオブジェクトのインターリーブタイプ。 | String | Same as the original raster object | 有効な値:
|
endian | 新しいラスタオブジェクトのエンディアン形式。 | String | Same as the original raster object | 有効な値:
|
例
-- Create a permanent chunk table.
CREATE TABLE rast_mapalgebra_result(id integer, rast raster);
-- Insert data into a chunk table.
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"}'
);