Знаходження відстані між двома точками на карті за допомогою JavaScript (TypeScript)
Якщо у вас є координати двох точок на карті, обчислення відстані між ними є досить простим завданням. Цей тип обчислення зазвичай використовується в картографічних програмах, службах доставки, навігаційних системах та геолокаційних об’єктах. У цьому прикладі ми зосередимося на визначенні відстані за допомогою географічних координат, таких як широта та довгота. Ці значення дозволяють нам працювати з реальними положеннями на поверхні Землі та отримувати точні результати.
Для обчислення відстані ми скористаємося формулою Гаверсинуса, яка є відомим математичним підходом для вимірювання відстані між двома точками на сфері. Оскільки Земля не плоска, прості лінійні обчислення недостатньо точні для цієї мети. Формула Гаверсинуса враховує кривизну Землі та забезпечує надійне наближення для більшості практичних випадків. Це робить її популярним вибором у багатьох проектах, пов’язаних з геолокацією.
У нашому прикладі кінцева відстань буде обчислюватися в метрах, що корисно для коротких та середніх відстаней, таких як пішохідні маршрути або міська навігація. Якщо вам потрібно працювати з більшими відстанями, ту саму формулу можна легко адаптувати для повернення значень у кілометрах. Ви також можете змінити вивід залежно від вимог вашої програми.
Сам розрахунок буде реалізовано в TypeScript, що додає чіткості типізації та кращої читабельності коду. Це робить рішення простішим в обслуговуванні та безпечнішим для використання у великих проектах.
TypeScript
type Coord = {
lat: number;
lon: number;
};
// Constant for projection (Earth's radius in meters)
const EARTH_RADIUS = 6371000;
// Converting degrees to radians
function degToRad(deg: number) {
return (deg * Math.PI) / 180;
}
function haversineDistance (point1: Coord, point2: Coord) {
const { lat: lat1, lon: lon1 } = point1;
const { lat: lat2, lon: lon2 } = point2;
const lat1Rad = degToRad(lat1);
const lon1Rad = degToRad(lon1);
const lat2Rad = degToRad(lat2);
const lon2Rad = degToRad(lon2);
const deltaLat = lat2Rad - lat1Rad;
const deltaLon = lon2Rad - lon1Rad;
// Haversine formula
const a =
Math.sin(deltaLat / 2) ** 2 +
Math.cos(lat1Rad) * Math.cos(lat2Rad) * Math.sin(deltaLon / 2) ** 2;
const c = 2 * Math.asin(Math.sqrt(a));
return Math.round(EARTH_RADIUS * c);
}
Схожі записи:
-
Способи створення об’єктів у JavaScript
Існує декілька способів створення об’єктів у JavaScript. Тип даних Object відіграє вирішальну роль у JS. Об’єкт — це невпорядкований набір пар ключ-значення. Може містити...
-
Drop down меню (jQuery)
Drop down меню можна створити без JavaScript, лише використовуючи CSS. За допомогою :hover. Але меню JavaScript має свої переваги. Найголовніше - це затримка зникнення ви...
-
Як отримати максимальне значення в масиві JavaScript
Коротка замітка про пошук максимального значення в масиві JavaScript із числовими значеннями. Об’єкт Array в JS не має власного методу max. Щоб знайти максимальне знач...
Залишити відповідь