GeoDjango с PostGIS — вычисление расстояния неверно

#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