thinkphp通过经纬度获取周边信息的例子

作者:袖梨 2022-06-25

thinkphp实现附近范围的查询,如附近的人和附近团购之类。首先,要定位用户的经纬度。客户端定位的方法可以使用地图api或者用html5浏览器定位(比较不稳定而且不会太精确)。然后,将当前经纬度,和需要搜索的距离范围,计算一个经纬度范围,这个范围就是“附近”。要有mysql数据库的支持,效果图:

 代码如下 复制代码

/*
    参数说明:
    $lng  经度
    $lat   纬度
    $distance  周边半径  默认是500米(0.5Km)
*/

function returnSquarePoint($lng, $lat,$distance = 0.5)
{
    $dlng =  2 * asin(sin($distance / (2 * 6371)) / cos(deg2rad($lat)));
    $dlng = rad2deg($dlng);
    $dlat = $distance/6371;
    $dlat = rad2deg($dlat);
    return array(
    'left-top'=>array('lat'=>$lat + $dlat,'lng'=>$lng-$dlng),
    'right-top'=>array('lat'=>$lat + $dlat, 'lng'=>$lng + $dlng),
    'left-bottom'=>array('lat'=>$lat - $dlat, 'lng'=>$lng - $dlng),
    'right-bottom'=>array('lat'=>$lat - $dlat, 'lng'=>$lng + $dlng)
    );
}

在文件中调用并组成条件:

 代码如下 复制代码

$array = $this->returnSquarePoint($latitude, $longitude, 5);

生成Thinkphp查询条件

 代码如下 复制代码

$map = array(
   "latitude" => array(array('EGT',$array['right-bottom']['lat']),array('ELT',$array['left-top']['lat']),'or'),
   "longitude" => array(array('EGT',$array['left-top']['lng']),array('ELT',$array['right-bottom']['lng']),'or'),
   "status" => array("eq",1),
);

生成sql:

 
查询结果:

相关文章

精彩推荐