Sto usando geodjango e ho una collezione di punti nel mio database. Per ottenere un set di query di punti all'interno di una certa area io uso questo:Come restituire un record con la distanza minima da un punto utilizzando geodjango?
queryset = Spot.objects.filter(point__distance_lte=(origin, distance_m))
La mia domanda è come posso tornare un solo punto (il punto con la distanza più basso) dal punto ho superato esso?
EDIT
Devo dire che sto passando in coordinate e di voler creare un oggetto Point
con loro. Quindi passare quel punto come origine e filtrare contro quello. Per esempio ho provato:
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
questo frammento di codice mi dà questo errore:
Traceback (most recent call last):
File "<console>", line 2, in <module>
AttributeError: 'Spot' object has no attribute 'distance'
È interessante notare che se faccio la seguente:
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))
puoi spiegare perché hai' [: 1] [0] 'alla fine – Sevenearths
Passa a questo prima di eseguire il debug: [https://docs.djangoproject.com/en/1.6/ref/contrib/gis/db-api/# compatibility-tables] ha passato un paio di ore inutilmente al debug di point__distance_lte quando non è supportato per Mysql – PKaura