我正在努力使用戶所在位置的10英里範圍內的所有事件。我的模型是這個樣子:在一個點的x英里內找到物體
class User(models.Model):
location = models.PointField()
...
class Event(models.Model):
location = models.PointField()
...
在我的測試中,當我檢查用戶和事件之間的距離,我得到的值11.5122663513
:
from geopy.distance import vincenty
print vincenty(request.user.location, event.location).miles # 11.5122663513
然而,當我查詢所有10英里用戶的位置的範圍內活動時,返回的事件:
Event.objects.filter(location__distance_lte=(request.user.location, D(mi=10))).count() # 1
只有當我把半徑不到4英里,並過濾生效:
Event.objects.filter(location__distance_lte=(request.user.location, D(mi=3))).count() # 0
我跟着docs' example幾乎到了,所以我不認爲我的查詢是問題。
什麼可能導致這種差異?
我結束了緩衝區出點到一個圓圈選項。對於任何與該選項一起使用的人,請務必將[將半徑轉換爲度數](http://stackoverflow.com/questions/5217348/how-do-i-convert-kilometres-to-degrees-in-geodjango- GEOS)。 – yndolok