From f909fa84bedb51778a175aadfe4cfe7a91fe06cd Mon Sep 17 00:00:00 2001 From: Sergey Fedoseev Date: Mon, 9 Nov 2015 11:33:40 +0500 Subject: Fixed #25708 -- Fixed annotations with geometry values. --- tests/gis_tests/geoapp/test_expressions.py | 31 ++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 tests/gis_tests/geoapp/test_expressions.py (limited to 'tests') diff --git a/tests/gis_tests/geoapp/test_expressions.py b/tests/gis_tests/geoapp/test_expressions.py new file mode 100644 index 0000000000..c18d07f0e8 --- /dev/null +++ b/tests/gis_tests/geoapp/test_expressions.py @@ -0,0 +1,31 @@ +from unittest import skipUnless + +from django.contrib.gis.db.models import GeometryField, Value, functions +from django.contrib.gis.geos import Point, Polygon +from django.test import TestCase, skipUnlessDBFeature + +from ..utils import postgis +from .models import City + + +@skipUnlessDBFeature('gis_enabled') +class GeoExpressionsTests(TestCase): + fixtures = ['initial'] + + def test_geometry_value_annotation(self): + p = Point(1, 1, srid=4326) + point = City.objects.annotate(p=Value(p, GeometryField(srid=4326))).first().p + self.assertEqual(point, p) + + @skipUnlessDBFeature('supports_transform') + def test_geometry_value_annotation_different_srid(self): + p = Point(1, 1, srid=32140) + point = City.objects.annotate(p=Value(p, GeometryField(srid=4326))).first().p + self.assertTrue(point.equals_exact(p.transform(4326, clone=True), 10 ** -5)) + self.assertEqual(point.srid, 4326) + + @skipUnless(postgis, 'Only postgis has geography fields.') + def test_geography_value(self): + p = Polygon(((1, 1), (1, 2), (2, 2), (2, 1), (1, 1))) + area = City.objects.annotate(a=functions.Area(Value(p, GeometryField(srid=4326, geography=True)))).first().a + self.assertAlmostEqual(area.sq_km, 12305.1, 0) -- cgit v1.3