根据业务,往往需要搜索一个范围内,所有商铺或者人或者什么的需求,当然,前提是所有将要搜索的数据肯定是在自己的数据库中,并且记录了坐标。
比如,根据图1,搜O点周边500米范围内的所有目标。
一般获取两点之间的距离,要通过一个球面距离计算方法,并且这个方法加到数据库的搜索SQL中:
$distance = ",ROUND(6378.138 * 2 * ASIN(
SQRT(
POW(SIN((" . $sql['addr_lat'] . " * PI() / 180 - addr_lat * PI() / 180) / 2), 2) +
COS(" . $sql['addr_lat'] . " * PI() / 180) * COS(addr_lat * PI() / 180) *
POW(SIN((" . $sql['addr_lng'] . " * PI() / 180 - addr_lng * PI() / 180) / 2), 2)
)
) * 1000) AS distance";
当我们对数据表中所有的数据,进行球面距离计算搜索的时候,无疑是一个巨大的计算量,而我们现在就是要想办法,缩小这个搜索范围,以减少搜索量和计算量。
思路:
图1我们从O点,向外扩张500