Виникла сувора необхідність за допомогою 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! ❤️