我正在尝试使用geodjango找到距离某个位置最近的点。
我尝试使用以下代码:
LocationInfo.objects.filter(coordinates__distance_lte=(user_location, D(km=2)))
但它仅在位置在指定距离内时才有效(在这种情况下为D(km=2)
)。
我需要在查询过程中找到离用户最近的点而不使用任何限制。
答案 0 :(得分:6)
我们假设您的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< = version< 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()
答案 1 :(得分: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()