diff options
| author | Justin Bronn <jbronn@gmail.com> | 2010-10-12 17:27:07 +0000 |
|---|---|---|
| committer | Justin Bronn <jbronn@gmail.com> | 2010-10-12 17:27:07 +0000 |
| commit | 4ed10675f953e4349ecd3ad386ef5c8485d0220f (patch) | |
| tree | 8b17e2813ed852717f02fc61ccec5ddd7a1c934e /django | |
| parent | 3c8bc8c64b2620e44275ff703c47b77cc77a0c59 (diff) | |
[1.2.X] Enabled area calculations for geography columns.
Backport of r14189 from trunk.
git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@14190 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django')
| -rw-r--r-- | django/contrib/gis/db/models/query.py | 5 | ||||
| -rw-r--r-- | django/contrib/gis/tests/geogapp/models.py | 2 | ||||
| -rw-r--r-- | django/contrib/gis/tests/geogapp/tests.py | 9 |
3 files changed, 14 insertions, 2 deletions
diff --git a/django/contrib/gis/db/models/query.py b/django/contrib/gis/db/models/query.py index 79eed853f9..4df1a3ab78 100644 --- a/django/contrib/gis/db/models/query.py +++ b/django/contrib/gis/db/models/query.py @@ -48,7 +48,10 @@ class GeoQuerySet(QuerySet): 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: diff --git a/django/contrib/gis/tests/geogapp/models.py b/django/contrib/gis/tests/geogapp/models.py index 3198fbd36d..3696ba2ff4 100644 --- a/django/contrib/gis/tests/geogapp/models.py +++ b/django/contrib/gis/tests/geogapp/models.py @@ -10,7 +10,7 @@ class Zipcode(models.Model): 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) diff --git a/django/contrib/gis/tests/geogapp/tests.py b/django/contrib/gis/tests/geogapp/tests.py index 3dea930afd..cb69ce94e1 100644 --- a/django/contrib/gis/tests/geogapp/tests.py +++ b/django/contrib/gis/tests/geogapp/tests.py @@ -76,3 +76,12 @@ class GeographyTest(TestCase): 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) |
