Fixed #27573 -- Made Distance on geodetic coordinates return a raw value on MySQL.
This commit is contained in:
parent
35c0025151
commit
898e623db0
|
@ -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):
|
||||
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
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Reference in New Issue