方法1 基于边界搜索
通过经纬度计算算出经纬度距离边界
function googleTest($lng, $lat, $distance)
{
// $distance = 0.2;//单位是10KM
$radius = 6371.393;//代为是KM
//用户当前的地理位置(经纬度的第三种表示方法)
// $lng = '121.606546';
// $lat = '29.918017';
$dlng = rad2deg(2 * asin(sin($distance / (2 * $radius)) / cos($lat)));
$dlat = rad2deg($distance * 10 / $radius);
$lng_left = round($lng - $dlng, 6); //计算实际搜索的四边形的四个边界范围
$lng_right = round($lng + $dlng, 6);
$lat_top = round($lat + $dlat, 6);
$lat_bottom = round($lat - $dlat, 6);
var_dump($lng_left);
var_dump($lng_right);
var_dump($lat_top);
var_dump($lat_bottom);
}
googleTest(121.606546, 29.918017, '0.2');
把距离边界拿到数据库中查询
SELECT * FROM `t_store` WHERE m_lat > 29.900032($lat_bottom) AND m_lat < 29.936002($lat_top) AND m_lng > 121.581848($lng_left) AND m_lng < 121.631244($lng_right) LIMIT 0,30
方法2 基于GeoHash
GeoHash将二维的经纬度转换成字符串,比如下图展示了北京9个区域的GeoHash字符串,分别是WX4ER,WX4G2、WX4G3等等,每一个字符串代表了某一矩形区域。
http://blog.jobbole.com/80633/