2017-06-19 103 views
2

我正在尝试使用geodjango查找最近的位置。如何使用geodjango从用户位置查找最近点?

我尝试使用下面的代码:

LocationInfo.objects.filter(coordinates__distance_lte=(user_location, D(km=2))) 

,但它只有在位置是规定的距离(D(km=2)在这种情况下)内工作。

我需要在查询期间找到离用户最近的点,而不使用任何限制。

回答

1

让我们假设你的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() 
+0

我对着下面的错误模型管理器:类型错误:__init __()采用最多2参数(3给出)试用上述代码 – sam23

+0

我在项目中使用django 1.11。 – sam23

+0

你是否像这样导入了'Distance':'from django.contrib.gis.db.models.functions import Distance'? –

0

这会给你最近的位置信息:

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()