小编典典

Django按距离排序

python

我有以下模型:

class Vacancy(models.Model):
    lat = models.FloatField('Latitude', blank=True)
    lng = models.FloatField('Longitude', blank=True)

我应该如何查询以距离排序(距离为无穷大)?

如果需要,可以在PosgreSQL,GeoDjango上工作。


阅读 189

收藏
2020-12-20

共1个答案

小编典典

注意:请检查下面的cleder答案,其中提到了Django版本中的弃用问题(距离->批注)。

首先,最好使一个点字段而不是使lat和lnt分开:

from django.contrib.gis.db import models

location = models.PointField(null=False, blank=False, srid=4326, verbose_name='Location')

然后,您可以像这样过滤它:

from django.contrib.gis.geos import Point
from django.contrib.gis.measure import D

distance = 2000 
ref_location = Point(1.232433, 1.2323232)

res = YourModel.objects.filter(
    location__distance_lte=(
        ref_location,
        D(m=distance)
    )
).distance(
    ref_location
).order_by(
    'distance'
)
2020-12-20