#python #django #postgis #geodjango
#python #django #postgis #geodjango
Вопрос:
Я пытаюсь использовать GeoDjango с PostGIS для измерения расстояний, но результаты, которые я получаю, отклоняются на 20%.
Для тестирования я выбрал 2 случайные точки в океане: (40.607532, -72.829369) и (40.366040, -73.556856).
Чтобы получить ожидаемый результат, я использовал 2 разных метода:
- Функция Google maps «измерить расстояние».
- Мой собственный код на python с использованием вычисления расстояния по большой дуге.
Оба дают мне одинаковый результат в 41,71 мили. Джанго дает мне 50,49.
Вот мой код:
# models.py
from django.contrib.gis.db import models
class Location(models.Model):
point = models.PointField(null=True)
Затем из оболочки django:
>>> from loc.models import Location
>>> from django.contrib.gis.geos import Point
>>> from django.contrib.gis.db.models.functions import Distance
>>> loc = Location(point=Point(40.366040, -73.556856, srid=4326))
>>> loc.save()
>>> pnt = Point(40.607532, -72.829369, srid=4326)
>>> qs = Location.objects.annotate(distance=Distance('point', pnt))
>>> qs[0].distance.mi
50.4954671273202
Ответ №1:
ОК. Я понял. Широта и lng были изменены на противоположные. Точка должна иметь lng в качестве первого аргумента и lat в качестве второго. У Google Maps все наоборот.
После переключения, ТАДА…
>>> qs[0].distance.mi
41.7114806274482