ST_MapAlgebra (expression version) — Versão expressão - Retorna um raster de uma banda dado um ou mais rasters de entrada, índices de banda e uma ou mais expressões SQL de usuários específicos.
raster ST_MapAlgebra(raster rast, integer nband, text pixeltype, text expression, double precision nodataval=NULL);
raster ST_MapAlgebra(raster rast, text pixeltype, text expression, double precision nodataval=NULL);
raster ST_MapAlgebra(raster rast1, integer nband1, raster rast2, integer nband2, text expression, text pixeltype=NULL, text extenttype=INTERSECTION, text nodata1expr=NULL, text nodata2expr=NULL, double precision nodatanodataval=NULL);
raster ST_MapAlgebra(raster rast1, raster rast2, text expression, text pixeltype=NULL, text extenttype=INTERSECTION, text nodata1expr=NULL, text nodata2expr=NULL, double precision nodatanodataval=NULL);
Versão expressão - Retorna um raster de uma banda dado um ou mais rasters de entrada, índices de banda e uma ou mais expressões SQL de usuários específicos.
Disponibilidade: 2.1.0
Cria uma nova banda raster formada pela aplicação válida de uma operação algébrica PostgreSQL definida pela expression no raster de saída (rast). Se nband não for dado, a banda 1 é assumida. O novo raster terá a mesma georreferência, largura e altura que o raster original, mas só terá uma banda.
Se um pixeltype passar, então o novo raster terá a mesma banda dele. Se o tipo de pixel passar NULO, a nova banda raster terá o mesmo tipo de pixel que a banda de entrada rast.
Palavras-chave permitidas para expression
[rast] - Valor do pixel de interesse
[rast.val] - Valor do pixel de interesse
[rast.x] - coluna pixel 1-baseada do pixel de interesse
[rast.y] - linha pixel 1-baseada do pixel de interesse
Cria uma nova banda raster formada pela aplicação válida de uma operação algébrica PostgreSQL definida pela expression no raster de saída (rast). Se nband, band2 não forem especificados, a banda 1 é assumida. O raster resultante será alinhado (escala, inclinação e cantos de pixel) na grade definida pelo primeiro raster. O raster resultante terá de ser definido pelo primeiro raster. O raster resultante terá a extensão definida pelo parâmetro extenttype.
expression
Uma expressão algébrica PostgreSQL envolvendo dois rasters e funções/operadores PostgreSQL definidos que irão elucidar o valor do pixel quando eles se intersectarem. ex.: (([rast1] + [rast2])/2.0)::integer
pixeltype
O tipo de pixel resultante do raster de saída. Deve ser um listado em ST_BandPixelType, deixado de fora ou NULO. Se não passar ou for NULO, usa-se o tipo de pixel do primeiro raster.
extenttype
Controla a extensão do raster resultante
INTERSECTION - A extensão do novo raster é a interseção de dois rasters. Este é o padrão.
UNION - A extensão do novo raster é a união dos dois raster.
FIRST - A extensão do novo raster é a mesma da do primeiro raster.
SECOND - A extensão do novo raster é a mesma da do segundo raster.
nodata1expr
Uma expressão algébrica envolvendo somente rast2 ou uma constante que define o que retornar quando pixeis de rast1 são valores nodata e os pixeis rast2 têm valores.
nodata2expr
Uma expressão algébrica envolvendo somente rast1 ou uma constante que define o que retornar quando pixeis de rast2 são valores nodata e os pixeis rast1 têm valores.
nodatanodataval
Uma constante numérica para retornar quando os pixeis rast1 e raste2 forem ambos valores nodata.
Palavras-chave permitidas em expression, nodata1expr e nodata2expr
[rast1] - Valor do pixel de interesse do rast1
[rast1.val] - Valor do pixel de interesse do rast1
[rast1.x] - coluna pixel 1-based do pixel de interesse dorast1
[rast1.y] - linha pixel 1-based do pixel de interesse dorast1
[rast2] - Valor do pixel de interesse do rast2
[rast2.val] - Valor do pixel de interesse do rast2
[rast2.x] - coluna pixel 1-based do pixel de interesse dorast2
[rast2.y] - linha pixel 1-based do pixel de interesse dorast2
WITH foo AS (
SELECT ST_AddBand(ST_MakeEmptyRaster(10, 10, 0, 0, 1, 1, 0, 0, 0), '32BF'::text, 1, -1) AS rast
)
SELECT
ST_MapAlgebra(rast, 1, NULL, 'ceil([rast]*[rast.x]/[rast.y]+[rast.val])')
FROM foo;
WITH foo AS (
SELECT 1 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0), 2, '8BUI', 10, 0), 3, '32BUI'::text, 100, 0) AS rast UNION ALL
SELECT 2 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 1, 1, -1, 0, 0, 0), 1, '16BUI', 2, 0), 2, '8BUI', 20, 0), 3, '32BUI'::text, 300, 0) AS rast
)
SELECT
ST_MapAlgebra(
t1.rast, 2,
t2.rast, 1,
'([rast2] + [rast1.val]) / 2'
) AS rast
FROM foo t1
CROSS JOIN foo t2
WHERE t1.rid = 1
AND t2.rid = 2;
rastbandarg, ST_Union, ST_MapAlgebra (callback function version)