Używam geodjango i kolekcję punktów w mojej bazie danych. Aby uzyskać queryset punktów w danym obszarze używam to:Jak zwrócić rekord z najniższą odległością od punktu za pomocą geodjango?
queryset = Spot.objects.filter(point__distance_lte=(origin, distance_m))
Moje pytanie brzmi: w jaki sposób można zwrócić tylko jeden punkt (punkt z najmniejszej odległości) z punktu I minęło go?
EDIT
należy wspomnieć, że jestem przekazując współrzędnych i chcąc stworzyć Point
obiekt z nimi. Następnie podaj ten punkt jako źródło i filtruj. Na przykład próbowałem:
from spots.models import *
from django.contrib.gis.geos import *
origin = Point(28.011030, -26.029430)
distance_m = 1000
queryset = Spot.objects.filter(point__distance_lte=(origin, distance_m))
for q in queryset:
print q.distance
Ten fragment kodu daje mi ten błąd:
Traceback (most recent call last):
File "<console>", line 2, in <module>
AttributeError: 'Spot' object has no attribute 'distance'
Co ciekawe, jeśli I wykonaj następujące czynności:
origin = Spot.objects.get(name='Montecasino').point
distance_m = 1000
for city in Spot.objects.distance(origin):
print(city.name, city.distance)
(u'Design Quarter Parking', Distance(m=677.347841801))
(u'Montecasino', Distance(m=0.0))
(u'Fourways', Distance(m=1080.67723755))
czy możesz wyjaśnić, dlaczego masz' [: 1] [0] 'na końcu – Sevenearths
Proszę przejść przez to przed debugowaniem: [https://docs.djangoproject.com/en/1.6/ref/contrib/gis/db-api/# tabele zgodności] właśnie spędził kilka godzin bezsensownie debugując punkt__distance_lte, gdy nie jest obsługiwany przez Mysql – PKaura