PHP根据经纬度,计算2点之间的距离的2种方法
发布时间:2021-06-16, 17:36:53 分类:PHP | 编辑 off 网址 | 辅助
正文 1385字数 522,544阅读
计算地球表面2点之间的球面距离
/**
* @param $lat1
* @param $lng1
* @param $lat2
* @param $lng2
* @return int
*/
function getDistance($lat1, $lng1, $lat2, $lng2){
//将角度转为狐度
$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;
return $s;
}
/**
* @param $lat1
* @param $lon1
* @param $lat2
* @param $lon2
* @param float $radius 星球半径
* @return float
*/
function distance($lat1, $lon1, $lat2,$lon2,$radius = 6378.137)
{
$rad = floatval(M_PI / 180.0);
$lat1 = floatval($lat1) * $rad;
$lon1 = floatval($lon1) * $rad;
$lat2 = floatval($lat2) * $rad;
$lon2 = floatval($lon2) * $rad;
$theta = $lon2 - $lon1;
$dist = acos(sin($lat1) * sin($lat2) +
cos($lat1) * cos($lat2) * cos($theta)
);
if ($dist < 0 ) {
$dist += M_PI;
}
return $dist = $dist * $radius;
}
$lat1 = '31.253411';
$lon1 = '121.518998';
$lat2 = '31.277117';
$lon2 = '120.744587';
echo getDistance($lat1, $lon1, $lat2, $lon2); // 73.734589823361
echo distance($lat1, $lon1, $lat2, $lon2); // 73.734589823354
Run code
Cut to clipboard
(支付宝)给作者钱财以资鼓励 (微信)→
有过 4 条评论 »
IPv6地址查询工具
IPv4地址查询工具(纯真版)
function objtoarr($obj){ $ret = array(); foreach($obj as $key =>$value){ if(gettype($value) == 'array' || gettype($value) == 'object'){ $ret[$key] = objtoarr($value); }else{ $ret[$key] = $value; } } return $ret; } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,'http://www.tudou.com/albumcover/albumdata/getAlbumItems.html?acode=pEFBZGfERLo&charset=utf-8'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_ENCODING, "gzip"); $output = curl_exec($ch); curl_close($ch); $content = json_decode($output); $content_arr = objtoarr($content); var_dump($content_arr);
$content = json_decode($output);
$ipv6 = '2a01:4f8:190:4413::2'; $ipv4 = hexdec(substr($ipv6, 0, 2)). "." . hexdec(substr($ipv6, 2, 2)). "." . hexdec(substr($ipv6, 5, 2)). "." . hexdec(substr($ipv6, 7, 2)); echo $ipv4;