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.