thinkphp5范围查询_ThinkPHP实现经纬度范围查询

ThinkPHP实现经纬度范围查询

JamesLiu • 2019 年 05 月 13 日

经纬度范围获取

/**

* Desc: 根据经纬度,半径范围获取附近

* User: JamesLiu

* Date: 2019/5/13

* Time: 15:38

* @param $longitude 经度

* @param $latitude 纬度

* @param $raidus 半径范围(单位:米)

* @return array

*/

public function getAround($longitude, $latitude, $raidus)

{

$PI = 3.14159265;

$degree = (24901 * 1609) / 360.0;

$dpmLat = 1 / $degree;

$radiusLat = $dpmLat * $raidus;

$minLat = $latitude - $radiusLat;

$maxLat = $latitude + $radiusLat;

$mpdLng = $degree * cos($latitude * ($PI / 180));

$dpmLng = 1 / $mpdLng;

$radiusLng = $dpmLng * $raidus;

$minLng = $longitude - $radiusLng;

$maxLng = $longitude + $radiusLng;

return array('minLng' => $minLng, 'maxLng' => $maxLng, 'minLat' => $minLat, 'maxLat' => $maxLat);

}

经纬度距离组装成sql

$array = $this->getAround(115.826646, 28.718022, 2000);

$condition['longitude'] = array(array('EGT', $array['minLng']), array('ELT', $array['maxLng']), 'and');//(`longitude` >= minLng) AND (`longitude` <= maxLng)

$condition['latitude'] = array(array('EGT', $array['minLat']), array('ELT', $array['maxLat']), 'and');//(`latitude` >= minLat) AND (`latitude` <=maxLat)

两点经纬度距离计算

/**

* Desc: 求两个已知经纬度之间的距离,单位为米

* User: JamesLiu

* Date: 2019/5/13

* Time: 16:02

* @param $lng1

* @param $lat1

* @param $lng2

* @param $lat2

* @return float|int

*/

private function getDistance($lng1, $lat1, $lng2, $lat2)

{

// 将角度转为狐度

$radLat1 = deg2rad($lat1); //deg2rad()函数将角度转换为弧度

$radLat2 = deg2rad($lat2);

$radLng1 = deg2rad($lng1);

$radLng2 = deg2rad($lng2);

$a = $radLat1 - $radLat2;

$b = $radLng1 - $radLng2;

$s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2))) * 6378.137 * 1000;

return $s;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值