我有一个基于django的网络应用程序,用于存储位置。
我有一个android移动应用程序,可从网络应用程序中提取位置并将位置保存到网络应用程序中。我在应用程序中的mapoverlay上加载后,位置信息又返回给我。
我想发送当前坐标并返回一定范围内的位置列表。例如,我发送我的位置并取回半径2公里以内的物品。(类似于Google Places API的工作原理,只是搜索我的数据)。
最好是发送位置坐标并在我的python django应用中执行所有这些逻辑,然后返回正确位置的列表并仅在我的地图上显示位置。
我不知道从哪里开始。如何根据一组给定的坐标过滤出我在一定半径(km)内存储的位置?
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转换为所需的任何内容。我的意思是原理保持不变。