__init__.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #!/usr/bin/env python
  2. # coding=utf-8
  3. from OWS import OWS
  4. import mapscript
  5. from osgeo import gdal
  6. from osgeo import osr
  7. from string import Template
  8. import os
  9. import logging
  10. class WCS(OWS):
  11. service = "WCS"
  12. request = '' # GetCapabilies, ...
  13. parser = None
  14. version = None
  15. wcsns = None
  16. def __init__(self,url=None,qstring=None,configFiles=None):
  17. OWS.__init__(self,url,qstring)
  18. def makeMap(self,mapfilename=None):
  19. lyrobj = None
  20. self.version = self.capabilities.attrib["version"]
  21. self.wcsns = self.capabilities.nsmap[self.capabilities.prefix]
  22. mapobj = self.getMapObj(mapfilename)
  23. for layer in self.capabilities["{%s}Contents" % (self.wcsns)].getchildren():
  24. name = layer.Identifier.text
  25. logging.debug("Creating layer %s" % name)
  26. layerDefFile = self.createLayerDefinitionFile(name,
  27. os.path.join( os.path.dirname(__file__), "templates",'wcs.xml'))
  28. ds = gdal.Open(layerDefFile)
  29. try:
  30. lyrobj = mapscript.layerObj(mapobj)
  31. lyrobj.name = name
  32. lyrobj.data = layerDefFile
  33. lyrobj.title = layer["{%s}%s" % (self.owsns11,"Title")].text
  34. lyrobj.setMetaData("wms_title",layer["{%s}%s" % (self.owsns11,"Title")].text)
  35. if "{%s}%s" % (self.owsns11,"Abstract") in layer:
  36. lyrobj.setMetaData("ows_abstract", layer["{%s}%s" % (self.owsns11,"Abstract")].text)
  37. sr = osr.SpatialReference()
  38. sr.ImportFromWkt(ds.GetProjection())
  39. lyrobj.setProjection(sr.ExportToProj4())
  40. lyrobj.type = mapscript.MS_LAYER_RASTER
  41. lyrobj.dump = mapscript.MS_TRUE
  42. lyrobj.template = "foo"
  43. cls = mapscript.classObj(lyrobj)
  44. mapscript.styleObj(cls)
  45. except Exception,e:
  46. mapobj.removeLayer(lyrobj.index)
  47. logging.warning("Could not GetProjection of %s: %s, skipping." %\
  48. (layer.Identifier.text,e))
  49. self.saveMapfile(mapobj,mapfilename)
  50. return mapobj