【发布时间】:2020-11-06 12:27:26
【问题描述】:
我已将用户的坐标保存在 User 模型中。帖子模型具有latitude、longitude 和radius 字段。只有该(帖子)附近的用户才能看到该帖子。我不知道如何在这里使用filter(),所以我使用了以下方法:
post=Posts.objects.all()
for a in post:
distance= geopy.distance.geodesic((lat1,lng1), (a.latitude, a.longitude)).km
print(distance)
if distance < a.radius:
p.append(a)
else:
continue
这里,lat1 和lng1 是当前User 的坐标。建议是否有更好的方法,因为这似乎非常低效。
【问题讨论】:
-
如果您使用 PostGIS 或 SpatiaLite 数据库,您可以使用 GeoDjango 查询。
-
@WillemVanOnsem 我可以,但是对于我想做的一个简单查询来说很麻烦。我很确定必须有一种简单的方法来完成这项工作。
-
在内部,此类数据库通常使用spatial k-d tree 来索引数据。这使得查找通常需要 O(log n) 而不是线性方法。
-
@WillemVanOnsem PostGIS 就是这样。谢谢你。如果有人对此有独特的方法,我会保持开放状态。
标签: django django-models django-views django-queryset