ST_Transform は、基になる座標を変換し、画素値をリサンプリングすることで、ラスターオブジェクトをある空間参照系 (SRS) から別の空間参照系に再投影します。
構文
raster ST_Transform(raster rast,
integer outSrid,
cstring processExpr default '',
cstring storageOption default '')パラメーター
| パラメーター | 説明 |
|---|---|
rast | 再投影するソースラスターオブジェクト。 |
outSrid | spatial_ref_sysターゲット空間参照系の SRID。`spatial_ref_sys` テーブルの有効な SRID である必要があります。 |
processExpr | ピクセルのリサンプリングと nodata 処理をコントロールする JSON 文字列。 |
storageOption | 出力ラスターの格納方法をコントロールする JSON 文字列。 |
processExpr フィールド
| フィールド | 型 | デフォルト値 | 説明 |
|---|---|---|---|
resample | テキスト | Near | リサンプリングアルゴリズム。有効な値: Near、Average、Cubic、Bilinear。 |
nodata | ブール値 | false | ソースラスタ内の nodata 値を有効な値として扱うかどうかを指定します。true の場合、nodata 値を持つピクセルはリサンプリングされません。false の場合、nodata 値を持つピクセルもリサンプリングされます。 |
nodataValue | float8 または float8[] | NULL | 出力ラスタのバンドに割り当てる nodata 値。すべてのバンドに同一の値を適用する場合は単一の値を指定し、バンドごとに異なる値を適用する場合は、各バンドに対応する値を含む配列を指定します。 |
警告
nodata および nodataValue を注意深く設定してください。ソース ラスタに nodata 値を持つピクセルがない場合は、nodata を false に設定し、nodataValue を省略します。そうしないと、イメージ アーティファクトが発生する可能性があります。
storageOption フィールド
| フィールド | 型 | デフォルト値 | 説明 |
|---|---|---|---|
chunking | ブール値 | ソースと同一 | 出力ラスタをチャンク単位で保存するかどうかを指定します。 |
chunkdim | 文字列 | ソースと同一 | チャンクのディメンション。 chunking が true の場合にのみ有効です。 |
chunktable | 文字列 | ''(空文字列) | 永続的なストレージ用のチャンクテーブル名。空または NULL の場合、ランダムな名前の一時チャンクテーブルが作成され、セッション終了時に削除されます。出力ラスタを永続化するには、テーブル名を指定してください。 |
compression | 文字列 | ソースと同一 | 圧縮フォーマット。有効な値: None、JPEG、Zlib、PNG、LZO、LZ4。 |
quality | 整数 | ソースと同一 | 画像品質。JPEG フォーマットでのみ有効です。 |
interleaving | 文字列 | ソースと同一 | インタリーブ方式。有効な値: bip(ピクセル単位バンドインタリーブ:BIP)、bil(ライン単位バンドインタリーブ:BIL)、bsq(バンド逐次:BSQ)。 |
endian | 文字列 | ソースと同一 | バイトオーダー。NDR はリトルエンディアン、XDR はビッグエンディアンを表します。 |
例
以下の例では、ソーステーブルにロードされた GeoTIFF ファイルを使用します。
CREATE TABLE IF NOT EXISTS datasource_table (id integer, rast raster);
INSERT INTO datasource_table VALUES (
1,
ST_ImportFrom('rbt', '$(RAST_DATA_DIR)/512_512_1_bsq_8u_geo.tif', '{}')
);永続的なチャンクテーブルへの出力の永続化
再投影されたラスターをセッションをまたいで保存するには、 chunktable 名を指定します。
nodata なし:
CREATE TABLE rat_transform_result (id integer, rast raster);
INSERT INTO rat_transform_result (id, rast)
SELECT
10,
ST_Transform(
rast,
32652,
'{"resample":"Near","nodata":false}',
'{"chunking":true,"chunkdim":"(256,256,1)","compression":"none","interleaving":"bsq","chunktable":"result_rbt"}'
)
FROM datasource_table
WHERE id = 1;単一の nodata 値あり (nodata 値を持つピクセルはリサンプリングされます):
INSERT INTO rat_transform_result (id, rast)
SELECT
11,
ST_Transform(
rast,
32652,
'{"resample":"Near","nodata":true,"nodatavalue":255}',
'{"chunking":true,"chunkdim":"(256,256,1)","compression":"none","interleaving":"bsq","chunktable":"result_rbt"}'
)
FROM datasource_table
WHERE id = 1;バンドごとの nodata 値あり:
INSERT INTO rat_transform_result (id, rast)
SELECT
12,
ST_Transform(
rast,
32652,
'{"resample":"Near","nodata":false,"nodatavalue":[255,255,255]}',
'{"chunking":true,"chunkdim":"(256,256,1)","compression":"none","interleaving":"bsq","chunktable":"result_rbt"}'
)
FROM datasource_table
WHERE id = 1;一時的なチャンクテーブルへの出力の格納
chunktable を省略すると、出力がセッションスコープの一時テーブルに書き込まれます。セッションが終了するとテーブルは削除されるため、中間計算にのみこのパターンを使用してください。
CREATE TEMP TABLE rat_transform_result_temp (id integer, rast raster);
INSERT INTO rat_transform_result_temp (id, rast)
SELECT
1,
ST_Transform(
rast,
32652,
'{"resample":"Near","nodata":false,"nodataValue":[255,255,255]}',
'{"chunking":true,"chunkdim":"(256,256,1)","compression":"none","interleaving":"bsq"}'
)
FROM datasource_table
WHERE id = 1;