Cómo filtrar un modelo django con coordenadas de latitud y longitud que caen dentro de un radio determinado
Tengo el siguiente modelo.
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
Si mi latitud y longitud actual es:
current_lat = 43.648
current_long = 79.404
Hice una investigación y me encontré con elEcuación de Haversine que calcula la distancia entre dos coordenadas de ubicación. A continuación se muestra la ecuación que encontré:
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
Me gustaría devolver todos los objetos de ubicación que se encuentran dentro de un radio de 10 km. ¿Cómo puedo filtrarlo de tal manera que solo devolverá todos los objetos de ubicación que se encuentren dentro de este radio de 10 km?
LocationsNearMe = Location.objects.filter(#This is where I am stuck)
¿Hay alguna forma de implementar la ecuación de Haversine en el filtrado de modo que solo devuelva los objetos de ubicación que se encuentren dentro de un radio de 10 km?
Estoy buscando una respuesta bien detallada. Aprecio la ayuda.