#!/usr/bin/env python # coding=utf-8 from OWS import OWS import mapscript from osgeo import gdal from osgeo import osr from string import Template import os import logging class WCS(OWS): service = "WCS" request = '' # GetCapabilies, ... parser = None version = None wcsns = None def __init__(self,url=None,qstring=None,configFiles=None): OWS.__init__(self,url,qstring) def makeMap(self,mapfilename=None): lyrobj = None self.version = self.capabilities.attrib["version"] self.wcsns = self.capabilities.nsmap[self.capabilities.prefix] mapobj = self.getMapObj(mapfilename) for layer in self.capabilities["{%s}Contents" % (self.wcsns)].getchildren(): name = layer.Identifier.text logging.debug("Creating layer %s" % name) layerDefFile = self.createLayerDefinitionFile(name, os.path.join( os.path.dirname(__file__), "templates",'wcs.xml')) ds = gdal.Open(layerDefFile) try: lyrobj = mapscript.layerObj(mapobj) lyrobj.name = name lyrobj.data = layerDefFile lyrobj.title = layer["{%s}%s" % (self.owsns11,"Title")].text lyrobj.setMetaData("wms_title",layer["{%s}%s" % (self.owsns11,"Title")].text) if "{%s}%s" % (self.owsns11,"Abstract") in layer: lyrobj.setMetaData("ows_abstract", layer["{%s}%s" % (self.owsns11,"Abstract")].text) sr = osr.SpatialReference() sr.ImportFromWkt(ds.GetProjection()) lyrobj.setProjection(sr.ExportToProj4()) lyrobj.type = mapscript.MS_LAYER_RASTER lyrobj.dump = mapscript.MS_TRUE lyrobj.template = "foo" cls = mapscript.classObj(lyrobj) mapscript.styleObj(cls) except Exception,e: mapobj.removeLayer(lyrobj.index) logging.warning("Could not GetProjection of %s: %s, skipping." %\ (layer.Identifier.text,e)) self.saveMapfile(mapobj,mapfilename) return mapobj