|
|
@@ -16,6 +16,7 @@ class WFS(OWS):
|
|
|
|
|
|
service = "WFS"
|
|
|
wfsns = "http://www.opengis.net/wfs"
|
|
|
+ layerDefFile = None
|
|
|
|
|
|
def __init__(self,url=None,qstring=None,configFiles=None):
|
|
|
OWS.__init__(self,url,qstring)
|
|
|
@@ -24,10 +25,10 @@ class WFS(OWS):
|
|
|
|
|
|
mapobj = self.getMapObj(mapfilename)
|
|
|
|
|
|
- layerDefFile = self.createLayerDefinitionFile("wfs",
|
|
|
+ self.layerDefFile = self.createLayerDefinitionFile("wfs",
|
|
|
os.path.join( os.path.dirname(__file__), "templates",'wfs.xml'))
|
|
|
|
|
|
- ds = ogr.Open(layerDefFile)
|
|
|
+ ds = ogr.Open(self.layerDefFile)
|
|
|
|
|
|
self.setMapName(mapobj)
|
|
|
|
|
|
@@ -42,19 +43,21 @@ class WFS(OWS):
|
|
|
lyrobj.name = name
|
|
|
lyrobj.title = layer.Title.text
|
|
|
lyrobj.setMetaData("wms_title",layer.Title.text)
|
|
|
- if "{%s}%s" % ("http://www.opengis.net/wfs","Abstract") in layer:
|
|
|
+ try:
|
|
|
lyrobj.setMetaData("ows_abstract", layer["{%s}%s" % ("http://www.opengis.net/wfs","Abstract")].text)
|
|
|
+ except:
|
|
|
+ pass
|
|
|
lyrobj.setMetaData("wfs_typename",layer.Name.text)
|
|
|
lyrobj.setMetaData("wfs_version",self.capabilities.attrib["version"])
|
|
|
lyrobj.setConnectionType(mapscript.MS_OGR,'')
|
|
|
- lyrobj.connection = layerDefFile
|
|
|
+ lyrobj.connection = self.layerDefFile
|
|
|
lyrobj.data = name
|
|
|
|
|
|
if ds:
|
|
|
ogrLayer = ds.GetLayerByName(name)
|
|
|
- e = ogrLayer.GetExtent()
|
|
|
+ extent = self.getLayerExtent(ogrLayer)
|
|
|
lyrobj.setMetaData("wms_extent","%s %s %s %s" % \
|
|
|
- (e[0],e[2],e[1],e[3]))
|
|
|
+ (extent[0],extent[1],extent[2],extent[3]))
|
|
|
if ogrLayer:
|
|
|
feature = ogrLayer.GetNextFeature()
|
|
|
if feature:
|
|
|
@@ -113,3 +116,29 @@ class WFS(OWS):
|
|
|
else:
|
|
|
mapobj.setMetaData("wms_title",self.capabilities["{%s}%s"%(self.owsns,"ServiceIdentification")].Title.text)
|
|
|
mapobj.setMetaData("wms_abstract",self.capabilities["{%s}%s"%(self.owsns,"ServiceIdentification")].Abstract.text)
|
|
|
+
|
|
|
+ def getLayerExtent(self,layer):
|
|
|
+ """Get extent of layer in form of minx, miny, maxx,maxy
|
|
|
+ """
|
|
|
+
|
|
|
+ # in WFS 1.1 is inverted axes orientation for some epsg
|
|
|
+ # codes (4000-5000)
|
|
|
+ # According to FrankW, python gdal-1.8.0 does not export
|
|
|
+ # ReferenceSystem.GetAxis() method
|
|
|
+ # so , if WFS version == 1.0.0 AND 4000<=ESPSG<=5000
|
|
|
+ # invert the axes
|
|
|
+ sr = layer.GetSpatialRef()
|
|
|
+ sr.AutoIdentifyEPSG()
|
|
|
+ e = layer.GetExtent()
|
|
|
+ if 4000 <= int(sr.GetAuthorityCode('GEOGCS')) <= 5000 and \
|
|
|
+ self.capabilities.attrib["version"] == "1.1.0":
|
|
|
+ # invert X and Y
|
|
|
+ extent = (e[2],e[0],e[3],e[1])
|
|
|
+
|
|
|
+ else:
|
|
|
+ extent = (e[0],e[2],e[1],e[3])
|
|
|
+
|
|
|
+ logging.debug("Setting extent for layer <%s> to %s" %\
|
|
|
+ (layer.GetName(),extent))
|
|
|
+ return extent
|
|
|
+
|