Opened 10 years ago

Closed 9 years ago

Last modified 4 years ago

#1119 closed enhancement (wontfix)

[raster] Modify ST_MapAlgebra so that expressions can refer to any band

Reported by: pracine Owned by: pracine
Priority: low Milestone: PostGIS Fund Me
Component: raster Version: main
Keywords: Cc:

Description (last modified by pracine)

This could be useful for:

-Writing expressions (like 'average') involving any band of the raster

-Refer to weighted information created by ST_AsRaster() (the length or the area of the geometry intersecting with the pixel

In the one raster version of MapAlgebra? one could refer to the second band like this: 'rast[2]'.

In the two rasters version of MapAlgebra? one could refer to the second band like this: 'rast1[2] + rast2[2]'.

'rast', 'rast1' and 'rast2' should by default refer to the value of the first band.

Out of bound band references should be clamped to the existing band range.

This change means that we MUST remove the function's band parameters since they are not useful anymore.

Change History (9)

comment:1 Changed 10 years ago by pracine

Description: modified (diff)

comment:2 Changed 10 years ago by pracine

Summary: [raster] Modify ST_Mapalgebra so that the expression can refer to any band[raster] Modify ST_MapAlgebra so that expressions can refer to any band

comment:3 Changed 10 years ago by pracine

Description: modified (diff)

comment:4 Changed 10 years ago by pracine

Important to note that as soon as references are made to other band than 1, nodata value alternative expressions should be used when ANY of the raster value used in the expression is nodata. E.g. if the expression is 'rast1[2] + rast1[1] * rast2' in the two rasters ST_Mapalgebra(), then 'nodata1expr' is used instead of 'expression' as soon as one of 'rast1[2]' OR 'rast1[1]' is nodata and 'nodatanodataexpr' is used as soon as ('rast1[2]' OR 'rast1[1]' is nodata) AND 'rast1[1]' is nodata.

comment:5 Changed 9 years ago by strk

Make sure to consider this in #1525 !

comment:6 Changed 9 years ago by pracine

This is a big change that we should definitely be postpone to future version.

-It requires to remove the band parameter to every sT_MapAlgebra: since we can invoke any band in the expression, there is no need to pass a band number to the function.

-As commented previously in this ticket, it drastically changes the meaning of the nodata alternate expression. The nodata expressions are there to tell what to do when the pixel iterator meet a nodata value. If there is no more band parameter, which pixel of which band we must consider as a nodata value?

I think more and more that the way ST_MapAlgebra was designed must stick with dealing with one band at a time. We should design new map algebra function to deal with 1) expressions referencing multiple bands (this is the possibility invoked in this ticket) and 2) map algebra for multiple band raster applying the same expression to every bands of a raster.

So please think twice before implementing this feature. We need new ST_MapAlgebra variants with specific behaviors.

comment:7 Changed 9 years ago by pracine

Milestone: PostGIS Raster FuturePostGIS Future

comment:8 Changed 9 years ago by pracine

Resolution: wontfix
Status: newclosed

I'm closing this ticket since the functionality required is now possible with n-raster ST_MapAlgebra (#2030).

comment:9 Changed 4 years ago by robe

Milestone: PostGIS FuturePostGIS Fund Me

Milestone renamed

Note: See TracTickets for help on using tickets.