Frank,

Frank Warmerdam wrote:
Ivan wrote:
I setup an very simple MAP file with a GDAL/GeoRaster as the DATA parameter of a layer like that:

  LAYER
    DATA "geor:scott/ti...@orcl,CITIES,SCENE,ID=120"

This raster is 14336x14336x3 big (600Mb) and has 7 level of pyramids on it. The question is that, because of the pyramids (= GDAL overviews) this image loads, pan and zoom pretty fast on QuantumGIS with the Oracle Raster plugin but that doesn't help at all in MapServer.

I might not be that familiar with MapServer architecture either, but it looks to me that it doesn't take advantage of Pyramids at all. Not even if the raster is stored in MrSID. The only way to go is to build tile cache. Right?

Ivan,

MapServer certainly should be taking advantage of overviews if they are
available.  MapServer just calls RasterIO and lets it do the downsampling
so if GDAL's RasterIO is downsampling with overviews it should be good.

If this is not working, we should likely be investigating how the overviews
are presented by the driver.

I pretty much sure that the GeoRaster driver is returning the overview 
correctly when it is asked to
read the correct overview/pyramid level.

My MAP/SIZE parameter is "800 600" so if add some debugging message inside the 
driver code and run
gdal_translate and shp2img to compare the results that is what I got:

% gdal_translate geor:scott/ti...@orcl,gdal_rdt,59 out.tif -outsize 800 600
Input file size is 14336, 14336
...
GEOR: nBlock, nBand, nLevel, nXOffset, nYOffset, nColumnBlockSize, 
nRowBlockSize = 0, 1, 4, 0, 0,
256, 256
GEOR: nBlock, nBand, nLevel, nXOffset, nYOffset, nColumnBlockSize, 
nRowBlockSize = 1, 1, 4, 1, 0,
256, 256
GEOR: nBlock, nBand, nLevel, nXOffset, nYOffset, nColumnBlockSize, 
nRowBlockSize = 2, 1, 4, 2, 0,
256, 256
...

% shp2img -m /home/ilucena/htdocs/test.map -o out.png
...
GEOR: nBlock, nBand, nLevel, nXOffset, nYOffset, nColumnBlockSize, 
nRowBlockSize = 0, 1, 0, 0, 0,
256, 256
GEOR: nBlock, nBand, nLevel, nXOffset, nYOffset, nColumnBlockSize, 
nRowBlockSize = 1, 1, 0, 1, 0,
256, 256
GEOR: nBlock, nBand, nLevel, nXOffset, nYOffset, nColumnBlockSize, 
nRowBlockSize = 2, 1, 0, 2, 0,
256, 256
...
0...10...20...30...40...50...60...70...80...90...100 - done.

I am assuming that shp2img is calling the same code as MapServer. Rigth?

So looking at the debugging information I can see that the nLevel parameter is 
incorrect. It is
reading from the full scene what takes much more blocks to read and more time. 
But I am assuming
that the only downsamplying I need to specify for this test is the SIZE 
parameter on the general MAP
level.

Debugging those two process I noticed some important difference. shp2img calls GDALDatasetRasterIO and will ultimately calls the driver IRasterIO but without calling GetOverview first, so when it goes to the driver IReadBlock the level is 0. gdal_translate calls GetOverview and get the appropriated level but it does not touch the driver IRasterIO, it goes directly to the IReadBlock with the correct level. It Seams like QGIS does the same.

I will continue to investigate.

Thanks,

Ivan


_______________________________________________
mapserver-users mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/mapserver-users

Reply via email to