[Fixed]-How To Find Nearest Point From User Location using geodjango?

21👍

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()

0👍

This will give you the nearest location info:

LocationInfo.geo_objects.distance(user_location).order_by('distance')[0]

where geo_objects is Model manager for LocationInfo

from django.contrib.gis.db import models as gis_models

class LocationInfo(models.Model):

    geo_objects = gis_models.GeoManager()

Leave a comment