名前

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

概要

(1) raster ST_AddBand(raster rast, addbandarg[] addbandargset);

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

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

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

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

(6) raster ST_AddBand(raster rast, integer index, text outdbfile, integer[] outdbindex, double precision nodataval=NULL);

(7) raster ST_AddBand(raster rast, text outdbfile, integer[] outdbindex, integer index=at_end, double precision nodataval=NULL);

説明

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

addbandargの配列を取る版(ひとつめの版)では、指定したaddbandargのインデクス値は、addbandargで示されるバンドがラスタに追加される時のラスタとの相対値です。下の複数バンドの例を参照してください。

ラスタの配列を取る版(いつつめの版)では、torastがNULLなら、配列内のラスタごとのfrombandのバンドが新しいラスタに集約されます。

outdbfileを取る版(むっつめとななつめの版)では、値はラスタファイルへのフルパスを含まなければなりません。また、ファイルはPostgreSQLサーバプロセスがアクセス可能でなければなりません。

機能強化: 2.1.0では、addbandarg対応が追加されました。

機能強化: 2.1.0では、out-dbバンドが追加されました。

例: 単一バンド

-- 8ビット符号無し整数で初期値200のバンドを追加します
UPDATE dummy_rast
    SET rast = ST_AddBand(rast,'8BUI'::text,200)  
WHERE rid = 1;
                                
-- 100x100単位で左上を0,0としたラスタを生成して、2バンドを追加します
-- (1番バンドは0/1の真偽ビットスイッチで、2番バンドは0-15の値を取ります)
-- addbandargsを使用しています
INSERT INTO dummy_rast(rid,rast)
    VALUES(10, ST_AddBand(ST_MakeEmptyRaster(100, 100, 0, 0, 1, -1, 0, 0, 0), 
        ARRAY[
                ROW(1, '1BB'::text, 0, NULL),
                ROW(2, '4BUI'::text, 0, NULL)
                        ]::addbandarg[]
     )
    );
    
-- うまくいったかを確認するためにラスタバンドのメタデータを出力 --
SELECT  (bmd).*
FROM (SELECT ST_BandMetaData(rast,generate_series(1,2)) As bmd 
    FROM dummy_rast WHERE rid = 10) AS foo;
-- 結果 --   
 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
                                

例: 複数バンド

SELECT
        *
FROM ST_BandMetadata(
        ST_AddBand(
                ST_MakeEmptyRaster(10, 10, 0, 0, 1, -1, 0, 0, 0),
                ARRAY[
                        ROW(NULL, '8BUI', 255, 0),
                        ROW(NULL, '16BUI', 1, 2),
                        ROW(2, '32BUI', 100, 12),
                        ROW(2, '32BF', 3.14, -1)
                ]::addbandarg[]
        ),
        ARRAY[]::integer[]
);

 bandnum | pixeltype | nodatavalue | isoutdb | path 
---------+-----------+-------------+---------+------
       1 | 8BUI      |           0 | f       | 
       2 | 32BF      |          -1 | f       | 
       3 | 32BUI     |          12 | f       | 
       4 | 16BUI     |           2 | f       | 
                                
-- 複数のラスタのようなテーブルの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;
                                

例: データベース外のバンド

SELECT
        *
FROM ST_BandMetadata(
        ST_AddBand(
                ST_MakeEmptyRaster(10, 10, 0, 0, 1, -1, 0, 0, 0),
                '/home/raster/mytestraster.tif'::text, NULL::int[]
        ),
        ARRAY[]::integer[]
);

 bandnum | pixeltype | nodatavalue | isoutdb | path 
---------+-----------+-------------+---------+------
       1 | 8BUI      |             | t       | /home/raster/mytestraster.tif
       2 | 8BUI      |             | t       | /home/raster/mytestraster.tif
       3 | 8BUI      |             | t       | /home/raster/mytestraster.tif
                                

関連情報

ST_BandMetaData, ST_BandPixelType, ST_MakeEmptyRaster, ST_MetaData, ST_NumBands, ST_Reclass