小编典典

在给定坐标的一定范围内查找项目

python

我有一个基于django的网络应用程序,用于存储位置。

我有一个android移动应用程序,可从网络应用程序中提取位置并将位置保存到网络应用程序中。我在应用程序中的mapoverlay上加载后,位置信息又返回给我。

我想发送当前坐标并返回一定范围内的位置列表。例如,我发送我的位置并取回半径2公里以内的物品。(类似于Google Places
API的工作原理,只是搜索我的数据)。

最好是发送位置坐标并在我的python django应用中执行所有这些逻辑,然后返回正确位置的列表并仅在我的地图上显示位置。

我不知道从哪里开始。如何根据一组给定的坐标过滤出我在一定半径(km)内存储的位置?


阅读 134

收藏
2021-01-20

共1个答案

小编典典

Haversine方程式是您的问题的答案。但是,解密有点困难,因此在这里我为您提供一个简单的解释:

简而言之:

这是示例/示例SQL语句,该语句将查找距37,-122坐标25英里范围内的最近20个位置。它根据该行的纬度/经度和目标纬度/经度(由下面的方程式中的lat
/
lng给出)计算距离,然后仅询问距离值小于25的行,对整个查询进行排序距离,并将其限制为20个结果。要按公里而不是英里进行搜索,请将3959替换为6371。

SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;

您可以将sql转换为所需的任何内容。我的意思是原理保持不变。

2021-01-20