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);
指定した位置(index)に、指定したタイプの、指定した初期値を持ち、指定したNODATA値を持つ、追加された新しいバンドを持つラスタを返します。インデックス位置を指定していない場合には、バンドは末尾に追加されます。frombandが指定されない場合には、1番バンドと仮定します。ピクセルタイプはST_BandPixelTypeで指定されているピクセルタイプの文字列表現です。既存のインデックスが指定された場合には、バンドのインデックス >= 指定インデックス となるバンドのインデックスは1ずつ足されます。初期値としてピクセルタイプの最大値を超えた値が指定された場合には、初期値にピクセルタイプの許容最大値が指定されます。
addbandargの配列を取る版 (一つ目の版)では、指定したaddbandargのインデックス値は、addbandargで示されるバンドがラスタに追加される時のラスタとの相対値です。下の複数バンドの例を参照してください。
ラスタの配列を取る版 (五つ目の版)では、torastがNULLなら、配列内のラスタごとのfrombandのバンドが新しいラスタに集約されます。
outdbfileを取る版 (六つ目と七つ目の版)では、値はラスタファイルへのフルパスを含まなければなりません。また、ファイルはPostgreSQLサーバプロセスがアクセス可能でなければなりません。
Enhanced: 2.1.0 addbandarg対応が追加されました。
Enhanced: 2.1.0 out-dbバンドが追加されました。
Single New Band.
この例では8ビット符号なし整数のバンドを初期値200で追加します。
UPDATE dummy_rast
SET rast = ST_AddBand(rast, '8BUI'::text, 200)
WHERE rid = 1;
100x100単位で、左上の座標値を原点とした空のラスターを生成し、2バンド (1番バンドは 0/1の2値で、2番バンドは0-15の値が利用可能)を追加します。addbandargsを使っています。
Output metadata for the raster bands to verify they are correct.
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;
width | height | numbands -------+--------+---------- 100 | 100 | 2
Multiple New Bands.
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 | outdbbandnum | filesize | filetimestamp
---------+-----------+-------------+---------+------+--------------+----------+---------------
1 | 8BUI | 0 | f | null | null | null | null
2 | 32BF | -1 | f | null | null | null | null
3 | 32BUI | 12 | f | null | null | null | null
4 | 16BUI | 2 | f | null | null | null | null
複数ラスターのようなテーブルの1番バンドを単一ラスターに集約します。test_typesと同じ数のバンドがあり、ネズミと同じ数の行 (新ラスター)があります。ORDER BY test_type節は集約の ORDER BY対応に依っています。結果ラスターはtest_typeごとにバンドを持ちます。マウス好きの方へ: この例ではマウスは傷つきませんでした。
SELECT
mouse,
ST_AddBand(NULL, array_agg(rast ORDER BY test_type), 1) As rast
FROM mice_studies
GROUP BY mouse;
New Out-db band.
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