ラスターオブジェクト内の画素値を、分類式に基づいて元の値から新しい値へ再分類します。
返されるラスターは、入力と同一の空間参照系および解像度を持ちます。出力バンド数は、reclassexpr パラメーターによって決定されます。
構文
raster ST_Reclassify(raster raster_obj,
cstring reclassexpr DEFAULT NULL,
cstring storageOption DEFAULT '')パラメーター
| パラメーター | 説明 |
|---|---|
raster_obj | 再分類対象のラスターオブジェクトです。 |
reclassexpr | 各バンドの分類ルールを定義する JSON 文字列配列です。 |
storageOption | 返されるラスターのストレージフォーマットを設定する JSON 文字列です。 |
reclassexpr
reclassexpr 配列の各要素は、1 つのバンドに対する再分類ルールを指定する JSON オブジェクトです。
| パラメーター | 型 | デフォルト | 説明 |
|---|---|---|---|
band | integer | — | 再分類対象のバンドインデックスです。バンドインデックスは 0 から始まります。 |
remap | object | — | 画素値のマッピングルールです。詳細については、「remap」をご参照ください。 |
nodata | boolean | false | 出力において nodata ピクセルを nodata として扱うかどうかを指定します。true の場合、nodata 値を持つピクセルは引き続き nodata として処理されます。false の場合、nodata でない値は通常の数値として計算されます。 |
nodataValue | float8 | 0 | 出力に割り当てる nodata 値です。 |
remap
remap オブジェクトは、元の画素値の範囲を新しい画素値にマッピングします。各キーと値のペアが 1 つのマッピングルールを定義します。
キーの形式 — キーは、区間表記法を用いて入力画素値の範囲を指定します:
| 記号 | 意味 |
|---|---|
( | より大きい(左境界が開いている) |
) | より小さい(右境界が開いている) |
[ | 以上(左境界が閉じている) |
] | 以下(右境界が閉じている) |
デフォルトの境界タイプは (](左境界が開き、右境界が閉じている)です。
キー内の境界値はカンマで区切ります。たとえば、(0,100,200] は 2 つの区間:(0, 100] および (100, 200] を定義します。
値の形式 — 値は、カンマで区切られた出力画素値を指定します。
サポートされるマッピング手法は以下の 3 種類です:
| 手法 | 説明 | 例 |
|---|---|---|
| 範囲→範囲 | 入力と出力の値の数が同じです。各入力値は対応する出力値に直接マッピングされます。 | "300,400,500":"80,90,100" |
| 範囲→値 | 入力の値の数は出力より 1 つ多いです。連続する入力値の間の各区間が、1 つの出力値にマッピングされます。 | "(300,400,500]":"80,90" |
| 値→値 | 入力と出力の値の数はそれぞれ 1 つです。単一の画素値が単一の新しい値にマッピングされます。 | "10":"1" |
制約事項:
定義されたすべての範囲外の画素は、nodata として扱われます。
範囲は重複してはなりません(1 つの画素値が複数の範囲に属してはいけません)。
remap の使用例
例 1 — 単一バンド、範囲→値マッピング
バンド 0 を再分類します:
(0, 100] → 20
(100, 200] → 50
その他のすべての値 → nodata
[
{
"band": 0,
"remap": {
"(0,100,200]": "20,50"
}
}
]例 2 — 複数の範囲
(200, 300] および定義済み範囲外のギャップに該当する画素は、nodata として設定されます。
[
{
"band": 0,
"remap": {
"(0,100,200]": "20,50",
"(300,400,500]": "80,90,100"
}
}
]例 3 — マルチバンドおよび nodata 設定
バンド 0:
(0, 100] → 20
(100, 200] → 50
その他のすべての値 → 999(nodata として設定)
バンド 1:
(400, 600] → 20 から 90 への線形補間
(600, 800] → 90 から 130 への線形補間
その他のすべての値 → 0
[
{
"band": 0,
"remap": { "(0,100,200]": "20,50" },
"nodata": true,
"nodataValue": 999
},
{
"band": 1,
"remap": { "(400,600,800]": "20,90,130" },
"nodata": false,
"nodataValue": 0
}
]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(ビッグエンディアン)。 |
celltype | string | 入力と同じ | 出力ラスターの画素型です。 |
使用例
-- 結果を格納する永続テーブルを作成します。
CREATE TABLE rast_reclassify_result(id integer, rast raster);
-- 結果を格納する一時テーブルを作成します。
CREATE TEMP TABLE rast_reclassify_result_temp(id integer, rast raster);
-- バンド 0 を再分類し、結果を一時テーブルに格納します。
INSERT INTO rast_reclassify_result_temp(id, rast)
SELECT 1, ST_Reclassify(rast, '[{"band":0,"remap":{"(0,100,200]":"20,50"}}]')
FROM reclass_table;