Opened 3 years ago

Last modified 2 years ago

#2832 new defect

[raster] raster2pgsql pads overviews with single tiles

Reported by: strk Owned by: dustymugs
Priority: medium Milestone: PostGIS Future
Component: raster Version: trunk
Keywords: Cc:

Description

I'm importing https://github.com/mapnik/mapnik/blob/v2.2.0/tests/data/raster/dataraster.tif with overviews 4 and 16 using raster2pgsql, requesting no padding:

raster2pgsql -l 4,16 -t 256x256 dataraster.tif dataraster

The import results in 3 tables: dataraster (72 rows), o_4_dataraster (6 rows), o_16_dataraster (1 row).

While the o_4_dataraster tiles are correctly NOT padded, the o_16_dataraster tile is instead fully padded.

So we have, for o_4_dataraster:

mapnik-tmp-pgraster-test-db=# select st_summary(rast) from o_4_dataraster;
                                      st_summary                                       
---------------------------------------------------------------------------------------
 Raster of 256x256 pixels has 1 band and extent of BOX(-14637 4347678,497363 4859678) +
     band 1 of pixtype 16BSI is in-db with NODATA value of -999
 Raster of 256x256 pixels has 1 band and extent of BOX(497363 4347678,1009363 4859678)+
     band 1 of pixtype 16BSI is in-db with NODATA value of -999
 Raster of 59x256 pixels has 1 band and extent of BOX(1009363 4347678,1127363 4859678)+
     band 1 of pixtype 16BSI is in-db with NODATA value of -999
 Raster of 256x222 pixels has 1 band and extent of BOX(-14637 3903678,497363 4347678) +
     band 1 of pixtype 16BSI is in-db with NODATA value of -999
 Raster of 256x222 pixels has 1 band and extent of BOX(497363 3903678,1009363 4347678)+
     band 1 of pixtype 16BSI is in-db with NODATA value of -999
 Raster of 59x222 pixels has 1 band and extent of BOX(1009363 3903678,1127363 4347678)+
     band 1 of pixtype 16BSI is in-db with NODATA value of -999
(6 rows)

And for o_16_dataraster:

mapnik-tmp-pgraster-test-db=# select st_summary(rast) from o_16_dataraster;
                                      st_summary                                       
---------------------------------------------------------------------------------------
 Raster of 256x256 pixels has 1 band and extent of BOX(-14637 2811678,2033363 4859678)+
     band 1 of pixtype 16BSI is in-db with NODATA value of -999
(1 row)

The problem with the padding is that the extent of the overview with factor 16 is a lot larger than the original extent:

mapnik-tmp-pgraster-test-db=# select 'orig' as l, st_extent(rast::geometry) from dataraster union all select 'ov_4', st_extent(rast::geometry) from o_4_dataraster union all select 'o_16', st_extent(rast::geometry) from o_16_dataraster;
  l   |              st_extent              
------+-------------------------------------
 orig | BOX(-14637 3903178,1126863 4859678)
 ov_4 | BOX(-14637 3903678,1127363 4859678)
 o_16 | BOX(-14637 2811678,2033363 4859678)
(3 rows)

That is, the extent of overview 16 covers almost 4 times the area of the original geometry, while the extent of overview 4 is almost the same:

mapnik-tmp-pgraster-test-db=# with p as ( select ( select st_extent(rast::geometry) from dataraster ) as orig, ( select st_extent(rast::geometry) from o_4_dataraster ) as o4, ( select st_extent(rast::geometry) from o_16_dataraster ) o16 ) select st_area(o4)/st_area(orig) as o4f, st_area(o16)/st_area(orig) as o16f from p;
-[ RECORD 1 ]-----------
o4f  | 0.999915052025483
o16f | 3.84148387396651

I'm actually also surprised to see that the area of extent for overview 4 is even slightly smaller than the area of the original extent.

Anyway, this ticket is for the forced padding in the single-tile overview.

I hadn't tried with versions less than 2.2.0dev

Change History (2)

comment:1 Changed 3 years ago by strk

Some more math: the original raster has a pixel size of 500. The overview with factor 16 should then have an extent which is at most 500*16=8,000 units larger both sides. In this case (with padding) the extent is 1,084,034 units higher and 906,500 units wider

comment:2 Changed 2 years ago by dustymugs

Milestone: PostGIS Future
Note: See TracTickets for help on using tickets.