So filtern Sie ein Django-Modell mit Längen- und Breitengradkoordinaten, die in einen bestimmten Radius fallen

Ich habe folgendes Modell.

class Location(models.Model):
    name = models.CharField(max_length = 128, blank = True)
    address =models.CharField(max_length = 200, blank= True)
    latitude = models.DecimalField(max_digits=6, decimal_places=3)
    longitude = models.DecimalField(max_digits=6, decimal_places=3)

    def __unicode__(self):
        return self.name

Wenn mein aktueller Breiten- und Längengrad ist:

current_lat = 43.648
current_long = 79.404

Ich habe ein paar Nachforschungen angestellt und bin auf die gestoßenHaversinus-Gleichung Hiermit wird die Entfernung zwischen zwei Ortskoordinaten berechnet. Unten ist die Gleichung, die ich gefunden habe:

import math

def distance(origin, destination):
    lat1, lon1 = origin
    lat2, lon2 = destination
    radius = 6371 # km

    dlat = math.radians(lat2-lat1)
    dlon = math.radians(lon2-lon1)
    a = math.sin(dlat/2) * math.sin(dlat/2) + math.cos(math.radians(lat1)) \
        * math.cos(math.radians(lat2)) * math.sin(dlon/2) * math.sin(dlon/2)
    c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))
    d = radius * c

    return d

Ich möchte alle Standortobjekte innerhalb eines Radius von 10 km zurückgeben. Wie kann ich sie so filtern, dass nur alle Standortobjekte innerhalb dieses Radius von 10 km zurückgegeben werden?

LocationsNearMe = Location.objects.filter(#This is where I am stuck)

Kann ich die Haversine-Gleichung trotzdem in die Filterung implementieren, sodass nur die Standortobjekte zurückgegeben werden, die in einen Umkreis von 10 km fallen?

Ich suche nach einer detaillierten Antwort. Schätzen Sie die Hilfe.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage