名前

ST_AddBand — 与えられたタイプで、与えられた初期値にした新しいバンドを、与えられたインデクス位置に付けたラスタを返します。インデクス位置を指定していない場合には、バンドは末尾に追加されます。

概要

raster ST_AddBand(raster rast, text pixeltype, double precision initialvalue=0, double precision nodataval=NULL);

raster ST_AddBand(raster rast, integer index, text pixeltype, double precision initialvalue=0, double precision nodataval=NULL);

raster ST_AddBand(raster torast, raster fromrast, integer fromband=1, integer torastindex=at_end);

raster ST_AddBand(raster torast, raster[] fromrasts, integer fromband=1);

説明

与えられたタイプで、与えられた初期値にし、与えられたnodata値を付した新しいバンドを追加したラスタを返します。インデクス位置を指定していない場合には、バンドは末尾に追加されます。 frombandが指定されない場合には、1番バンドと仮定します。ピクセルタイプはST_BandPixelTypeで指定されているピクセルタイプの文字列表現です。 既存のインデクスが指定された場合には、以降のバンドは全て1以上足されたインデクスになります。初期値としてピクセルタイプの最大値を超えた値が指定された場合には、初期値にピクセルタイプの許容最大値が指定されます。ふたつめの版はfromrastラスタからtorasttorastindexの位置にfrombandを追加します。

バンド配列を取る版については、torastがNULLの場合には、バンド配列の要素ごとのfrombandのバンドを新しいラスタに集めます。

例: 単一のバンド追加版

-- 8ビット符号無し整数で初期値200のバンドを追加します
UPDATE dummy_rast
    SET rast = ST_AddBand(rast,'8BUI',200)  
WHERE rid = 1;
					
-- 100x100単位で左上を0,0としたラスタを生成して、2バンドを追加します
-- (1番バンドは0/1の真偽ビットスイッチで、2番バンドは0-15の値を取ります)
INSERT INTO dummy_rast(rid,rast)
    VALUES(10, ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(100, 100, 0, 0, 1, -1, 0, 0, 0), '1BB'), '4BUI') );
    
-- output meta data of raster bands to verify all is right --
SELECT  (bmd).*
FROM (SELECT ST_BandMetaData(rast,generate_series(1,2)) As bmd 
    FROM dummy_rast WHERE rid = 10) AS foo;
 --result --   
 pixeltype | nodatavalue | isoutdb | path
-----------+----------------+-------------+---------+------
 1BB       |             | f       |
 4BUI      |             | f       |
 
 
-- ラスタのメタデータを出力します -
SELECT  (rmd).width, (rmd).height, (rmd).numbands
FROM (SELECT ST_MetaData(rast) As rmd 
    FROM dummy_rast WHERE rid = 10) AS foo;
-- 結果 --
 upperleftx | upperlefty | width | height | scalex | scaley | skewx | skewy | srid | numbands
------------+------------+-------+--------+------------+------------+-------+-------+------+----------
          0 |          0 |   100 |    100 |      1 |     -1 |     0 |     0 |   0 |        2
					

例: 複数バンド版

-- ラスタのようなテーブルの1番バンドを集計して単一ラスタに入れます。
-- test_typeと同じ数のバンドを持つ、マウスの数と同じ行(新しいラスタ)になります。
-- ご注意: ORDER BY test_typeは、PostgreSQL 9.0以上でのみ対応します
--   8.4以下では副問い合わせ内の並び順になります(保証もされません)
-- 結果ラスタはtest_typeのアルファベット順でtest_typeごとのバンドを持ちます
-- マウス好きの方へ: この例ではマウスは傷つきませんでした
SELECT mouse, ST_AddBand(NULL, array_agg(rast ORDER BY test_type), 1 ) As rast 
	FROM mice_studies
			GROUP BY mouse; 	
					

関連情報

ST_BandMetaData, ST_BandPixelType, ST_MakeEmptyRaster, ST_MetaData, ST_NumBands, ST_Reclass