Name

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.

Synopsis

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);

Descrição

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

Descrição: Variantes 1 e 2 (um raster)

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

    1. [rast] - Valor do pixel de interesse

    2. [rast.val] - Valor do pixel de interesse

    3. [rast.x] - coluna pixel 1-baseada do pixel de interesse

    4. [rast.y] - linha pixel 1-baseada do pixel de interesse

Descrição: Variantes 3 e 4 (dois rasters)

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

  1. INTERSECTION - A extensão do novo raster é a interseção de dois rasters. Este é o padrão.

  2. UNION - A extensão do novo raster é a união dos dois raster.

  3. FIRST - A extensão do novo raster é a mesma da do primeiro raster.

  4. 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

    1. [rast1] - Valor do pixel de interesse do rast1

    2. [rast1.val] - Valor do pixel de interesse do rast1

    3. [rast1.x] - coluna pixel 1-based do pixel de interesse dorast1

    4. [rast1.y] - linha pixel 1-based do pixel de interesse dorast1

    5. [rast2] - Valor do pixel de interesse do rast2

    6. [rast2.val] - Valor do pixel de interesse do rast2

    7. [rast2.x] - coluna pixel 1-based do pixel de interesse dorast2

    8. [rast2.y] - linha pixel 1-based do pixel de interesse dorast2

Exemplos: Variantes 1 e 2

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;
                    

Exemplos: Variantes 3 e 4

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;