Mam następujący model.Jak filtrować model django z współrzędnymi długości i szerokości geograficznej, które mieszczą się w określonym promieniu
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
Jeśli moja obecna szerokość geograficzna jest &:
current_lat = 43.648
current_long = 79.404
Zrobiłem rozeznanie i natrafiliśmy na Haversine Equation który oblicza odległość między dwoma lokalizacji współrzędnych. Poniżej przedstawiono równanie znalazłem:
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
Chciałbym zwrócić wszystkie obiekty, miejsca, które mieszczą się w promieniu 10 km, w jaki sposób można filtrować je w taki sposób, że powróci tylko wszystkie obiekty miejscu, które mieszczą się w promieniu 10 km?
LocationsNearMe = Location.objects.filter(#This is where I am stuck)
Czy mimo to mogę wdrożyć równanie Haversine do filtrowania, tak że zwraca tylko obiekty lokalizacji, które mieszczą się w promieniu 10 km?
Szukam dobrze szczegółowej odpowiedzi. Doceń pomoc.
powinieneś spróbować użyć geodjango https://docs.djangoproject.com/en/dev/ref/contrib/gis/ – user710907
Zdecydowanie zajrzyj do geodjango, mam rozwiązanie tego problemu b ut it wymaga geodjango: https://gist.github.com/omouse/5623772 –
@omouse dzięki za prowadzenie we właściwym kierunku, w twoim rozwiązaniu masz punkt, ale tutaj w tym modelu jest on podzielony na dwa pola: długość geograficzna i szerokość geograficzna. Czy mógłbyś umieścić odpowiedź na ten przypadek poniżej w sekcji odpowiedzi. – noahandthewhale