我正在尝试使用geodjango查找最近的位置。如何使用geodjango从用户位置查找最近点?
我尝试使用下面的代码:
LocationInfo.objects.filter(coordinates__distance_lte=(user_location, D(km=2)))
,但它只有在位置是规定的距离(D(km=2)
在这种情况下)内工作。
我需要在查询期间找到离用户最近的点,而不使用任何限制。
我正在尝试使用geodjango查找最近的位置。如何使用geodjango从用户位置查找最近点?
我尝试使用下面的代码:
LocationInfo.objects.filter(coordinates__distance_lte=(user_location, D(km=2)))
,但它只有在位置是规定的距离(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()
将返回与user_location
最近的对象
Django的1.6 < =版本< 1.9:
可以使用.distance()
方法:
LocationInfo.objects.distance(user_location).order_by('distance').first()
Django的版本< 1.6:
的.first()
方法不存在,所以你必须获得有序查询集的第一个,如下所示:
LocationInfo.objects.distance(user_location).order_by('distance')[:1].get()
这会给你最近的位置信息:
LocationInfo.geo_objects.distance(user_location).order_by('distance')[0]
其中geo_objects是LocationInfo
from django.contrib.gis.db import models as gis_models
class LocationInfo(models.Model):
geo_objects = gis_models.GeoManager()
我对着下面的错误模型管理器:类型错误:__init __()采用最多2参数(3给出)试用上述代码 – sam23
我在项目中使用django 1.11。 – sam23
你是否像这样导入了'Distance':'from django.contrib.gis.db.models.functions import Distance'? –