在《PHP经典实例》书中看到非常有意思的一个代码实例、就是根据经纬度计算距离的代码、当但实际是有点误差的。误差大概在0.5%左右。
function sphere_distance($lat1,$lon1,$lat2,$lon2,$radius=6378.135){
$rad=doubleval(M_PI/180.0);
$lat1=doubleval($lat1)*$rad;
$lon1=doubleval($lon1)*$rad;
$lat2=doubleval($lat2)*$rad;
$lon2=doubleval($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=39.735616; //纬度
$lon1=116.378685; //经度/
$lat2=47.72737363170936;
$lon2=128.89125823975863;
$dist=sphere_distance($lat1,$lon1,$lat2,$lon2);
//$formatted=sprintf("%.2f",$dist*0.621); 英里
$formatted=sprintf("%.2f",$dist*0.621)*1.609344; //公里
var_dump($formatted);