sam*_*m23 7 python django geodjango
我试图使用geodjango找到距离某个位置最近的点.
我尝试使用以下代码:
LocationInfo.objects.filter(coordinates__distance_lte=(user_location, D(km=2)))
Run Code Online (Sandbox Code Playgroud)
但它仅在位置在指定距离内时才有效(D(km=2)在本例中).
我需要在查询过程中找到离用户最近的点而不使用任何限制.
假设您LocationInfo的几何字段名为position:
对于Django版本> = 1.9:
您可以使用以下Distance()功能:
from django.contrib.gis.db.models.functions import Distance
LocationInfo.objects.annotate(
distance=Distance('position', user_location)
).order_by('distance').first()
Run Code Online (Sandbox Code Playgroud)
它将最接近的对象返回到 user_location
对于Django 1.6 <=版本<1.9:
您可以使用以下.distance()方法:
LocationInfo.objects.distance(user_location).order_by('distance').first()
Run Code Online (Sandbox Code Playgroud)
对于Django版本<1.6:
该.first()方法不存在,因此您必须按以下方式获取有序查询集的第一个:
LocationInfo.objects.distance(user_location).order_by('distance')[:1].get()
Run Code Online (Sandbox Code Playgroud)