方法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/