前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >php根据经纬度计算距离和方向

php根据经纬度计算距离和方向

原创
作者头像
jerryteng
修改2018-09-14 18:55:33
2.1K0
修改2018-09-14 18:55:33
举报
文章被收录于专栏:jerryteng的专栏jerryteng的专栏

这个是我在佳缘的时候写的,已经很久了,当时是为了根据经纬度计算附近的人,

可见当时思想就已经很超前了。。。

不过现在有了更多的可选项了,例如geohash,存储geo的服务,mogodb,等等

不过这个还是有一定的参考意义的。

“geo 距离”的图片搜索结果
“geo 距离”的图片搜索结果

看看我12年写的文章:

现在这个移动终端的天下,

自然而然就有了根据经纬度来计算方向和距离的需求,

LBS就产生了,

可是怎么计算呢 ? 

网上有很多计算距离的,今天我就来个加强版,计算距离和方向。

//根据经纬度计算距离和方向

代码语言:php
复制
function getRadian($d)
{
return $d * M_PI / 180;
}
function getDistance ($lat1, $lng1, $lat2, $lng2)
{
$lat1 =getRadian($lat1);
$lat2 = getRadian($lat2);
$a = $lat1 - $lat2;
$b = getRadian($lng1) - getRadian($lng2);
$v = 2 * asin(sqrt(pow(sin($a/2),2) +
cos($lat1) * cos($lat2) * pow(sin($b/2),2)));
$v = round(EARTH_RADIUS * $v * 10000) / 10000;
return $v;
}
//根据经纬度计算方向
function getDirection($lat1, $lng1, $lat2, $lng2){
$k1 = $lng2-$lng1;
$k2 = $lat2-$lat1;
if( 0 == $k1){
if($k2>0){
$str="聊友在您的正北方 ";
}
else if( $k2<0){
$str ="聊友在您的正南方 ";
}
else if( $k2 == 0){
$str="聊友正在您的附近 ";
}
}else if( 0 == $k2){
if($k1>0){
$str="聊友在您的正东方 ";
}
else if( $k1<0){
$str="聊友在您的正西方 ";
}
}else{
$k=$k2/$k1;
if($k2>0){
if($k1>0){
$angle = 180*atan($k)/M_PI;
$str="聊友在您的东偏北 $angle 度方向  ";
}else if($k1<0){
$angle = 180*atan(-$k)/M_PI;
$str= "聊友在您的西偏北 $angle 度方向  ";
}
}else if($k2<0){
if($k1<0){
$angle = 180*atan($k)/M_PI;
$str = "聊友在您的西偏南 $angle 度方向  ";
}
else if($k1>0){
$angle = 180*atan($k)/M_PI;
$str="聊友在您的东偏南 $angle 度方向  ";
}
}
}
return $str;
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档