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

Mic*_*ael 5 django postgis geodjango django-1.9

我使用 Postgis 和 Django 来存储地理点。我有一个如下所示的模型:

from django.contrib.gis.db import models
class Event(models.Model)
    position = models.PointField()
Run Code Online (Sandbox Code Playgroud)

我有两个事件(ev1,ev2)。这是每个位置的值:

SRID=4326;POINT (-73.6335140000000052 45.5472019999999986)
SRID=4326;POINT (-73.6267909999999972 45.5459189999999978)
Run Code Online (Sandbox Code Playgroud)

我的目标是获得这两点之间的距离(以米为单位)。如果我做:

ev1.position.distance(ev2.position)
Run Code Online (Sandbox Code Playgroud)

我明白了0.006844327432269004 如何将此值转换为米?

谢谢!

Mic*_*ael 5

我能够让它工作,但只能通过查询集。在这里我想获得事件 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))
Run Code Online (Sandbox Code Playgroud)

“position”是 PointField 的名称