__init__.py 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #!/usr/bin/env python
  2. # coding=utf-8
  3. from OWS import OWS
  4. import mapscript
  5. import cgi
  6. from lxml import objectify
  7. import urllib
  8. import urlparse
  9. import logging
  10. from osgeo import ogr
  11. import os
  12. class WFS(OWS):
  13. service = "WFS"
  14. def __init__(self,url=None,qstring=None,configFiles=None):
  15. OWS.__init__(self,url,qstring)
  16. def makeMap(self,mapfilename=None):
  17. mapobj = self.getMapObj(mapfilename)
  18. for layer in self.capabilities.FeatureTypeList.getchildren():
  19. if layer.tag != "{http://www.opengis.net/wfs}FeatureType":
  20. continue
  21. name = layer.Name.text
  22. logging.debug("Creating layer %s" % name)
  23. layerDefFile = self.createLayerDefinitionFile(name,
  24. os.path.join( os.path.dirname(__file__), "templates",'wfs.xml'))
  25. ds = ogr.Open(layerDefFile)
  26. lyrobj = mapscript.layerObj(mapobj)
  27. lyrobj.name = name
  28. lyrobj.title = layer.Title.text
  29. lyrobj.data = layerDefFile
  30. lyrobj.setMetaData("wms_title",layer.Title.text)
  31. lyrobj.setMetaData("wfs_typename",layer.Name.text)
  32. lyrobj.setMetaData("wfs_version",self.capabilities.attrib["version"])
  33. if ds:
  34. ogrLayer = ds.GetLayerByName(name)
  35. if ogrLayer:
  36. feature = ogrLayer.GetNextFeature()
  37. if feature:
  38. geom = feature.GetGeometryRef()
  39. if geom:
  40. lyrobj.type = self.getGeomName(geom.GetGeometryName())
  41. else:
  42. mapobj.removeLayer(mapobj.numlayers-1)
  43. logging.debug("No ogrGeometry found")
  44. continue
  45. else:
  46. mapobj.removeLayer(mapobj.numlayers-1)
  47. logging.debug("No ogrFeature found")
  48. continue
  49. else:
  50. mapobj.removeLayer(mapobj.numlayers-1)
  51. logging.debug("No ogrLayer found")
  52. continue
  53. else:
  54. mapobj.removeLayer(mapobj.numlayers-1)
  55. logging.debug("No ogrDataSource found")
  56. continue
  57. lyrobj.setProjection(layer.SRS.text)
  58. lyrobj.dump = mapscript.MS_TRUE
  59. lyrobj.template = "foo"
  60. cls = mapscript.classObj(lyrobj)
  61. style = mapscript.styleObj(cls)
  62. style.outlinecolor=mapscript.colorObj(134,81,0)
  63. style.color=mapscript.colorObj(238,153,0)
  64. style.size=5
  65. style.width=5
  66. self.saveMapfile(mapobj,mapfilename)
  67. return mapobj
  68. def getGeomName(self,geomname):
  69. if geomname.find("LINE") > -1:
  70. return mapscript.MS_LAYER_LINE
  71. elif geomname.find("POLYGON") > -1:
  72. return mapscript.MS_LAYER_POLYGON
  73. else:
  74. return mapscript.MS_LAYER_POINT