| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- #!/usr/bin/env python
- # coding=utf-8
- from OWS import OWS
- import mapscript
- import cgi
- from lxml import objectify
- import urllib
- import urlparse
- import logging
- from osgeo import ogr
- import os
- class WFS(OWS):
- service = "WFS"
- def __init__(self,url=None,qstring=None,configFiles=None):
- OWS.__init__(self,url,qstring)
- def makeMap(self,mapfilename=None):
- mapobj = self.getMapObj(mapfilename)
- layerDefFile = self.createLayerDefinitionFile("wfs",
- os.path.join( os.path.dirname(__file__), "templates",'wfs.xml'))
- ds = ogr.Open(layerDefFile)
- for layer in self.capabilities.FeatureTypeList.getchildren():
- if layer.tag != "{http://www.opengis.net/wfs}FeatureType":
- continue
- name = layer.Name.text
- logging.debug("Creating layer %s" % name)
- lyrobj = mapscript.layerObj(mapobj)
- lyrobj.name = name
- lyrobj.title = layer.Title.text
- lyrobj.setMetaData("wms_title",layer.Title.text)
- lyrobj.setMetaData("wfs_typename",layer.Name.text)
- lyrobj.setMetaData("wfs_version",self.capabilities.attrib["version"])
- lyrobj.setConnectionType(mapscript.MS_OGR,'')
- lyrobj.connection = layerDefFile
- lyrobj.data = name
- if ds:
- ogrLayer = ds.GetLayerByName(name)
- e = ogrLayer.GetExtent()
- lyrobj.setMetaData("wms_extent","%s %s %s %s" % \
- (e[0],e[2],e[1],e[3]))
- if ogrLayer:
- feature = ogrLayer.GetNextFeature()
- if feature:
- geom = feature.GetGeometryRef()
- if geom:
- lyrobj.type = self.getGeomName(geom.GetGeometryName())
- else:
- mapobj.removeLayer(mapobj.numlayers-1)
- logging.debug("No ogrGeometry found")
- continue
- else:
- mapobj.removeLayer(mapobj.numlayers-1)
- logging.debug("No ogrFeature found")
- continue
- else:
- mapobj.removeLayer(mapobj.numlayers-1)
- logging.debug("No ogrLayer found")
- continue
- else:
- mapobj.removeLayer(mapobj.numlayers-1)
- logging.debug("No ogrDataSource found")
- continue
- if self.capabilities.attrib["version"] == "1.0.0":
- lyrobj.setProjection(layer.SRS.text)
- else:
- lyrobj.setProjection(layer.DefaultSRS.text)
- lyrobj.dump = mapscript.MS_TRUE
- lyrobj.template = "foo"
- cls = mapscript.classObj(lyrobj)
- style = mapscript.styleObj(cls)
- style.outlinecolor=mapscript.colorObj(134,81,0)
- style.color=mapscript.colorObj(238,153,0)
- style.size=5
- style.width=5
- self.saveMapfile(mapobj,mapfilename)
- return mapobj
-
- def getGeomName(self,geomname):
- if geomname.find("LINE") > -1:
- return mapscript.MS_LAYER_LINE
- elif geomname.find("POLYGON") > -1:
- return mapscript.MS_LAYER_POLYGON
- else:
- return mapscript.MS_LAYER_POINT
|