Как рассчитать расстояние между двумя 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