如何使用 geodjango 从用户位置查找最近点?
How To Find Nearest Point From User Location using 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()
哪个 return 对象最接近 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()
我正在尝试使用 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()
哪个 return 对象最接近 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()