Reputation: 471
I am making a REST API with Django for a restaurant search app. I need to get a list of restaurants within a distance of X meters from my location. I am not sure how to store this on my database (I am using PostgreSQL) and how to retrieve this list.
I searched online some options and I found PostGIS as an extension to Postgres that can be used in Django, but I still want to listen to some of your recommendations.
Thank you
Upvotes: 5
Views: 3142
Reputation: 366
Yes, you want to use PostGIS extension in your database, and GeoDjango in your app.
Once you have that set up and configured, use a PointField
in your model. Note that you want to extend from django.contrib.gis.db.models.Model
now.
from django.contrib.gis.db import models
from django.contrib.gis.geos import Point
class Restaurant(models.Model):
point = models.PointField()
Restaurant.objects.create(point=Point(lng, lat))
To query for your restaurants, create a Point
object with your lat/lng (note that GEOS takes lat/lng parameters in lng, lat order). Then use the gis D measurement for your distance query. Here is a query for restaurants within 5000 meters:
from django.contrib.gis.geos import Point
from django.contrib.gis.measure import D
my_loc = Point(my_lng, my_lat)
Restaurant.objects.filter(point__distance_lte=(my_loc, D(m=5000))
Upvotes: 4