2016-03-15 8 views
1

Я использую Postgis с Django для хранения географических точек. У меня есть такая модель, как:Как рассчитать расстояние между двумя PointField?

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 Как я могу преобразовать это значение в метрах?

Спасибо!

+0

Если вы используете тип географии, результат расстояния будет в метрах. См. Https://docs.djangoproject.com/en/1.9/ref/contrib/gis/model-api/#django.contrib.gis.db.models.GeometryField.geography – emily

ответ

3

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

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)) 

"позиция" этим именем PointField

2

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

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

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

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

+5

Функция расстояния возвращает только поплавок. Я получаю эту ошибку: AttributeError: объект 'float' не имеет атрибута 'm' – Michael

1

pnt.distance (pnt2) * 100

даст вам расстояние в км. Соответствует