专栏首页jerryteng的专栏php根据经纬度计算距离和方向
原创

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

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

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

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

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

看看我12年写的文章:

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

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

LBS就产生了,

可是怎么计算呢 ? 

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

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

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;
}

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 现代PHP-基于composer的模块化开发

    Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。

    jerryteng
  • 如何编写好的单元测试

    单元测试,首先要明确这个单元,从一个单一方法到整个类都可以是一个单元,单元测试就是针对这个单元所写的测试用例。

    jerryteng
  • 学习Go语言-组织源码文件

    jerryteng
  • 什么是卫语句?更优雅的代码方式

    不知你有没有被多层嵌套的 if-else 语句所折磨过,就像下面这种 “横放着的金字塔”:

    BigYoung小站
  • 永远在线的人工智能:通用神经形态硬件才是 AI 的未来吗?

    【新智元导读】2012年一项被誉为“最逼真人工大脑”的研究发表在 Science 杂志上,名为 Spaun 的这个系统一时引起许多关注。现在,Spaun 团队使...

    新智元
  • 第三章3:elif 语句

    条件语句赋予我们在程序中做决策的能力,但目前为止,我们只看到了它能力的冰山一角。今天我们开始学习 elif 语句,它们赋予我们基于条件分别运行代码块的能力,它们...

    double
  • python print 格式化输出,动态指定长度的实现

    假如有一组字符,长度未知,进行格式化对其。首先算出所有字符中最长的。然后再进行格式化输出。

    砸漏
  • 爬虫入门经典(二十三) | fiddler抓包爬取QQ音乐

      ♥各位如果想要交流的话,可以加下QQ交流群:974178910,里面有各种你想要的学习资料。♥

    不温卜火
  • Spring Cloud Gateway重试机制

    重试,我相信大家并不陌生。在我们调用Http接口的时候,总会因为某种原因调用失败,这个时候我们可以通过重试的方式,来重新请求接口。

    猿天地
  • Spring Cloud Gateway重试机制

    重试,我相信大家并不陌生。在我们调用Http接口的时候,总会因为某种原因调用失败,这个时候我们可以通过重试的方式,来重新请求接口。

    黄泽杰

扫码关注云+社区

领取腾讯云代金券