Author: jbronn
Date: 2009-07-26 23:21:31 -0500 (Sun, 26 Jul 2009)
New Revision: 11340

Modified:
   django/trunk/django/contrib/gis/db/models/query.py
   django/trunk/django/contrib/gis/tests/geoapp/tests.py
   django/trunk/django/contrib/gis/tests/relatedapp/tests.py
   django/trunk/django/contrib/gis/tests/test_spatialrefsys.py
Log:
Fixed test cases and `GeoQuerySet.geojson` to support PostGIS 1.4.


Modified: django/trunk/django/contrib/gis/db/models/query.py
===================================================================
--- django/trunk/django/contrib/gis/db/models/query.py  2009-07-27 02:06:06 UTC 
(rev 11339)
+++ django/trunk/django/contrib/gis/db/models/query.py  2009-07-27 04:21:31 UTC 
(rev 11340)
@@ -125,11 +125,19 @@
         if not isinstance(precision, (int, long)):
             raise TypeError('Precision keyword must be set with an integer.')
         
-        # Setting the options flag 
-        options = 0
-        if crs and bbox: options = 3
-        elif crs: options = 1
-        elif bbox: options = 2
+        # Setting the options flag -- which depends on which version of
+        # PostGIS we're using.
+        major, minor1, minor2 = SpatialBackend.version
+        if major >=1 and (minor1 >= 4):
+            options = 0
+            if crs and bbox: options = 3
+            elif bbox: options = 1
+            elif crs: options = 2
+        else:
+            options = 0
+            if crs and bbox: options = 3
+            elif crs: options = 1
+            elif bbox: options = 2
         s = {'desc' : 'GeoJSON', 
              'procedure_args' : {'precision' : precision, 'options' : options},
              'procedure_fmt' : '%(geo_col)s,%(precision)s,%(options)s',

Modified: django/trunk/django/contrib/gis/tests/geoapp/tests.py
===================================================================
--- django/trunk/django/contrib/gis/tests/geoapp/tests.py       2009-07-27 
02:06:06 UTC (rev 11339)
+++ django/trunk/django/contrib/gis/tests/geoapp/tests.py       2009-07-27 
04:21:31 UTC (rev 11340)
@@ -148,15 +148,16 @@
         ptown1 = City.objects.gml(field_name='point', 
precision=9).get(name='Pueblo')
         ptown2 = City.objects.gml(precision=9).get(name='Pueblo')
 
+        import re
         if SpatialBackend.oracle:
             # No precision parameter for Oracle :-/
-            import re
-            gml_regex = re.compile(r'<gml:Point srsName="SDO:4326" 
xmlns:gml="http://www.opengis.net/gml";><gml:coordinates decimal="\." cs="," 
ts=" ">-104.60925\d+,38.25500\d+ </gml:coordinates></gml:Point>')
+            gml_regex = re.compile(r'^<gml:Point srsName="SDO:4326" 
xmlns:gml="http://www.opengis.net/gml";><gml:coordinates decimal="\." cs="," 
ts=" ">-104.60925\d+,38.25500\d+ </gml:coordinates></gml:Point>')
             for ptown in [ptown1, ptown2]:
-                self.assertEqual(True, bool(gml_regex.match(ptown.gml)))
+                self.failUnless(gml_regex.match(ptown.gml))
         else:
+            gml_regex = re.compile(r'^<gml:Point 
srsName="EPSG:4326"><gml:coordinates>-104\.60925\d+,38\.255001</gml:coordinates></gml:Point>')
             for ptown in [ptown1, ptown2]:
-                self.assertEqual('<gml:Point 
srsName="EPSG:4326"><gml:coordinates>-104.609252,38.255001</gml:coordinates></gml:Point>',
 ptown.gml)
+                self.failUnless(gml_regex.match(ptown.gml))
 
     @no_spatialite
     @no_oracle
@@ -167,28 +168,38 @@
         if not SpatialBackend.geojson:
             return
 
+        major, minor1, minor2 = SpatialBackend.version
+        if major >=1 and minor1 >= 4:
+            pueblo_json = 
'{"type":"Point","coordinates":[-104.609252,38.255001]}'
+            houston_json = 
'{"type":"Point","crs":{"type":"name","properties":{"name":"EPSG:4326"}},"coordinates":[-95.363151,29.763374]}'
+            victoria_json = 
'{"type":"Point","bbox":[-123.30519600,48.46261100,-123.30519600,48.46261100],"coordinates":[-123.305196,48.462611]}'
+            chicago_json = 
'{"type":"Point","crs":{"type":"name","properties":{"name":"EPSG:4326"}},"bbox":[-87.65018,41.85039,-87.65018,41.85039],"coordinates":[-87.65018,41.85039]}'
+        else:
+            pueblo_json = 
'{"type":"Point","coordinates":[-104.60925200,38.25500100]}'
+            houston_json = 
'{"type":"Point","crs":{"type":"EPSG","properties":{"EPSG":4326}},"coordinates":[-95.36315100,29.76337400]}'
+            victoria_json = 
'{"type":"Point","bbox":[-123.30519600,48.46261100,-123.30519600,48.46261100],"coordinates":[-123.30519600,48.46261100]}'
+            chicago_json = 
'{"type":"Point","crs":{"type":"EPSG","properties":{"EPSG":4326}},"bbox":[-87.65018,41.85039,-87.65018,41.85039],"coordinates":[-87.65018,41.85039]}'
+            
         # Precision argument should only be an integer
         self.assertRaises(TypeError, City.objects.geojson, precision='foo')
         
         # Reference queries and values.
         # SELECT ST_AsGeoJson("geoapp_city"."point", 8, 0) FROM "geoapp_city" 
WHERE "geoapp_city"."name" = 'Pueblo';
-        json = '{"type":"Point","coordinates":[-104.60925200,38.25500100]}'
-        self.assertEqual(City.objects.geojson().get(name='Pueblo').geojson, 
json)
+        self.assertEqual(pueblo_json, 
City.objects.geojson().get(name='Pueblo').geojson)
 
-        # SELECT ST_AsGeoJson("geoapp_city"."point", 8, 1) FROM "geoapp_city" 
WHERE "geoapp_city"."name" = 'Houston';
-        json = 
'{"type":"Point","crs":{"type":"EPSG","properties":{"EPSG":4326}},"coordinates":[-95.36315100,29.76337400]}'
+        # 1.3.x: SELECT ST_AsGeoJson("geoapp_city"."point", 8, 1) FROM 
"geoapp_city" WHERE "geoapp_city"."name" = 'Houston';
+        # 1.4.x: SELECT ST_AsGeoJson("geoapp_city"."point", 8, 2) FROM 
"geoapp_city" WHERE "geoapp_city"."name" = 'Houston';
         # This time we want to include the CRS by using the `crs` keyword.
-        self.assertEqual(City.objects.geojson(crs=True, 
model_att='json').get(name='Houston').json, json)
+        self.assertEqual(houston_json, City.objects.geojson(crs=True, 
model_att='json').get(name='Houston').json)
 
-        # SELECT ST_AsGeoJson("geoapp_city"."point", 8, 2) FROM "geoapp_city" 
WHERE "geoapp_city"."name" = 'Victoria';
-        json = 
'{"type":"Point","bbox":[-123.30519600,48.46261100,-123.30519600,48.46261100],"coordinates":[-123.30519600,48.46261100]}'
+        # 1.3.x: SELECT ST_AsGeoJson("geoapp_city"."point", 8, 2) FROM 
"geoapp_city" WHERE "geoapp_city"."name" = 'Victoria';
+        # 1.4.x: SELECT ST_AsGeoJson("geoapp_city"."point", 8, 1) FROM 
"geoapp_city" WHERE "geoapp_city"."name" = 'Houston';
         # This time we include the bounding box by using the `bbox` keyword.
-        
self.assertEqual(City.objects.geojson(bbox=True).get(name='Victoria').geojson, 
json)
+        self.assertEqual(victoria_json, 
City.objects.geojson(bbox=True).get(name='Victoria').geojson)
 
-        # SELECT ST_AsGeoJson("geoapp_city"."point", 5, 3) FROM "geoapp_city" 
WHERE "geoapp_city"."name" = 'Chicago';
-        json = 
'{"type":"Point","crs":{"type":"EPSG","properties":{"EPSG":4326}},"bbox":[-87.65018,41.85039,-87.65018,41.85039],"coordinates":[-87.65018,41.85039]}'
+        # 1.(3|4).x: SELECT ST_AsGeoJson("geoapp_city"."point", 5, 3) FROM 
"geoapp_city" WHERE "geoapp_city"."name" = 'Chicago';
         # Finally, we set every available keyword.
-        self.assertEqual(City.objects.geojson(bbox=True, crs=True, 
precision=5).get(name='Chicago').geojson, json)
+        self.assertEqual(chicago_json, City.objects.geojson(bbox=True, 
crs=True, precision=5).get(name='Chicago').geojson)
         
     @no_oracle
     def test03d_svg(self):

Modified: django/trunk/django/contrib/gis/tests/relatedapp/tests.py
===================================================================
--- django/trunk/django/contrib/gis/tests/relatedapp/tests.py   2009-07-27 
02:06:06 UTC (rev 11339)
+++ django/trunk/django/contrib/gis/tests/relatedapp/tests.py   2009-07-27 
04:21:31 UTC (rev 11340)
@@ -39,10 +39,7 @@
         "Testing the `transform` GeoQuerySet method on related geographic 
models."
         # All the transformations are to state plane coordinate systems using
         # US Survey Feet (thus a tolerance of 0 implies error w/in 1 survey 
foot).
-        if SpatialBackend.postgis:
-            tol = 3
-        else:
-            tol = 0
+        tol = 0
 
         def check_pnt(ref, pnt):
             self.assertAlmostEqual(ref.x, pnt.x, tol)

Modified: django/trunk/django/contrib/gis/tests/test_spatialrefsys.py
===================================================================
--- django/trunk/django/contrib/gis/tests/test_spatialrefsys.py 2009-07-27 
02:06:06 UTC (rev 11339)
+++ django/trunk/django/contrib/gis/tests/test_spatialrefsys.py 2009-07-27 
04:21:31 UTC (rev 11340)
@@ -1,4 +1,5 @@
 import unittest
+from django.contrib.gis.db.backend import SpatialBackend
 from django.contrib.gis.tests.utils import mysql, no_mysql, oracle, postgis, 
spatialite
 if not mysql:
     from django.contrib.gis.models import SpatialRefSys
@@ -7,6 +8,7 @@
              'auth_name' : ('EPSG', True),
              'auth_srid' : 4326,
              'srtext' : 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 
84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]',
+             'srtext14' : 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 
84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]',
              'proj4' : '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs ',
              'spheroid' : 'WGS 84', 'name' : 'WGS 84', 
              'geographic' : True, 'projected' : False, 'spatialite' : True,
@@ -17,6 +19,7 @@
              'auth_name' : ('EPSG', False),
              'auth_srid' : 32140,
              'srtext' : 'PROJCS["NAD83 / Texas South 
Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 
1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.28333333333333],PARAMETER["standard_parallel_2",28.38333333333333],PARAMETER["latitude_of_origin",27.83333333333333],PARAMETER["central_meridian",-99],PARAMETER["false_easting",600000],PARAMETER["false_northing",4000000],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AUTHORITY["EPSG","32140"]]',
+             'srtext14': 'PROJCS["NAD83 / Texas South 
Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 
1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.28333333333333],PARAMETER["standard_parallel_2",28.38333333333333],PARAMETER["latitude_of_origin",27.83333333333333],PARAMETER["central_meridian",-99],PARAMETER["false_easting",600000],PARAMETER["false_northing",4000000],AUTHORITY["EPSG","32140"],AXIS["X",EAST],AXIS["Y",NORTH]]',
              'proj4' : '+proj=lcc +lat_1=30.28333333333333 
+lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 
+y_0=4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs ',
              'spheroid' : 'GRS 1980', 'name' : 'NAD83 / Texas South Central',
              'geographic' : False, 'projected' : True, 'spatialite' : False,
@@ -25,6 +28,10 @@
              },
             )
 
+if SpatialBackend.postgis:
+    major, minor1, minor2 = SpatialBackend.version
+    POSTGIS_14 = major >=1 and minor1 >= 4
+
 class SpatialRefSysTest(unittest.TestCase):
 
     @no_mysql
@@ -45,7 +52,11 @@
 
             # No proj.4 and different srtext on oracle backends :(
             if postgis:
-                self.assertEqual(sd['srtext'], srs.wkt)
+                if POSTGIS_14:
+                    srtext = sd['srtext14']
+                else:
+                    srtext = sd['srtext']
+                self.assertEqual(srtext, srs.wkt)
                 self.assertEqual(sd['proj4'], srs.proj4text)
 
     @no_mysql
@@ -68,7 +79,11 @@
                 self.assertEqual(sd['proj4'], srs.proj4)
                 # No `srtext` field in the `spatial_ref_sys` table in 
SpatiaLite
                 if not spatialite:
-                    self.assertEqual(sd['srtext'], srs.wkt)
+                    if POSTGIS_14:
+                        srtext = sd['srtext14']
+                    else:
+                        srtext = sd['srtext']
+                    self.assertEqual(srtext, srs.wkt)
 
     @no_mysql
     def test03_ellipsoid(self):


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to