Как рассчитать расстояние между двумя PointField?

Я использую Postgis с Django для хранения географических точек. У меня есть модель, подобная следующей:

from django.contrib.gis.db import models
class Event(models.Model)
    position = models.PointField()

У меня есть два события (ev1, ev2). Вот значение позиции каждого:

SRID=4326;POINT (-73.6335140000000052 45.5472019999999986)
SRID=4326;POINT (-73.6267909999999972 45.5459189999999978)

Моя цель - получить расстояние в метрах между этими двумя точками. Если я сделаю:

ev1.position.distance(ev2.position)

я получил 0.006844327432269004 Как я могу преобразовать это значение в метрах?

Спасибо!

4 ответа

Решение

Я смог заставить его работать, но только через набор запросов. Здесь я хотел получить расстояние между событием 3 и всеми другими событиями:

from django.contrib.gis.measure import Distance

p2 = Event.objects.get(id=3).position
for event in Event.objects.all().exclude(id=3).annotate(distance=Distance('position', p2)):
    print('{0} - {1}'.format(event.id, event.distance.m))

"position" - это имя PointField

pnt.distance(pnt2) * 100

даст вам расстояние в км. Измените соответственно

В соответствии с этим: https://docs.djangoproject.com/en/1.9/ref/contrib/gis/measure/

если у вас есть:

in_meters = ev1.position.distance(ev2.position).m

вы получите результаты в метрах

Вместо класса Distance для выполнения аннотации используется функция базы данных Distance:

          from django.contrib.gis.db.models.functions import Distance
Другие вопросы по тегам