php两点间水平距离怎么算,计算地图经纬度之间两点之间的距离

在一些运用中,尤其是手机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

//基本吻合 ---见下图

d1fa5af70cf444d7737f28b506a8a724.png

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

方法二的话。利用数据库的方式。在数据库里面建立一个函数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;

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值