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 *
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')
from django.contrib.gis.db.models.functions import Distance
from django.contrib.gis.measure import D
from django.contrib.gis.geos import Point
ref_location = Point(1.232433, 1.2323232, srid=4326)
yourmodel.objects.filter(location__distance_lte=(ref_location, D(m=2000)))
.annotate(distance=Distance("location", ref_location))
.order_by("distance")
这是一个不需要GeoDjango的解决方案。
使用如下:
如果使用sqlite,则需要添加
首先,最好建立一个点域,而不是将lat和lnt分开:
然后,可以这样过滤:
在django>;=1.9中删除
.distance(ref_location)
应该改用注释。此外,还应使用使用空间索引的
dwithin
运算符缩小搜索范围,distance不使用减慢查询速度的索引:有关
location__dwithin=(ref_location, 0.02)
的解释,请参见this post相关问题 更多 >
编程相关推荐