Расстояние между двумя точками на карте
Расстояние между двумя точками на карте
Одна из задач, с которой могут столкнуться разработчики - вычисление расстояния между двумя точками на карте. Это может быть определение объектов, которые находятся вблизи какой-то конкретной точки, оценка времени перемещения из одной точки в другую, вариантов применения может быть много.
В рабочих проектах для определения расстояния между двумя точками на карте с известными географическими координатами я использую вот такую функцию:
Code (PHP) : Убрать нумерацию
- //---------------------------------------------------------------------
- // Получение расстояния между двумя точками на карте
- //---------------------------------------------------------------------
- function distance($lat1, $lng1, $lat2, $lng2){
- return ceil(12745594 * asin(sqrt(
- pow(sin(deg2rad($lat2-$lat1)/2),2)
- +
- cos(deg2rad($lat1)) *
- cos(deg2rad($lat2)) *
- pow(sin(deg2rad($lng2-$lng1)/2),2)
- )));
- }
Если объектов в базе много, то для ускорения запроса и сужения интервала выборки можно использовать вспомогательную функцию, которая определяет координаты граничных точек, находящихся на заданном расстоянии относительно центральной точки.
Code (PHP) : Убрать нумерацию
- //---------------------------------------------------------------------
- // Получение границ участка местности относительно центральной точки
- //---------------------------------------------------------------------
- function get_bounds($lat, $lng, $dist) {
- // Длина дуги параллели в 1 градус на экваторе
- $eq=111321;
- return array(
- // Длину дуги меридиана считаем постоянной
- 'top'=>$lat+$dist/$eq,
- 'bottom'=>$lat-$dist/$eq,
- // Длина дуги параллели = Длина дуги на экваторе * cos(Широта)
- 'right'=>$lng+$dist/($eq*cos(deg2rad($lat))),
- 'left'=>$lng-$dist/($eq*cos(deg2rad($lat))),
- );
- }
Просмотров: 4004 | Комментариев: 2
Метки: PHP, полезные функции
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
user
(26.08.2017 в 01:46):
Кстати, встречалась оригинальная программка - этакий курвиметр.
Используется обычная мышь с колёсиком, которую переворачивают вверх ногами и катят колёсиком по обычной бумажной карте. В результате на экране отображается длина пройденного колёсиком пути.
Идея оригинальная, но малофункциональная.
А вот программа-"курвиметр" для электронных карт, замер пройденного на экране курсором мыши расстояния - это уже б.м.полезная вещь:
old-dos.ru/dl.php?id=7068
Упомянутая программа для использования перевёрнутого мыша в качестве курвиметра хорошо ищется по тегу "Курвиметр из мыши".
Используется обычная мышь с колёсиком, которую переворачивают вверх ногами и катят колёсиком по обычной бумажной карте. В результате на экране отображается длина пройденного колёсиком пути.
Идея оригинальная, но малофункциональная.
А вот программа-"курвиметр" для электронных карт, замер пройденного на экране курсором мыши расстояния - это уже б.м.полезная вещь:
old-dos.ru/dl.php?id=7068
Упомянутая программа для использования перевёрнутого мыша в качестве курвиметра хорошо ищется по тегу "Курвиметр из мыши".
Добавить комментарий
Заполните форму для добавления комментария
Мсье знает толк в извращениях :)
OZI Explorer? Не, не слышали...