php 计算两点地理坐标的距离

举报
lxw1844912514 发表于 2022/03/27 03:21:29 2022/03/27
【摘要】 <?php/** * 计算两点地理坐标之间的距离 * @param Decimal $longitude1 起点经度 * @param Decimal $latitude1 起点纬度 * @param Decimal $longitude2 终点经度 * @param Decimal $latitude2...

    
  1. <?php
  2. /**
  3. * 计算两点地理坐标之间的距离
  4. * @param Decimal $longitude1 起点经度
  5. * @param Decimal $latitude1 起点纬度
  6. * @param Decimal $longitude2 终点经度
  7. * @param Decimal $latitude2 终点纬度
  8. * @param Int $unit 单位 1:米 2:公里
  9. * @param Int $decimal 精度 保留小数位数
  10. * @return Decimal
  11. */
  12. function getDistance($longitude1, $latitude1, $longitude2, $latitude2, $unit=2, $decimal=2){
  13. $EARTH_RADIUS = 6370.996; // 地球半径系数
  14. $PI = 3.1415926;
  15. $radLat1 = $latitude1 * $PI / 180.0;
  16. $radLat2 = $latitude2 * $PI / 180.0;
  17. $radLng1 = $longitude1 * $PI / 180.0;
  18. $radLng2 = $longitude2 * $PI /180.0;
  19. $a = $radLat1 - $radLat2;
  20. $b = $radLng1 - $radLng2;
  21. $distance = 2 * asin(sqrt(pow(sin($a/2),2) + cos($radLat1) * cos($radLat2) * pow(sin($b/2),2)));
  22. $distance = $distance * $EARTH_RADIUS * 1000;
  23. if($unit==2){
  24. $distance = $distance / 1000;
  25. }
  26. return round($distance, $decimal);
  27. }
  28. // 起点坐标
  29. $longitude1 = 113.330405;
  30. $latitude1 = 23.147255;
  31. // 终点坐标
  32. $longitude2 = 113.314271;
  33. $latitude2 = 23.1323;
  34. $distance = getDistance($longitude1, $latitude1, $longitude2, $latitude2, 1);
  35. echo $distance.'m'; // 2342.38m
  36. $distance = getDistance($longitude1, $latitude1, $longitude2, $latitude2, 2);
  37. echo $distance.'km'; // 2.34km
  38. ?>

  功能:根据圆周率和地球半径系数与两点坐标的经纬度,计算两点之间的球面距离。 


获取两点坐标距离:

文章来源: blog.csdn.net,作者:lxw1844912514,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/lxw1844912514/article/details/100027967

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。