如何解决带有PostGIS的GeoDjango-距离计算错误
我正在尝试将GeoDjango与PostGIS结合使用以测量距离,但得到的结果却减少了20%。
为了进行测试,我在海洋中选择了两个随机点:(40.607532,-72.829369)和(40.366040,-73.556856)。
为了获得预期的结果,我使用了两种不同的方法:
- google地图的“测量距离”功能。
- 使用大弧距计算的我自己的python代码。
两者都给了我41.71英里的相同结果。 Django给了我50.49。
这是我的代码:
# models.py
from django.contrib.gis.db import models
class Location(models.Model):
point = models.PointField(null=True)
然后从Django shell:
>>> from loc.models import Location
>>> from django.contrib.gis.geos import Point
>>> from django.contrib.gis.db.models.functions import Distance
>>> loc = Location(point=Point(40.366040,-73.556856,srid=4326))
>>> loc.save()
>>> pnt = Point(40.607532,-72.829369,srid=4326)
>>> qs = Location.objects.annotate(distance=Distance('point',pnt))
>>> qs[0].distance.mi
50.4954671273202
解决方法
好的。我知道了。纬度和经度反转。 Point应该将lng作为第一个参数,并将lat作为第二个参数。 Google Maps则相反。
切换后,TADA ...
>>> qs[0].distance.mi
41.7114806274482
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。