Advertisement
krot

geo pint

Mar 29th, 2019
285
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.30 KB | None | 0 0
  1.  
  2. // Радиус земли
  3. define('EARTH_RADIUS', 6372795);
  4.  
  5.  
  6.  
  7.  
  8. $lat1 = 53.409676;
  9. $long1 = -2.989736;
  10.  
  11.  
  12.  
  13. $lat2 =  53.410943   ;
  14. $long2 = -2.990497;
  15.  
  16. echo calculateTheDistance($lat1, $long1, $lat2, $long2) . " метров";
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24. /*
  25. * Расстояние между двумя точками
  26. * $φA, $λA - широта, долгота 1-й точки,
  27. * $φB, $λB - широта, долгота 2-й точки
  28. * Написано по мотивам http://gis-lab.info/qa/great-circles.html
  29. * Михаил Кобзарев <mikhail@kobzarev.com>
  30. *
  31. */
  32. function calculateTheDistance ($φA, $λA, $φB, $λB) {
  33.  
  34. // перевести координаты в радианы
  35. $lat1 = $φA * M_PI / 180;
  36. $lat2 = $φB * M_PI / 180;
  37. $long1 = $λA * M_PI / 180;
  38. $long2 = $λB * M_PI / 180;
  39.  
  40. // косинусы и синусы широт и разницы долгот
  41. $cl1 = cos($lat1);
  42. $cl2 = cos($lat2);
  43. $sl1 = sin($lat1);
  44. $sl2 = sin($lat2);
  45. $delta = $long2 - $long1;
  46. $cdelta = cos($delta);
  47. $sdelta = sin($delta);
  48.  
  49. // вычисления длины большого круга
  50. $y = sqrt(pow($cl2 * $sdelta, 2) + pow($cl1 * $sl2 - $sl1 * $cl2 * $cdelta, 2));
  51. $x = $sl1 * $sl2 + $cl1 * $cl2 * $cdelta;
  52.  
  53. //
  54. $ad = atan2($y, $x);
  55. $dist = $ad * EARTH_RADIUS;
  56.  
  57. return $dist;
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement