[postgis-devel] [PostGIS] #497: [raster] Start testing displaying PostGIS raster with Mapserver

PostGIS trac at osgeo.org
Wed Feb 16 05:28:35 PST 2011

#497: [raster] Start testing displaying PostGIS raster with Mapserver
 Reporter:  robe            |       Owner:  robe         
     Type:  task            |      Status:  new          
 Priority:  medium          |   Milestone:  PostGIS 2.0.0
Component:  postgis raster  |     Version:  trunk        
 Keywords:                  |  

Comment(by jorgearevalo):

 I need to construct a GDALDataset object, so, I need the raster metadata.
 The driver considers 2 working modes:[[BR]][[BR]]

 ONE_RASTER_PER_ROW: The table is a store of not necessarily related raster
 objects. You need to specify which row you want in "where" clause of
 connection string. In that case, you only need metadata for one row, of

 ONE_RASTER_PER_TABLE: All the table's rows are expected to form a
 coverage. Things go difficult here because you don't know if all the rows
 have the same srid, snap to the same grid and do not overlap. Anyway, in
 that case you need the metadata of your whole raster coverage. How would
 you get this?

 My rough approach was to get metadata of all raster objects. In the ideal
 case, they all share srid, size, pixel size and skew. You can calculate
 the extent of the raster. That works for the ideal case, but this is slow,
 and doesn't take into account other raster arrangements. If not all the
 rows share grid alignment, I should resample all the rows to the grid of
 the first one, or provide a new grid alingment for all the rows.

 Then, constructing a GDALDataset can be a very slow task, as you have
 experienced. How would be the better way to get the metadata for a whole
 raster coverage when you only have the metadata of each separated block
 and you don't know if all the blocks snap to the same grid or not?

 About the ROW_NUMBER issue, I'll try to explain it better. GDAL only knows
 about "blocks" of data. When you create a new GDALDataset, you can say "my
 raster data have x pixels width and y pixels height, and is blocked. Each
 block has n pixels width and m pixels height". Then, GDAL core calculates
 how many ReadBlock calls needs. In each call, x and y offset are provided,
 based in the calculated number of blocks and the raster data size.

 It's driver's responsibility to match that offsets with one raster block.
 I can't use "rid" because I don't know it offset (0, 0) matches the raster
 block with rid 0, and so on. I'm using that offset (0, 0) matches the
 raster block that starts in pixel 0, 0. With the georeference information
 and a spatial query, I can get the raster data block.

 Of course, I am assuming all the raster blocks have the same dimensions,
 and this is not a requisite. The driver must deal with this problem too.

 About raster_columns, not, the driver doesn't use it.

Ticket URL: <http://trac.osgeo.org/postgis/ticket/497#comment:11>
PostGIS <http://trac.osgeo.org/postgis/>
The PostGIS Trac is used for bug, enhancement & task tracking, a user and developer wiki, and a view into the subversion code repository of PostGIS project.

More information about the postgis-devel mailing list