Jachym Cepicky пре 14 година
родитељ
комит
4c4d5818b4
4 измењених фајлова са 40 додато и 18 уклоњено
  1. 7 11
      OWS.py
  2. 26 0
      tests/test_ows.py
  3. 6 6
      wcs/__init__.py
  4. 1 1
      wfs/__init__.py

+ 7 - 11
OWS.py

@@ -15,6 +15,7 @@ from string import Template
 from osgeo import osr
 from osgeo import ogr
 import OWSExceptions
+from owslib import crs as CRS
 
 class OWS:
 
@@ -255,23 +256,18 @@ class OWS:
 
             return defFileName
 
-    def getLayerExtent(self,layer,crs=None,wkt=None):
+    def getLayerExtent(self,layer,crs=None):
         """Get extent of layer in form of minx, miny, maxx,maxy
+        
+        :returns: [minx, miny, maxx, maxy]
         """
 
         bbox = None
         if layer.boundingBoxWGS84:
 
             dest = osr.SpatialReference()
-            if crs:
-                try:
-                    crsSplit = crs.split(":")
-                    epsg = int(crsSplit[len(crsSplit)-1])                                
-                    dest.ImportFromEPSG(epsg)
-                except (ValueError):
-                    logging.debug("Unable to parse crs '%s'" % crs)
-            else:
-                dest.ImportFromWkt(wkt)
+            dest.ImportFromEPSG(crs.code)
+
             source = osr.SpatialReference()
             source.ImportFromEPSG(4326)
 
@@ -279,6 +275,7 @@ class OWS:
 
             # TODO rewrite this using ogr CoordinateTransformation
             # http://www.gdal.org/ogr/osr_tutorial.html
+            # WELL: it does NOT seem to be THAT better
             geom = ogr.CreateGeometryFromWkt("""POINT(%s %s)""" % (layer.boundingBoxWGS84[0],layer.boundingBoxWGS84[1]),source)
             geom.TransformTo(dest)
             bbox.append(geom.GetX())
@@ -314,7 +311,6 @@ class OWS:
         # set the filter
         layerobj.setMetaData("wfs_filter",msFilter)
 
-
 def getService(configFile=None):
 
     qstring = os.environ["QUERY_STRING"]

+ 26 - 0
tests/test_ows.py

@@ -10,6 +10,7 @@ import os,sys
 from ConfigParser import ConfigParser
 import urllib
 import urlparse
+from owslib import crs
 
 OWSVIEWER_DIR=os.path.abspath(os.path.join(os.path.dirname(__file__),".."))
 sys.path.append(OWSVIEWER_DIR)
@@ -41,6 +42,31 @@ class TestOWS(unittest.TestCase):
 
         self.service = getService()
 
+    def test_bbox(self):
+        """test if corect bounding box for layer will be used"""
+        
+        initExtent = [15, 50, 16, 51]
+        class ContentsMetadata:
+            boundingBoxWGS84 = initExtent
+            id = "Temporary test layer"
+        wcsLayer = ContentsMetadata()
+        ows = OWS()
+        extent = ows.getLayerExtent(wcsLayer,crs.Crs("EPSG:4326"))
+        self.assertAlmostEqual(extent[0], initExtent[0])
+        self.assertAlmostEqual(extent[1], initExtent[1])
+        self.assertAlmostEqual(extent[2], initExtent[2])
+        self.assertAlmostEqual(extent[3], initExtent[3])
+
+        extent = ows.getLayerExtent(wcsLayer,crs.Crs("EPSG:32633"))
+        self.assertAlmostEqual(extent[0], 500000.00, 0)
+        self.assertAlmostEqual(extent[1], 5538630.70, 0)
+        self.assertAlmostEqual(extent[2], 570168.86, 0)
+        self.assertAlmostEqual(extent[3], 5650300.79, 0)
+
+        
+        
+
+
 
     def _getURLWithMap(self,mapfile):
 

+ 6 - 6
wcs/__init__.py

@@ -58,10 +58,10 @@ class WCS(OWS):
                 extent = None
                 # processing
                 if layer.crsOptions:
-                    lyrobj.setProjection(layer.crsOptions[0])
+                    lyrobj.setProjection(layer.crsOptions[0].getCode())
                     extent = self.getLayerExtent(layer,layer.crsOptions[0])
                 elif  layer.supportedCRS:
-                    lyrobj.setProjection(layer.supportedCRS[0])
+                    lyrobj.setProjection(layer.supportedCRS[0].getCode())
                     extent = self.getLayerExtent(layer,layer.supportedCRS[0])
                 else:
                     sr = osr.SpatialReference()
@@ -159,7 +159,7 @@ class WCS(OWS):
         """Adds wmcs_band* metadata to the lyrobj"""
 
         for i in layer.axisDescriptions:
-            if layer.axisDescriptions[i].name.toLowerCase() == "bands":
-                lyrobj.setMetadata("wcs_bandcount",len(layer.axisDescriptions[i].values))
-                lyrobj.setMetadata("wcs_rangeset_axes",layer.axisDescriptions[i].name)
-                lyrobj.setMetadata("wcs_rangeset_name",layer.axisDescriptions[i].name)
+            if i.name.lower() == "bands":
+                lyrobj.setMetaData("wcs_bandcount",str(len(i.values)))
+                lyrobj.setMetaData("wcs_rangeset_axes",str(i.name))
+                lyrobj.setMetaData("wcs_rangeset_name",str(i.name))

+ 1 - 1
wfs/__init__.py

@@ -81,7 +81,7 @@ class WFS(OWS):
                 continue
 
             #lyrobj.setProjection(self.__getLayerCrs(layer.crsOptions))
-            lyrobj.setProjection(layer.crsOptions[0])
+            lyrobj.setProjection(layer.crsOptions[0].getCode())
 
             lyrobj.dump = mapscript.MS_TRUE 
             lyrobj.template = "foo"