如何计算两个PointField之间的距离?

时间:2016-03-15 19:50:00

标签: django postgis geodjango django-1.9

我使用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 如何以米为单位转换此值?

谢谢!

3 个答案:

答案 0 :(得分:3)

我能够使它工作,但只能通过查询集。在这里,我希望获得事件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的名称

答案 1 :(得分:2)

根据这个:enter image description here

如果你有:

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

您将获得以米为单位的结果

答案 2 :(得分:2)

pnt.distance(pnt2)* 100

会给你以km为单位的距离。相应地改变