PostGIS – Implementing Raster in MapServer

gdalmapserverpostgis

I'm having trouble getting a PostGIS raster to load and display in MapServer. I'm not sure, but suspect it's a version problem. My mapfile layer and the error message are shown below.

LAYER
    NAME bio12_2_5m
    TYPE raster
    STATUS ON
    DATA "PG:host=localhost port=31600 dbname='wdata' user='postgres' password='*****' schema='worldclim' table='bio12_2_5m'"  
    PROCESSING "NODATA=-9999"
    PROCESSING "SCALE=AUTO"
END

msDrawMap(): Image handling error. Failed to draw layer named 'bio12_2_5m'.
msDrawRasterLayerLow(): Unable to access file. Corrupt, empty or missing file 'PG:host=localhost port=31600 dbname='wdata' user='postgres' password='**' schema='worldclim' table='bio12_2_5m'' for layer 'bio12_2_5m'. Sorry, but table bio12_2_5m doesn't seem to have regular blocking arrangement. Only tables with regular blocking arrangement can be read from now

This is WorldClim data loaded into PostGIS with raster2pgsql like:

raster2pgsql -s 4326 bio12.bil worldclim.bio12_2_5m > bio12.sql

To get around what seems like a blocking problem I've also tried:

raster2pgsql -s 4326 -C -r bio12.bil worldclim.test > test.sql
raster2pgsql -s 4326 -t 10x10 bio12.bil worldclim.test2 > test2.sql

And with the MapServer layer I've tried setting mode=1 or mode=2, still no success.

Versions … Ubuntu 12.04 LTS, PostgreSQL 9.1.11, GDAL 1.10.0, PostGIS 2.0.4 with raster support, and MapServer 6.0.1. But (always a but) to be fair I started with GDAL 1.7.3 via the default ubuntu repository, and at the end updated GDAL to 1.10.0 via the Ubuntu GIS "unstable" repository since it seems like the newer versions of GDAL are required to address/support the blocking items.

Thanks, very close I suspect and not sure if installing everything from scratch would help starting with the 1.10.0 GDAL. Also tried building GDAL from source and no success there.

Best Answer

With a bit more work I've answered my own question. It required setup and testing of a new server and then application to the existing server.

What I had done previously with GDAL ... enabled Ubuntu GIS "unstable" repository, installed what looked like the required update to 1.10.0:

sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable
sudo apt-get update
sudo apt-get install libgdal1-dev

This reported (seemingly incorrectly) that I was at 1.10.0 via gdal-config --version. What needed to be run:

sudo apt-get install gdal-bin

This got gdalinfo working and correctly reading the raster info from PostGIS with:

gdalinfo  "PG:host=localhost port=31600 dbname='wdata' user='postgres' password='****' schema='worldclim' table=bio12_2_5m"

Next step was MapServer:

sudo apt-get install cgi-mapserver
sudo apt-get install mapserver-bin

MapServer is now at 6.4.1 via /usr/lib/cgi-bin/mapserv -v

This got shp2img working like:

shp2img -m worldclim12.map -o worldclim12.png -all_debug 3

And, finally some tweaks to the layer file to make it into a WMS layer for consumption by leaflet:

LAYER
  NAME bio12_2_5m
  TYPE raster
  METADATA
    "wms_title" "bio12_2_5m"
    "wms_srs" "EPSG:4326"
    "wms_enable_request" "*"
    "wms_feature_info_mime_type" "text/html" 
  END    
  EXTENT -180 -60 180 90
  PROJECTION
    "init=epsg:4326"
  END
  STATUS ON
  DATA "PG:host=localhost port=31600 dbname='wdata' user='postgres' password='****' schema='worldclim' table='bio12_2_5m'"      
  PROCESSING "NODATA=-9999"
  PROCESSING "SCALE=AUTO"
END

Moral to this story is I could understand more about how the various packages exist in the Ubuntu GIS "unstable" repository. Thus far still seems easier to goto these than build from source.

It's 30-40 seconds to render the image on a webpage so performance will be next.

Related Question