DistanceService.php 1.1 KB

1234567891011121314151617181920212223242526272829303132333435
  1. <?php
  2. /**
  3. * @Name
  4. * @Description
  5. * @Author 刘学玺
  6. * @Date 2024/4/1 18:38
  7. */
  8. namespace App\Http\Services\Frontend\Common;
  9. class DistanceService
  10. {
  11. /**
  12. * 根据起点坐标和终点坐标测距离
  13. * @param array $from [起点坐标(经纬度),例如:array(118.012951,36.810024)]
  14. * @param array $to [终点坐标(经纬度)]
  15. * @param bool $km 是否以公里为单位 false:米 true:公里(千米)
  16. * @param int $decimal 精度 保留小数位数
  17. * @return float 距离数值
  18. */
  19. function get_distance(array $from, array $to, bool $km = true, int $decimal = 2): float
  20. {
  21. sort($from);
  22. sort($to);
  23. $EARTH_RADIUS = 6370.996; // 地球半径系数
  24. $distance = $EARTH_RADIUS * 2 * asin(sqrt(pow(sin(($from[0] * pi() / 180 - $to[0] * pi() / 180) / 2), 2) + cos($from[0] * pi() / 180) * cos($to[0] * pi() / 180) * pow(sin(($from[1] * pi() / 180 - $to[1] * pi() / 180) / 2), 2))) * 1000;
  25. if ($km) {
  26. $distance = $distance / 1000;
  27. }
  28. return round($distance, $decimal);
  29. }
  30. }