| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- #!/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
|