Возникла суровая необходимость с помощью PHP сделать что-то, с помощью чего можно будет быстренько определять расстояние между двумя точками на карте по координатам GPS. Для тех, кто немного не в курсе — уточню, что основная сложность подобной задачи состоит в том, что нам нужно определить расстояния между двумя точками на сфере, а не на плоскости. Потому нужно (есть аналоги, но я предпочитаю использовать) метод Хаверсина.
Метод Хаверсина основан на тригонометрических функциях и законах сферической геометрии и позволяет вычислить расстояние между двумя точками на поверхности сферы, используя их географические координаты (широту и долготу). Этот метод учитывает кривизну Земли и дает более точные результаты, особенно для дальних расстояний, чем простое расстояние по прямой линии на плоскости.
Я уже описывал схему решения подобного вопроса с помощью Python (решение представлено здесь) — но, повторюсь — нужно было сделать аналогичное, но теперь уже на PHP. Заняло все минут 30, с перерывом на чай и музыку (в качестве музыки использовал вот это):
… в визуальном оформлении все просто — форма с двумя полями, куда вводятся координаты первой и второй точки, и — соответственно, кнопка, по нажатию на которую происходит вся магия 🙂 Было лениво выводить всю магию во второй файл, потому все делается в одном файлике, код которого — ниже. Пользуйтесь, если нужно:
/* Error on d-style.css : Something went wrong: Предоставлен неверный URL. */
document.getElementById('textarea').value = 'Расстояние между точками: " . number_format($distance, 5) . " км';";
} else {
// Вывод сообщения об ошибке формата координат
echo "Некорректный формат координат. Введите координаты в формате 'широта, долгота' для обеих точек.";
}
}
?>
В коде куча комментариев — вроде как все будет понятно.
В рабочем виде механизм для определения расстояния между двумя точками на карте по координатам GPS можно либо по ссылке, либо — вот, окошечко во фрейме 🙂 :
Как всегда — в случае возникновения вопросов пишите на почту, или в Telegram.
Support the Blog!
Running a blog takes a lot of effort, time, and passion. Your donations help improve the content, inspire new ideas, and keep the project going.
If you’ve enjoyed the blog’s materials, any support would mean the world to me. Thank you for being here! ❤️