Django按距离排序

发布于 2021-01-29 19:21:35

我有以下模型:

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

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

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

关注者
0
被浏览
43
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    注意:请检查下面的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'
    )
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看