Ich versuche, einige Beiträge abhängig von ihrer geografischen Nähe abrufen.
Wie Sie im Code sehen können, verwende ich GeoDjango und der Code wird innerhalb einer Ansicht ausgeführt.
Das Problem ist, dass der Entfernungsfilter vollständig ignoriert wird.Geodjango Entfernung Abfrage nicht korrekte Ergebnisse abrufen
Wenn ich die Abstände auf dem Queryset überprüfe, bekomme ich die erwarteten Distanzen (1m und 18km), aber die 18km Post sollte nicht abgerufen werden.
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)
Ergebnis:
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
Ich habe diesen Initialisierer ausprobiert, es scheint mir korrekter zu sein, danke. Es scheint jedoch das Problem nicht gelöst zu haben. Es sieht fast so aus, als ob die Standard-Entfernungseinheit Dekameter ist, weil dies korrekt funktioniert. 'posts = Post.objects.filter (point_distance_lte = (pnt, 0.05)) 'das sucht innerhalb einer Reichweite von 5km – Evan
@Evan Wie ich hier sehe: https://epsg.io/28992, ist die Standardeinheit Meter. Ich habe meine Antwort so bearbeitet, dass sie eine mögliche Erklärung für das Problem enthält. –