最近做项目,经常要基于当前位置查找附近的人或店铺,之前写过一种关于数据库的查询方式,但是感觉数据上几百万条后查询速度很慢,所以研究了下算法,把当前位置的几公里内的外接正方形的经纬度求出来,如下图所示,然后再对数据库进行范围搜索即可,加上BTREE索引就能实现很快的查询了,下面把源码贴一下。
Java源码/**
* 附近选择
* @param longitude 经度
* @param latitude 纬度
* @param distance 搜索范围
* @return 经纬度范围
*/
public static Map findNeighDrugstore(double longitude,double latitude, double distance) {
double minlat = 0;
double maxlat = 0;
double minlng = 0;
double maxlng = 0;
// 先计算查询点的经纬度范围
double r = 6371;// 地球半径千米
double dis = distance;// 距离(单位:千米)
double dlng = 2 * Math.asin(Math.sin(dis / (2 * r))