计算地图经纬度之间两点之间的距离

  •   
  • 4529
  • PHP
  • 1
  • super_dodo
  • 2014/06/11

在一些运用中,尤其是手机app的运用中,常常会用到附近这个功能或者就需要显示和计算当前的位置距离目标商家或者某个特定地点之间的距离。所以在得知两者之间的经纬度的时候。需要计算两者的距离。有多种实现方法,这里先介绍php的计算实现方法。

//求两者经纬度之间的距离
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*1000;
	return round($s);
}

//示例
//102.727775,25.093923  ---龙泉路财经大学
//102.728493,25.019685  ----昆明火车站
//102.936038,25.10086   ----长水机场
//102.774774,24.962569  ----星耀路
$lat1 = 25.019685;   //昆明火车站纬度
$lng1 = 102.728493;  //昆明火车站经度
$lat2 = 25.10086;    //长水机场纬度
$lng2 = 102.936038;  //长水机场经度

$long = $this->getDistance($lat1,$lng1,$lat2,$lng2);
//昆明火车站到长水机场得到计算的结果为 22.796
//百度地图上量出来的为22.8km
//基本吻合 ---见下图

QQ截图20140611164603

在网上有看到经纬度是和我的相反的传入参数。在一些情况是可行的。我多测试之后觉得在百度地图的情况下,我这个方法准确度相对高一些。各位有高招的话。也可以告诉我。我再改进。

方法二的话。利用数据库的方式。在数据库里面建立一个函数function ,此方法尚未验证,且mysql的版本也不一定很友好,仅供参考。

BEGIN
#Routine body goes here...
set @num=ROUND((2 * 6378.137* ASIN(SQRT(POW(SIN(PI()*(lat1-lat2)/360), 2)+COS(PI()*lat1/180)* COS(lat2*PI()/180) * POW(SIN(PI()*(lng1-lng2)/360), 2)))),1);
RETURN @num;
END

//计算的时候sql
$sql="SELECT id,lat,lng,get_distance($ulng,$ulat,lng,lat) as distance FROM company;

上士闻道,勤能行之;中士闻道,若存若亡;下士闻道,大笑之。