Author: jbronn
Date: 2010-10-12 12:13:27 -0500 (Tue, 12 Oct 2010)
New Revision: 14189

Modified:
   django/trunk/django/contrib/gis/db/models/query.py
   django/trunk/django/contrib/gis/tests/geogapp/models.py
   django/trunk/django/contrib/gis/tests/geogapp/tests.py
   django/trunk/docs/ref/contrib/gis/model-api.txt
Log:
Enabled area calculations for geography columns.

Modified: django/trunk/django/contrib/gis/db/models/query.py
===================================================================
--- django/trunk/django/contrib/gis/db/models/query.py  2010-10-12 14:09:02 UTC 
(rev 14188)
+++ django/trunk/django/contrib/gis/db/models/query.py  2010-10-12 17:13:27 UTC 
(rev 14189)
@@ -48,7 +48,10 @@
             s['procedure_args']['tolerance'] = tolerance
             s['select_field'] = AreaField('sq_m') # Oracle returns area in 
units of meters.
         elif backend.postgis or backend.spatialite:
-            if not geo_field.geodetic(connection):
+            if backend.geography:
+                # Geography fields support area calculation, returns square 
meters.
+                s['select_field'] = AreaField('sq_m')
+            elif not geo_field.geodetic(connection):
                 # Getting the area units of the geographic field.
                 s['select_field'] = 
AreaField(Area.unit_attname(geo_field.units_name(connection)))
             else:

Modified: django/trunk/django/contrib/gis/tests/geogapp/models.py
===================================================================
--- django/trunk/django/contrib/gis/tests/geogapp/models.py     2010-10-12 
14:09:02 UTC (rev 14188)
+++ django/trunk/django/contrib/gis/tests/geogapp/models.py     2010-10-12 
17:13:27 UTC (rev 14189)
@@ -10,7 +10,7 @@
     code = models.CharField(max_length=10)
     poly = models.PolygonField(geography=True)
     objects = models.GeoManager()
-    def __unicode__(self): return self.name
+    def __unicode__(self): return self.code
 
 class County(models.Model):
     name = models.CharField(max_length=25)

Modified: django/trunk/django/contrib/gis/tests/geogapp/tests.py
===================================================================
--- django/trunk/django/contrib/gis/tests/geogapp/tests.py      2010-10-12 
14:09:02 UTC (rev 14188)
+++ django/trunk/django/contrib/gis/tests/geogapp/tests.py      2010-10-12 
17:13:27 UTC (rev 14189)
@@ -76,3 +76,12 @@
             self.assertEqual(num_poly, len(c.mpoly))
             self.assertEqual(name, c.name)
             self.assertEqual(state, c.state)
+
+    def test06_geography_area(self):
+        "Testing that Area calculations work on geography columns."
+        from django.contrib.gis.measure import A
+        # SELECT ST_Area(poly) FROM geogapp_zipcode WHERE code='77002';
+        ref_area = 5439084.70637573
+        tol = 5
+        z = Zipcode.objects.area().get(code='77002')
+        self.assertAlmostEqual(z.area.sq_m, ref_area, tol)

Modified: django/trunk/docs/ref/contrib/gis/model-api.txt
===================================================================
--- django/trunk/docs/ref/contrib/gis/model-api.txt     2010-10-12 14:09:02 UTC 
(rev 14188)
+++ django/trunk/docs/ref/contrib/gis/model-api.txt     2010-10-12 17:13:27 UTC 
(rev 14189)
@@ -216,7 +216,6 @@
 available for geography columns:
 
 * :lookup:`bboverlaps`
-* :lookup:`exact`, and :lookup:`same_as`
 * :lookup:`coveredby`
 * :lookup:`covers`
 * :lookup:`intersects`

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

Reply via email to