summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/contrib/gis/db/models/functions.py10
-rw-r--r--tests/gis_tests/distapp/tests.py10
2 files changed, 13 insertions, 7 deletions
diff --git a/django/contrib/gis/db/models/functions.py b/django/contrib/gis/db/models/functions.py
index 3dd8efaa22..04e81e5428 100644
--- a/django/contrib/gis/db/models/functions.py
+++ b/django/contrib/gis/db/models/functions.py
@@ -253,15 +253,13 @@ class DistanceResultMixin:
def convert_value(self, value, expression, connection, context):
if value is None:
return None
+ dist_att = None
geo_field = self.geo_field
if geo_field.geodetic(connection):
- dist_att = 'm'
+ if connection.features.supports_distance_geodetic:
+ dist_att = 'm'
else:
- units = geo_field.units_name(connection)
- if units:
- dist_att = DistanceMeasure.unit_attname(units)
- else:
- dist_att = None
+ dist_att = geo_field.units_name(connection)
if dist_att:
return DistanceMeasure(**{dist_att: value})
return value
diff --git a/tests/gis_tests/distapp/tests.py b/tests/gis_tests/distapp/tests.py
index 31987d9ce8..aafd5f8035 100644
--- a/tests/gis_tests/distapp/tests.py
+++ b/tests/gis_tests/distapp/tests.py
@@ -5,7 +5,7 @@ from django.contrib.gis.geos import GEOSGeometry, LineString, Point
from django.contrib.gis.measure import D # alias for Distance
from django.db import connection
from django.db.models import F, Q
-from django.test import TestCase, skipUnlessDBFeature
+from django.test import TestCase, skipIfDBFeature, skipUnlessDBFeature
from ..utils import no_oracle, oracle, postgis, spatialite
from .models import (
@@ -360,6 +360,14 @@ class DistanceFunctionsTests(TestCase):
for i, c in enumerate(qs):
self.assertAlmostEqual(sphere_distances[i], c.distance.m, tol)
+ @skipIfDBFeature("supports_distance_geodetic")
+ @skipUnlessDBFeature("has_Distance_function")
+ def test_distance_function_raw_result(self):
+ distance = Interstate.objects.annotate(
+ d=Distance(Point(0, 0, srid=4326), Point(0, 1, srid=4326)),
+ ).first().d
+ self.assertEqual(distance, 1)
+
@no_oracle # Oracle already handles geographic distance calculation.
@skipUnlessDBFeature("has_Distance_function", 'has_Transform_function')
def test_distance_transform(self):