J'essaie de récupérer certains postes en fonction de leur proximité géographique.
Comme vous pouvez le voir dans le code, j'utilise GeoDjango et le code est exécuté dans une vue.
Le problème est que le filtre de distance semble être complètement ignoré. Quand je vérifie les distances sur le jeu de requête, j'obtiens les distances prévues (1m et 18km) mais le poste de 18km ne devrait pas avoir été récupéré.Geodjango requête à distance ne récupérant pas les résultats corrects
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)
Résultat:
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
J'ai essayé cet initialiseur, il me semble plus correct de vous remercier. Cependant, il ne semble pas avoir résolu le problème. Il ressemble presque à l'unité de distance par défaut est les décamètres, car cela fonctionne correctement. 'posts = Post.objects.filter (point__distance_lte = (pnt, 0.05)) 'ceci recherche dans une gamme de 5km – Evan
@Evan Comme je vois ici: https://epsg.io/28992, l'unité par défaut est mètres. J'ai édité ma réponse pour inclure une explication possible du problème. –