Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How To Find Nearest Point From User Location using geodjango?

I am trying to find the nearest point to a location using geodjango.

I tried using the following code:

LocationInfo.objects.filter(coordinates__distance_lte=(user_location, D(km=2)))

But It only works if the location is within the specified distance (D(km=2) in this case).

I need to find the point nearest to the user without using any limit during query.

like image 367
sam23 Avatar asked Jun 19 '17 06:06

sam23


1 Answers

Let's assume that your LocationInfo has it's geometry field named position:

For Django version >= 1.9:

You can use the Distance() function:

from django.contrib.gis.db.models.functions import Distance

LocationInfo.objects.annotate(
    distance=Distance('position', user_location)
).order_by('distance').first()

Which will return the nearest object to the user_location

For Django 1.6 <= version < 1.9:

You can use the .distance() method:

LocationInfo.objects.distance(user_location).order_by('distance').first()

For Django version < 1.6:

The .first() method does not exist so you have to get the first of the ordered queryset as follows:

 LocationInfo.objects.distance(user_location).order_by('distance')[:1].get()
like image 85
John Moutafis Avatar answered Oct 27 '22 10:10

John Moutafis