如何计算两个 PointField 之间的距离?
How to calculate distance between two 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
如何将此值转换为米?
谢谢!
根据这个:https://docs.djangoproject.com/en/1.9/ref/contrib/gis/measure/#example
如果你有:
in_meters = ev1.position.distance(ev2.position).m
您将获得以米为单位的结果
我能够让它工作,但只能通过查询集。在这里,我想获得事件 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
会相应地给你 km.Change 的距离
代替class距离,使用数据库函数距离来执行注释:
from django.contrib.gis.db.models.functions import Distance
我使用 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
如何将此值转换为米?
谢谢!
根据这个:https://docs.djangoproject.com/en/1.9/ref/contrib/gis/measure/#example
如果你有:
in_meters = ev1.position.distance(ev2.position).m
您将获得以米为单位的结果
我能够让它工作,但只能通过查询集。在这里,我想获得事件 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
会相应地给你 km.Change 的距离
代替class距离,使用数据库函数距离来执行注释:
from django.contrib.gis.db.models.functions import Distance