我有一个基于django的web应用程序,可以存储位置。在
我有一个android移动应用程序,它从web应用程序中提取位置并将位置保存到web应用程序中。我在我的应用程序的地图覆盖上加载返回给我的位置。在
我想发送我当前的坐标,并返回在一定范围内的位置列表。例如,我发送我的位置并取回半径为2公里的物品。(类似于googleplacesapi的工作原理,只是搜索我的数据)。在
最好是在我的pythondjango应用程序中发送位置坐标并执行所有这些逻辑,然后返回一个正确位置的列表并在地图上显示位置。在
我不知道从哪里开始做这个。 如何根据给定的一组坐标筛选出特定半径(km)内存储的位置?在
GeoDjango集成了Postgres的优秀PostGIS附加组件,它为您免费提供所有这些距离查找。在
如果在存储为Postgres类型的模型中存储了LatLong,则可以运行一个简单的ORM查询来获取与当前LatLong保持一定距离的所有位置。在
GeoDjango非常强大,有很多选项,如果你只需要从列表中找到给定距离内的位置,可以使用简单的数学:distance=sqrt(dx^2+dy^2)
最简单的方法是计算到每个位置的距离和在一定距离内的拾取点。如果您想更快地进行搜索,可以用更复杂的数据结构(例如kd-tree)组织位置。在
Haversine Equation是您问题的答案。不过,解密有点困难,所以我在这里为您提供一个简单的解释:
简单地说:
下面是SQL语句的示例/示例,它将查找距离37,-122坐标25英里半径范围内最近的20个位置。它根据该行的纬度/经度和目标纬度/经度(在下面的等式中由lat/lng给出)计算距离,然后只请求距离值小于25的行,按距离排序整个查询,并将其限制为20个结果。要按公里而不是英里搜索,请将3959替换为6371。在
您可以将sql转换为您想要的任何内容。我的意思是原则不变。在
相关问题 更多 >
编程相关推荐