其他分享
首页 > 其他分享> > 计算距离

计算距离

作者:互联网

第一种方法   数据库中直接计算

set global log_bin_trust_function_creators=TRUE;

DELIMITER $$
--
-- 函数
--
CREATE DEFINER=`root`@`localhost` FUNCTION `get_juli`(`longitude` CHAR(20), `latitude` CHAR(20), `longitudea` CHAR(20), `latitudea` CHAR(20)) RETURNS double
BEGIN
#Routine body goes here...
DECLARE result DOUBLE DEFAULT 0;

SET result = round(6378.138*2*asin(sqrt(pow(sin(
(latitude*pi()/180-latitudea*pi()/180)/2),2)+cos(latitude*pi()/180)*cos(latitudea*pi()/180)*
pow(sin( (longitude*pi()/180-longitudea*pi()/180)/2),2)))*1000);

RETURN result;
END$$

DELIMITER ;

 

 

第二种方法   根据经纬度计算

function getDistance($lat1, $lng1, $lat2, $lng2){
$radLat1 = deg2rad(floatval($lat1));// deg2rad()函数将角度转换为弧度
$radLat2 = deg2rad(floatval($lat2));
$radLng1 = deg2rad(floatval($lng1));
$radLng2 = deg2rad(floatval($lng2));
if (!$radLat1 || !$radLat2 || !$radLng1 || !$radLng2){
return 0;
}
$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.138;
// $s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2))) * 6378.138 * 1000;
return round($s, 2);
}

标签:cos,radLat2,pow,距离,180,计算,pi,sin
来源: https://www.cnblogs.com/chzhcenter/p/16451527.html