如何在 Django REST API 中使用 GPS 位置?

epo*_*ord 5 python django postgresql location postgis

我正在使用 Django 为餐厅搜索应用程序制作 REST API。我需要获取距离我所在位置 X 米范围内的餐馆列表。我不确定如何将其存储在我的数据库中(我使用的是 PostgreSQL)以及如何检索此列表。

我在网上搜索了一些选项,我发现 PostGIS 作为 Postgres 的扩展可以在 Django 中使用,但我仍然想听听你的一些建议。

谢谢

小智 4

是的,您想在数据库中使用 PostGIS 扩展,并在应用程序中使用GeoDjango 。

设置并配置完成后,请PointField在模型中使用 a。请注意,您想从django.contrib.gis.db.models.Model现在开始延长。

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))
Run Code Online (Sandbox Code Playgroud)

要查询您的餐厅,请Point使用您的 lat/lng 创建一个对象(请注意,GEOS 采用 lng、lat 顺序的 lat/lng 参数)。然后使用 gis D 测量进行距离查询。下面是查询5000米以内的餐厅:

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))
Run Code Online (Sandbox Code Playgroud)