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。如果指定的初始值大于像素类型的最大值,则将初始值设置为像素类型允许的最高值。
对于接受数组 添加带宽参数 (变体1),特定Addband arg的索引值相对于该addband arg所描述的波段被添加到栅格时的栅格。请参见下面的多个新标注栏示例。
对于接受栅格数组的变量(变量5),如果
torast
为空,则
fromband
将阵列中每个栅格的频带累加到新的栅格中。
对于那些需要
outdbfile
(变体6和7),则该值必须包括栅格文件的完整路径。Postgres服务器进程还必须可以访问该文件。
增强:增加了2.1.0对addband arg的支持。
增强:增加了2.1.0对新的Out-db频段的支持。
-- Add another band of type 8 bit unsigned integer with pixels initialized to 200
UPDATE dummy_rast
SET rast = ST_AddBand(rast,'8BUI'::text,200)
WHERE rid = 1;
-- Create an empty raster 100x100 units, with upper left right at 0, add 2 bands (band 1 is 0/1 boolean bit switch, band2 allows values 0-15)
-- uses 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[]
)
);
-- 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 |
-- output meta data of raster -
SELECT (rmd).width, (rmd).height, (rmd).numbands
FROM (SELECT ST_MetaData(rast) As rmd
FROM dummy_rast WHERE rid = 10) AS foo;
-- result --
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 |
-- Aggregate the 1st band of a table of like rasters into a single raster
-- with as many bands as there are test_types and as many rows (new rasters) as there are mice
-- NOTE: The ORDER BY test_type is only supported in PostgreSQL 9.0+
-- for 8.4 and below it usually works to order your data in a subselect (but not guaranteed)
-- The resulting raster will have a band for each test_type alphabetical by test_type
-- For mouse lovers: No mice were harmed in this exercise
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