ST_AddBand — Retorna um raster com nova banda(s) do tipo dado adicionado com o valor inicial com a localização do índice. Se nenhum índice for especificado, a banda é adicionada ao final.
(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)
;
Retorna um raster com uma nova banda adicionada na posição (índice), do dado tipo, do valor inicial, e do dado valor nodata. Se nenhu índice for especificado, a banda é adicionada ao final. Se nenhum fromband
for especificado, banda 1 é assumida. O tipo pixel é uma representação de string de um dos tipos de pixel especificados em ST_BandPixelType. Se um índice existente for especificado todas as bandas subsequentes
>= aquele índice é incrementado por 1. Se um valor inicial maior que o máximo do tipo pixel for especificado, então ele é estabelecido como o maior valor permitido pelo tipo pixel.
Para a variante que pega um arranjo de addbandarg (Variante 1), um valor de índice addbandarg's específico é relativo ao raster no mesmo tempo que a banda é descrita por aquele addbandarg's está sendo adicionada ao raster. Veja o exemplo abaixo.
Para a variante que pega um arranjo de rasters (Variante 5), se torast
é NULO então a fromband
banda de cada raster no arranjo está acumulada dentro de um novo raster.
Para as variantes que pegam outdbfile
(Variantes 6 e 7), o valor deve incluir o caminho completo para o arquivo raster. O arquivo deve ser acessível também pata o processo do servidor postgres.
Melhorias: 2.1.0 suporte para addbandarg adicionado.
Melhorias: 2.1.0 suporte para novas bandas out-db adicionado.
-- 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
ST_BandMetaData, ST_BandPixelType, ST_MakeEmptyRaster, ST_MetaData, ST_NumBands, ST_Reclass