名前

ST_Clip — 入力ジオメトリで切り取ったラスタを返します。バンドが指定されていない場合には、全てのバンドが返されます。cropが指定されていない場合はTRUEと仮定され、出力ラスタをクロップします。

概要

raster ST_Clip(raster rast, geometry geom, double precision[] nodataval=NULL, boolean crop=true);

raster ST_Clip(raster rast, geometry geom, boolean crop);

raster ST_Clip(raster rast, integer band, geometry geom, boolean crop);

説明

入力ジオメトリgeomで切り取ったラスタを返します。バンドが指定されていない場合には、全てのバンドが返されます。

ST_Clipが返すラスタは、バンド毎に1つずつ必ず切り取った領域に適用するNODATA値を持ちます。NODATA値が渡されず、入力ラスタがNODATA値を持たない場合には、結果ラスタのNODATA値はST_MinPossibleValue(ST_BandPixelType(rast, band))に設定されます。配列におけるNODATA値の要素数がバンド数より小さい場いいには、配列の最後の要素が残りのバンドに適用されます。NODATA値の要素数がバンド数より多い場合には、超過分は無視されます。全てのNODATA値配列を受け付ける形式では、バンド毎に適用される単一値も受け付けます

cropが指定されていない場合はTRUEと仮定され、出力ラスタを geom範囲ととrast範囲とのインタセクトした範囲にクロップします。cropがFALSEに設定されている場合には、新しいラスタはrastと同じ範囲になります。

初出: 2.0.0

MssGISサイトMassGIS Aerial Orthosにあるマサチューセッツ空中写真データを使った例です。座標はメートル単位のマサチューセッツ州平面です。

例: 1バンドの切り取り

-- 空中写真タイルの1番バンドを
-- 中心から20メートルのバッファで切り取ります
SELECT ST_Clip(rast, 1,
		ST_Buffer(ST_Centroid(ST_Envelope(rast)),20)
	) from aerials.boston
WHERE rid = 4;
--ラスタの最終的なピクセル範囲についての
--   クロップの効果のデモンストレーション
-- crop = trueの場合に、どのように最終的な範囲がジオメトリに切り取られるか
--   をみます
SELECT ST_XMax(ST_Envelope(ST_Clip(rast, 1, clipper, true))) As xmax_w_trim,
	ST_XMax(clipper) As xmax_clipper,
	ST_XMax(ST_Envelope(ST_Clip(rast, 1, clipper, false))) As xmax_wo_trim,
	ST_XMax(ST_Envelope(rast)) As xmax_rast_orig
FROM (SELECT rast, ST_Buffer(ST_Centroid(ST_Envelope(rast)),6) As clipper
	FROM aerials.boston
WHERE rid = 6) As foo;

   xmax_w_trim    |   xmax_clipper   |   xmax_wo_trim   |  xmax_rast_orig
------------------+------------------+------------------+------------------
 230657.436173996 | 230657.436173996 | 230666.436173996 | 230666.436173996

切り取り前の完全なラスタタイル

切り取り後

例: クロップがなく他のバンドは切り取らず1バンドを切り取る

-- 前の例と同じですが、
-- ST_AddBandは全てのバンドが同じピクセル範囲を持っている必要があるので
-- ST_AddBandを使えるようにするためcropをFALSEに設定しなければなりません
SELECT ST_AddBand(ST_Clip(rast, 1,
		ST_Buffer(ST_Centroid(ST_Envelope(rast)),20),false
	), ARRAY[ST_Band(rast,2),ST_Band(rast,3)] ) from aerials.boston
WHERE rid = 6;

切り取り前の完全なラスタタイル

切り取り後 - シュールですね

例: 全バンドの切り取り

-- 空中写真タイルの全バンドを20メートルバッファで切り取ります
-- 違いは、全バンドの切り取りのため
--   切り取り対象のバンドを指定しないことだけです
SELECT ST_Clip(rast,
	  ST_Buffer(ST_Centroid(ST_Envelope(rast)), 20), 
	  false
	) from aerials.boston
WHERE rid = 4;

切り取り前の完全なラスタタイル

切り取り後

関連情報

ST_AddBand, ST_Intersection