php过滤两个坐标,php判断两个坐标的方位角

php判断两个坐标的方位角

时间 :2019-1-20  评论: [ 0 ] 条  浏览: [ 758 ] 次

protected function getAngle($lat1, $lng1, $lat2,$lng2)

{

$x1 = $lng1;

$y1 = $lat1;

$x2 = $lng2;

$y2 = $lat2;

$pi = M_PI;

$w1 = $y1 / 180 * $pi;

$j1 = $x1 / 180 * $pi;

$w2 = $y2 / 180 * $pi;

$j2 = $x2 / 180 * $pi;

if ($j1 == $j2) {

if ($w1 > $w2)

return 270; // 北半球的情况,南半球忽略

else if ($w1 < $w2)

return 90;

else

return -1;// 位置完全相同

}

$ret = 4* pow(sin(($w1 - $w2) / 2), 2)- pow(

sin(($j1 - $j2) / 2) * (cos($w1) - cos($w2)),2);

$ret = sqrt($ret);

$temp = (sin(abs($j1 - $j2) / 2) * (cos($w1) + cos($w2)));

$ret = $ret / $temp;

$ret = atan($ret) / $pi * 180;

if ($j1 > $j2){ // 1为参考点坐标

if ($w1 > $w2)

$ret += 180;

else

$ret = 180 - $ret;

} else if ($w1 > $w2)

$ret = 360 - $ret;

return $ret;

}

public function getDirection($lat1, $lng1, $lat2,$lng2) {

$jiaodu = $this->getAngle($lat1, $lng1, $lat2, $lng2);

if (($jiaodu <= 10) || ($jiaodu > 350))

return "东";

if (($jiaodu > 10) && ($jiaodu <= 80))

return "东北";

if (($jiaodu > 80) && ($jiaodu <= 100))

return "北";

if (($jiaodu > 100) && ($jiaodu <= 170))

return "西北";

if (($jiaodu > 170) && ($jiaodu <= 190))

return "西";

if (($jiaodu > 190) && ($jiaodu <= 260))

return "西南";

if (($jiaodu > 260) && ($jiaodu <= 280))

return "南";

if (($jiaodu > 280) && ($jiaodu <= 350))

return "东南";

return "";

}

7d3a28bd1de083c26d499fa800d63f70.png赞8

1c1ddb8c862eb180f4f61cf42d24abcf.png

405d94d19b971e8d6179ba8cf4891f93.png踩0

发表评论:

昵称

邮件地址 (选填)

个人主页 (选填)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值