我想检索一些职位,取决于他们的地理位置邻近。
正如您在代码中看到的,我正在使用GeoDjango,代码在视图中执行。
问题是距离过滤器似乎被完全忽略。Geodjango距离查询不检索正确的结果
当我检查查询集的距离时,我得到预期的距离(1米和18公里),但18公里的职位不应该被检索。
def get(self, request, format=None):
latlon=request.query_params
pnt = GEOSGeometry('SRID=28992;POINT(%s %s)'%(latlon['lat'],latlon['lon']))
posts = Post.objects.filter(point__distance_lte=(pnt, D(km=1)))
serialized = PostSerializer(posts, many=True)
for post in posts:
distance = pnt.distance(post.point)
print("Km distance:",distance * 100)
return JsonResponse(serialized.data, safe=False)
结果:
Km distance: 0.00015231546206626192
Km distance: 18.317378752081577
[18/Jul/2017 13:24:35] "GET /api/posts/?lon=5.8372264&lat=51.8125626 HTTP/1.1" 200 144
我试过这个初始化器,对我来说似乎更正确的谢谢你。但它似乎并没有解决这个问题。它几乎看起来像默认距离单位是十进制数,因为这可以正常工作。 'posts = Post.objects.filter(point__distance_lte =(pnt,0。05))'这个搜索范围在5km以内 – Evan
@Evan正如我在这里看到的:https://epsg.io/28992,默认单位是米。我编辑了我的答案,包括对该问题的可能解释。 –