Чему равно расстояние между точками. I




Расстояние между двумя точками плоскости.
Системы координат

Каждая точка А плоскости характеризуется своими координатами (х, у). Они совпадают с координатами вектора 0А , выходящего из точки 0 - начала координат.

Пусть А и В - произвольные точки плоскости с координатами (х 1 y 1) и (х 2 , у 2) соответственно.

Тогда вектор AB имеет, очевидно, координаты (х 2 - х 1 , y 2 - y 1). Известно, что квадрат длины вектора равен сумме квадратов его координат. Поэтому расстояние d между точками А и В, или, что то же самое, длина вектора АВ, определяется из условия

d 2 = (х 2 - х 1) 2 + (y 2 - y 1) 2 .

d = \/ (х 2 - х 1 ) 2 + (y 2 - y 1 ) 2

Полученная формула позволяет находить расстояние между любыми двумя точками плоскости, если только известны координаты этих точек

Каждый раз, говоря о координатах той или иной точки плоскоси, мы имеем в виду вполне определенную систему координат х0у. А вообще-то систему координат на плоскости можно выбирать по-разному. Так, вместо системы координат х0у можно рассмотреть систему координат х"0у" , которая получается в результате поворота старых осей координат вокруг начальной точки 0 против часовой стрелки на угол α .

Если некоторая точка плоскости в системе координат х0у имела координаты (х, у), то в новой системе координат х"0у" она будет иметь уже другие координаты (х", у").

В качестве примера рассмотрим точку М, расположенную на оси 0х" и отстоящую от точки 0 на расстоянии, равном 1.

Очевидно, что в системе координат x0у эта точка имеет координаты (cos α , sin α ), а в системе координат х"0у" координаты (1,0).

Координаты любых двух точек плоскости А и В зависят от того, как в этой плоскости задана система координат. А вот расстояние между этими точками не зависит от способа задания системы координат. Это важное обстоятельство будет существенно использовано нами в следующем параграфе.

Упражнения

I. Найти расстояния между точками плоскости с координатами:

1) (3,5) и (3,4); 3) (0,5) и (5, 0); 5) (-3,4) и (9, -17);

2) (2, 1) и (- 5, 1); 4) (0, 7) и (3,3); 6) (8, 21) и (1, -3).

II. Найти периметр треугольника, стороны которого заданы уравнениями:

x + у - 1 = 0, 2x - у - 2 = 0 и у = 1.

III. В системе координат х0у точки М и N имеют координаты (1, 0) и (0,1) соответственно. Найти координаты этих точек в новой системе координат, которая получается и результате поворота старых осей вокруг начальной точки на угол в 30° против часовой стрелки.

IV. В системе координат х0у точки М и N имеют координаты (2, 0) и (\/ 3 / 2 , - 1 / 2) соответственно. Найти координаты этих точек в новой системе координат, которая получается в результате поворота старых осей вокруг начальной точки на угол в 30° по часовой стрелке.

Каждая точка А плоскости характеризуется своими координатами (х, у). Они совпадают с координатами вектора 0А , выходящего из точки 0 - начала координат.

Пусть А и В - произвольные точки плоскости с координатами (х 1 y 1) и (х 2 , у 2) соответственно.

Тогда вектор AB имеет, очевидно, координаты (х 2 - х 1 , y 2 - y 1). Известно, что квадрат длины вектора равен сумме квадратов его координат. Поэтому расстояние d между точками А и В, или, что то же самое, длина вектора АВ, определяется из условия

d 2 = (х 2 - х 1) 2 + (y 2 - y 1) 2 .

$$ d = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2} $$

Полученная формула позволяет находить расстояние между любыми двумя точками плоскости, если только известны координаты этих точек

Каждый раз, говоря о координатах той или иной точки плоскости, мы имеем в виду вполне определенную систему координат х0у. А вообще-то систему координат на плоскости можно выбирать по-разному. Так, вместо системы координат х0у можно рассмотреть систему координат хִу’ , которая получается в результате поворота старых осей координат вокруг начальной точки 0 против часовой стрелки на угол α .

Если некоторая точка плоскости в системе координат х0у имела координаты (х, у), то в новой системе координат хִу’ она будет иметь уже другие координаты (х’, у’).

В качестве примера рассмотрим точку М, расположенную на оси 0х’ и отстоящую от точки 0 на расстоянии, равном 1.

Очевидно, что в системе координат x0у эта точка имеет координаты (cos α , sin α ), а в системе координат хִу’ координаты (1,0).

Координаты любых двух точек плоскости А и В зависят от того, как в этой плоскости задана система координат. А вот расстояние между этими точками не зависит от способа задания системы координат .

Другие материалы

Расстояние от точки до точки - это длина отрезка, соединяющего эти точки, в заданном масштабе. Таким образом, когда речь идет об измерении расстояния, то требуется знать масштаб (единицу длины), в котором будут проводиться измерения. Поэтому, задачу нахождения расстояния от точки до точки обычно рассматривают либо на координатной прямой, либо в прямоугольной декартовой системе координат на плоскости или в трехмерном пространстве. Другими словами, наиболее часто приходится вычислять расстояние между точками по их координатам.

В этой статье мы, во-первых, напомним, как определяется расстояние от точки до точки на координатной прямой. Далее получим формулы для вычисления расстояния между двумя точками плоскости или пространства по заданным координатам. В заключении, подробно рассмотрим решения характерных примеров и задач.

Навигация по странице.

Расстояние между двумя точками на координатной прямой.

Давайте для начала определимся с обозначениями. Расстояние от точки А до точки В будем обозначать как .

Отсюда можно заключить, что расстояние от точки А с координатой до точки В с координатой равно модулю разности координат , то есть, при любом расположении точек на координатной прямой.

Расстояние от точки до точки на плоскости, формула.

Получим формулу для вычисления расстояния между точками и , заданными в прямоугольной декартовой системе координат на плоскости.

В зависимости от расположения точек А и В возможны следующие варианты.

Если точки А и В совпадают, то расстояние между ними равно нулю.

Если точки А и В лежат на прямой, перпендикулярной оси абсцисс, то точки и совпадают, а расстояние равно расстоянию . В предыдущем пункте мы выяснили, что расстояние между двумя точками на координатной прямой равно модулю разности их координат, поэтому, . Следовательно, .

Аналогично, если точки А и В лежат на прямой, перпендикулярной оси ординат, то расстояние от точки А до точки В находится как .

В этом случае треугольник АВС – прямоугольный по построению, причем и . По теореме Пифагора мы можем записать равенство , откуда .

Обобщим все полученные результаты: расстояние от точки до точки на плоскости находится через координаты точек по формуле .

Полученную формулу для нахождения расстояния между точками, можно использовать когда точки А и В совпадают или лежат на прямой, перпендикулярной одной из координатных осей. Действительно, если А и В совпадают, то . Если точки А и В лежат на прямой, перпендикулярной оси Ох , то . Если А и В лежат на прямой, перпендикулярной оси Оу , то .

Расстояние между точками в пространстве, формула.

Введем прямоугольную систему координат Оxyz в пространстве. Получим формулу для нахождения расстояния от точки до точки .

В общем случае, точки А и В не лежат в плоскости, параллельной одной из координатных плоскостей. Проведем через точки А и В плоскости, перпендикулярные координатным осям Ох , Оу и Oz . Точки пересечения этих плоскостей с координатными осями дадут нам проекции точек А и В на эти оси. Обозначим проекции .


Искомое расстояние между точками А и В представляет собой диагональ прямоугольного параллелепипеда, изображенного на рисунке. По построению, измерения этого параллелепипеда равны и . В курсе геометрии средней школы было доказано, что квадрат диагонали прямоугольного параллелепипеда равен сумме квадратов трех его измерений, поэтому, . Опираясь на информацию первого раздела этой статьи, мы можем записать следующие равенства , следовательно,

откуда получаем формулу для нахождения расстояния между точками в пространстве .

Эта формула также справедлива, если точки А и В

  • совпадают;
  • принадлежат одной из координатных осей или прямой, параллельной одной из координатных осей;
  • принадлежат одной из координатных плоскостей или плоскости, параллельной одной из координатных плоскостей.

Нахождение расстояния от точки до точки, примеры и решения.

Итак, мы получили формулы для нахождения расстояния между двумя точками координатной прямой, плоскости и трехмерного пространства. Пришло время рассмотреть решения характерных примеров.

Число задач, при решении которых конечным этапом является нахождение расстояния между двумя точками по их координатам, поистине огромно. Полный обзор таких примеров выходит за рамки данной статьи. Здесь мы ограничимся примерами, в которых известны координаты двух точек и требуется вычислить расстояние между ними.

Здравствуйте,

Используется PHP:

С уважением, Александр.

Здравствуйте,

Уже достаточное время мучаюсь с проблемой: пытаюсь рассчитать расстояние между двумя произвольными точками, которые находятся на удалении от 30 до 1500 метров друг от друга.

Используется PHP:

$cx=31.319738; //координата x первой точки
$cy=60.901638; //координата y первой точки

$x=31.333312; //координата x второй точки
$y=60.933981; //координата y второй точки

$mx=abs($cx-$x); //высчитываем разницу иксов (первый катет прямоугольного треугольника), функция abs(x) - возвращает модуль числаx x
$my=abs($cy-$y); //высчитываем разницу игреков (второй катет прямоугольного треугольника)

$dist=sqrt(pow($mx,2)+pow($my,2)); //Получаем расстояние до метро (длину гипотенузы по правилу гипотенуза равна корню из суммы квадратов катетов)

Если непонятно, поясняю: я представляю, что расстояние между двумя точками - это гипотенуза прямоугольного треугольника. Тогда разница между иксами каждой из двух точек будет одним из катетов, а другим катетом будет разница игреков этих же двух точек. Тогда, посчитав разницы иксов и игреков, можно по формуле вычислить длину гипотенузы (т.е. расстояние между двумя точками).

Я знаю, что это правило хорошо работает для декартовой системы координат, однако, оно должно более-менее работать и через координаты longlat, т.к. измеряемое расстояние между двумя точками пренебрежимо мало (от 30 до 1500 метров).

Однако, расстояние по данному алгоритму вычисляется неверно (например, расстояние1, расчитанное по этому алгоритму, превышает расстояние2 всего на 13%, тогда как в реальности расстояние1 равно 1450 метров, я расстояние2 равно 970 метров, то есть на самом делие разница достигает почти 50%).

Если кто-то сможет помочь, буду очень признателен.

С уважением, Александр.

","contentType":"text/html"},"proposedBody":{"source":"

Здравствуйте,

Уже достаточное время мучаюсь с проблемой: пытаюсь рассчитать расстояние между двумя произвольными точками, которые находятся на удалении от 30 до 1500 метров друг от друга.

Используется PHP:

$cx=31.319738; //координата x первой точки
$cy=60.901638; //координата y первой точки

$x=31.333312; //координата x второй точки
$y=60.933981; //координата y второй точки

$mx=abs($cx-$x); //высчитываем разницу иксов (первый катет прямоугольного треугольника), функция abs(x) - возвращает модуль числаx x
$my=abs($cy-$y); //высчитываем разницу игреков (второй катет прямоугольного треугольника)

$dist=sqrt(pow($mx,2)+pow($my,2)); //Получаем расстояние до метро (длину гипотенузы по правилу гипотенуза равна корню из суммы квадратов катетов)

Если непонятно, поясняю: я представляю, что расстояние между двумя точками - это гипотенуза прямоугольного треугольника. Тогда разница между иксами каждой из двух точек будет одним из катетов, а другим катетом будет разница игреков этих же двух точек. Тогда, посчитав разницы иксов и игреков, можно по формуле вычислить длину гипотенузы (т.е. расстояние между двумя точками).

Я знаю, что это правило хорошо работает для декартовой системы координат, однако, оно должно более-менее работать и через координаты longlat, т.к. измеряемое расстояние между двумя точками пренебрежимо мало (от 30 до 1500 метров).

Однако, расстояние по данному алгоритму вычисляется неверно (например, расстояние1, расчитанное по этому алгоритму, превышает расстояние2 всего на 13%, тогда как в реальности расстояние1 равно 1450 метров, я расстояние2 равно 970 метров, то есть на самом делие разница достигает почти 50%).

Если кто-то сможет помочь, буду очень признателен.

С уважением, Александр.

Здравствуйте,

Уже достаточное время мучаюсь с проблемой: пытаюсь рассчитать расстояние между двумя произвольными точками, которые находятся на удалении от 30 до 1500 метров друг от друга.

Используется PHP:

$cx=31.319738; //координата x первой точки
$cy=60.901638; //координата y первой точки

$x=31.333312; //координата x второй точки
$y=60.933981; //координата y второй точки

$mx=abs($cx-$x); //высчитываем разницу иксов (первый катет прямоугольного треугольника), функция abs(x) - возвращает модуль числаx x
$my=abs($cy-$y); //высчитываем разницу игреков (второй катет прямоугольного треугольника)

$dist=sqrt(pow($mx,2)+pow($my,2)); //Получаем расстояние до метро (длину гипотенузы по правилу гипотенуза равна корню из суммы квадратов катетов)

Если непонятно, поясняю: я представляю, что расстояние между двумя точками - это гипотенуза прямоугольного треугольника. Тогда разница между иксами каждой из двух точек будет одним из катетов, а другим катетом будет разница игреков этих же двух точек. Тогда, посчитав разницы иксов и игреков, можно по формуле вычислить длину гипотенузы (т.е. расстояние между двумя точками).

Я знаю, что это правило хорошо работает для декартовой системы координат, однако, оно должно более-менее работать и через координаты longlat, т.к. измеряемое расстояние между двумя точками пренебрежимо мало (от 30 до 1500 метров).

Однако, расстояние по данному алгоритму вычисляется неверно (например, расстояние1, расчитанное по этому алгоритму, превышает расстояние2 всего на 13%, тогда как в реальности расстояние1 равно 1450 метров, я расстояние2 равно 970 метров, то есть на самом делие разница достигает почти 50%).

Если кто-то сможет помочь, буду очень признателен.

С уважением, Александр.

","contentType":"text/html"},"authorId":"108613929","slug":"15001","canEdit":false,"canComment":false,"isBanned":false,"canPublish":false,"viewType":"old","isDraft":false,"isOnModeration":false,"isSubscriber":false,"commentsCount":14,"modificationDate":"Wed Jun 27 2012 20:07:00 GMT+0000 (Coordinated Universal Time)","showPreview":true,"approvedPreview":{"source":"

Здравствуйте,

Уже достаточное время мучаюсь с проблемой: пытаюсь рассчитать расстояние между двумя произвольными точками, которые находятся на удалении от 30 до 1500 метров друг от друга.

Используется PHP:

$cx=31.319738; //координата x первой точки
$cy=60.901638; //координата y первой точки

$x=31.333312; //координата x второй точки
$y=60.933981; //координата y второй точки

$mx=abs($cx-$x); //высчитываем разницу иксов (первый катет прямоугольного треугольника), функция abs(x) - возвращает модуль числаx x
$my=abs($cy-$y); //высчитываем разницу игреков (второй катет прямоугольного треугольника)

$dist=sqrt(pow($mx,2)+pow($my,2)); //Получаем расстояние до метро (длину гипотенузы по правилу гипотенуза равна корню из суммы квадратов катетов)

Если непонятно, поясняю: я представляю, что расстояние между двумя точками - это гипотенуза прямоугольного треугольника. Тогда разница между иксами каждой из двух точек будет одним из катетов, а другим катетом будет разница игреков этих же двух точек. Тогда, посчитав разницы иксов и игреков, можно по формуле вычислить длину гипотенузы (т.е. расстояние между двумя точками).

Я знаю, что это правило хорошо работает для декартовой системы координат, однако, оно должно более-менее работать и через координаты longlat, т.к. измеряемое расстояние между двумя точками пренебрежимо мало (от 30 до 1500 метров).

Однако, расстояние по данному алгоритму вычисляется неверно (например, расстояние1, расчитанное по этому алгоритму, превышает расстояние2 всего на 13%, тогда как в реальности расстояние1 равно 1450 метров, я расстояние2 равно 970 метров, то есть на самом делие разница достигает почти 50%).

Если кто-то сможет помочь, буду очень признателен.

С уважением, Александр.

","html":"Здравствуйте,","contentType":"text/html"},"proposedPreview":{"source":"

Здравствуйте,

Уже достаточное время мучаюсь с проблемой: пытаюсь рассчитать расстояние между двумя произвольными точками, которые находятся на удалении от 30 до 1500 метров друг от друга.

Используется PHP:

$cx=31.319738; //координата x первой точки
$cy=60.901638; //координата y первой точки

$x=31.333312; //координата x второй точки
$y=60.933981; //координата y второй точки

$mx=abs($cx-$x); //высчитываем разницу иксов (первый катет прямоугольного треугольника), функция abs(x) - возвращает модуль числаx x
$my=abs($cy-$y); //высчитываем разницу игреков (второй катет прямоугольного треугольника)

$dist=sqrt(pow($mx,2)+pow($my,2)); //Получаем расстояние до метро (длину гипотенузы по правилу гипотенуза равна корню из суммы квадратов катетов)

Если непонятно, поясняю: я представляю, что расстояние между двумя точками - это гипотенуза прямоугольного треугольника. Тогда разница между иксами каждой из двух точек будет одним из катетов, а другим катетом будет разница игреков этих же двух точек. Тогда, посчитав разницы иксов и игреков, можно по формуле вычислить длину гипотенузы (т.е. расстояние между двумя точками).

Я знаю, что это правило хорошо работает для декартовой системы координат, однако, оно должно более-менее работать и через координаты longlat, т.к. измеряемое расстояние между двумя точками пренебрежимо мало (от 30 до 1500 метров).

Однако, расстояние по данному алгоритму вычисляется неверно (например, расстояние1, расчитанное по этому алгоритму, превышает расстояние2 всего на 13%, тогда как в реальности расстояние1 равно 1450 метров, я расстояние2 равно 970 метров, то есть на самом делие разница достигает почти 50%).

Если кто-то сможет помочь, буду очень признателен.

С уважением, Александр.

","html":"Здравствуйте,","contentType":"text/html"},"titleImage":null,"tags":[{"displayName":"измерение расстояний","slug":"izmerenie-rasstoyaniy","categoryId":"10615601","url":"/blog/mapsapi??tag=izmerenie-rasstoyaniy"},{"displayName":"API 1.x","slug":"api-1-x","categoryId":"150000131","url":"/blog/mapsapi??tag=api-1-x"}],"isModerator":false,"publishCount":1,"commentsEnabled":true,"url":"/blog/mapsapi/15001","urlTemplate":"/blog/mapsapi/%slug%","fullBlogUrl":"https://yandex.ru/blog/mapsapi","addCommentUrl":"/blog/createComment/mapsapi/15001","updateCommentUrl":"/blog/updateComment/mapsapi/15001","addCommentWithCaptcha":"/blog/createWithCaptcha/mapsapi/15001","changeCaptchaUrl":"/blog/api/captcha/new","putImageUrl":"/blog/image/put","urlBlog":"/blog/mapsapi","urlEditPost":"/blog/56a98d48b15b79e31e0d54c8/edit","urlSlug":"/blog/post/generateSlug","urlPublishPost":"/blog/56a98d48b15b79e31e0d54c8/publish","urlUnpublishPost":"/blog/56a98d48b15b79e31e0d54c8/unpublish","urlRemovePost":"/blog/56a98d48b15b79e31e0d54c8/removePost","urlDraft":"/blog/mapsapi/15001/draft","urlDraftTemplate":"/blog/mapsapi/%slug%/draft","urlRemoveDraft":"/blog/56a98d48b15b79e31e0d54c8/removeDraft","urlTagSuggest":"/blog/api/suggest/mapsapi","urlAfterDelete":"/blog/mapsapi","isAuthor":false,"subscribeUrl":"/blog/api/subscribe/56a98d48b15b79e31e0d54c8","unsubscribeUrl":"/blog/api/unsubscribe/56a98d48b15b79e31e0d54c8","urlEditPostPage":"/blog/mapsapi/56a98d48b15b79e31e0d54c8/edit","urlForTranslate":"/blog/post/translate","urlRelateIssue":"/blog/post/updateIssue","urlUpdateTranslate":"/blog/post/updateTranslate","urlLoadTranslate":"/blog/post/loadTranslate","urlTranslationStatus":"/blog/mapsapi/15001/translationInfo","urlRelatedArticles":"/blog/api/relatedArticles/mapsapi/15001","author":{"id":"108613929","uid":{"value":"108613929","lite":false,"hosted":false},"aliases":{},"login":"mrdds","display_name":{"name":"mrdds","avatar":{"default":"0/0-0","empty":true}},"address":"[email protected]","defaultAvatar":"0/0-0","imageSrc":"https://avatars.mds.yandex.net/get-yapic/0/0-0/islands-middle","isYandexStaff":false},"originalModificationDate":"2012-06-27T16:07:49.000Z","socialImage":{"orig":{"fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1456488726678/orig"}}}}}">

Расчет расстояний между точками по их координатам на плоскости элементарен, на поверхности Земли — немного посложнее: мы рассмотрим измерение расстояния и начального азимута между точками без проекционных преобразований. Для начала разберемся в терминологии.

Введение

Длина дуги большого круга – кратчайшее расстояние между любыми двумя точками находящимися на поверхности сферы, измеренное вдоль линии соединяющей эти две точки (такая линия носит название ортодромии) и проходящей по поверхности сферы или другой поверхности вращения. Сферическая геометрия отличается от обычной Эвклидовой и уравнения расстояния также принимают другую форму. В Эвклидовой геометрии, кратчайшее расстояние между двумя точками – прямая линия. На сфере, прямых линий не бывает. Эти линии на сфере являются частью больших кругов – окружностей, центры которых совпадают с центром сферы. Начальный азимут - азимут, взяв который при начале движения из точки А, следуя по большому кругу на кратчайшее расстояние до точки B, конечной точкой будет точка B. При движении из точки A в точку B по линии большого круга азимут из текущего положения на конечную точку B постоянно меняется. Начальный азимут отличен от постоянного, следуя которому, азимут из текущей точки на конечную не меняется, но маршрут следования не является кратчайшим расстоянием между двумя точками.

Через любые две точки на поверхности сферы, если они не прямо противоположны друг другу (то есть не являются антиподами), можно провести уникальный большой круг. Две точки, разделяют большой круг на две дуги. Длина короткой дуги – кратчайшее расстояние между двумя точками. Между двумя точками-антиподами можно провести бесконечное количество больших кругов, но расстояние между ними будет одинаково на любом круге и равно половине окружности круга, или π*R, где R – радиус сферы.

На плоскости (в прямоугольной системе координат), большие круги и их фрагменты, как было упомянуто выше, представляют собой дуги во всех проекциях, кроме гномонической, где большие круги - прямые линии. На практике это означает, что самолеты и другой авиатранспорт всегда использует маршрут минимального расстояния между точками для экономии топлива, то есть полет осуществляется по расстоянию большого круга, на плоскости это выглядит как дуга.

Форма Земли может быть описана как сфера, поэтому уравнения для вычисления расстояний на большом круге важны для вычисления кратчайшего расстояния между точками на поверхности Земли и часто используются в навигации. Вычисление расстояния этим методом более эффективно и во многих случаях более точно, чем вычисление его для спроектированных координат (в прямоугольных системах координат), поскольку, во-первых, для этого не надо переводить географические координаты в прямоугольную систему координат (осуществлять проекционные преобразования) и, во-вторых, многие проекции, если неправильно выбраны, могу привести к значительным искажениям длин в силу особенностей проекционных искажений. Известно, что более точно описывает форму Земли не сфера, а эллипсоид, однако в данной статье рассматривается вычисление расстояний именно на сфере, для вычислений используется сфера радиусом 6372795 метров, что может привести к ошибке вычисления расстояний порядка 0.5%.

Формулы

Существует три способа расчета сферического расстояния большого круга. 1. Сферическая теорема косинусов В случае маленьких расстояний и небольшой разрядности вычисления (количество знаков после запятой), использование формулы может приводить к значительным ошибкам связанным с округлением. φ1, λ1; φ2, λ2 - широта и долгота двух точек в радианах Δλ - разница координат по долготе Δδ - угловая разница Δδ = arccos {sin φ1 sin φ2 + cos φ1 cos φ2 cos Δλ} Для перевода углового расстояния в метрическое, нужно угловую разницу умножить на радиус Земли (6372795 метров), единицы конечного расстояния будут равны единицам, в которых выражен радиус (в данном случае - метры). 2. Формула гаверсинусов Используется, чтобы избежать проблем с небольшими расстояниями. 3. Модификация для антиподов Предыдущая формула также подвержена проблеме точек-антиподов, чтобы ее решить используется следующая ее модификация.

Моя реализация на РНР

// Радиус земли define("EARTH_RADIUS", 6372795); /* * Расстояние между двумя точками * $φA, $λA - широта, долгота 1-й точки, * $φB, $λB - широта, долгота 2-й точки * Написано по мотивам http://gis-lab.info/qa/great-circles.html * Михаил Кобзарев < > * */ function calculateTheDistance ($φA, $λA, $φB, $λB) { // перевести координаты в радианы $lat1 = $φA * M_PI / 180; $lat2 = $φB * M_PI / 180; $long1 = $λA * M_PI / 180; $long2 = $λB * M_PI / 180; // косинусы и синусы широт и разницы долгот $cl1 = cos($lat1); $cl2 = cos($lat2); $sl1 = sin($lat1); $sl2 = sin($lat2); $delta = $long2 - $long1; $cdelta = cos($delta); $sdelta = sin($delta); // вычисления длины большого круга $y = sqrt(pow($cl2 * $sdelta, 2) + pow($cl1 * $sl2 - $sl1 * $cl2 * $cdelta, 2)); $x = $sl1 * $sl2 + $cl1 * $cl2 * $cdelta; // $ad = atan2($y, $x); $dist = $ad * EARTH_RADIUS; return $dist; } Пример вызова функции: $lat1 = 77.1539; $long1 = -139.398; $lat2 = -77.1804; $long2 = -139.55; echo calculateTheDistance($lat1, $long1, $lat2, $long2) . " метров"; // Вернет "17166029 метров"

Статья взята с сайта