Знаходження відстані між двома точками на карті за допомогою JavaScript (TypeScript)

Last updated: 04.01.2026
Views: 107

Якщо у вас є координати двох точок на карті, обчислення відстані між ними є досить простим завданням. Цей тип обчислення зазвичай використовується в картографічних програмах, службах доставки, навігаційних системах та геолокаційних об’єктах. У цьому прикладі ми зосередимося на визначенні відстані за допомогою географічних координат, таких як широта та довгота. Ці значення дозволяють нам працювати з реальними положеннями на поверхні Землі та отримувати точні результати.

Для обчислення відстані ми скористаємося формулою Гаверсинуса, яка є відомим математичним підходом для вимірювання відстані між двома точками на сфері. Оскільки Земля не плоска, прості лінійні обчислення недостатньо точні для цієї мети. Формула Гаверсинуса враховує кривизну Землі та забезпечує надійне наближення для більшості практичних випадків. Це робить її популярним вибором у багатьох проектах, пов’язаних з геолокацією.

У нашому прикладі кінцева відстань буде обчислюватися в метрах, що корисно для коротких та середніх відстаней, таких як пішохідні маршрути або міська навігація. Якщо вам потрібно працювати з більшими відстанями, ту саму формулу можна легко адаптувати для повернення значень у кілометрах. Ви також можете змінити вивід залежно від вимог вашої програми.

Сам розрахунок буде реалізовано в 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);
}
author
Автор: Ігор Рибалко
Працюю фронтенд розробником з 2014 року. Основний стек технологій - Vue.js і WordPress

Схожі записи:

  • Плавне прокручування (скроллінг) до якоря за допомогою JavaScript
    Плавне прокручування (скроллінг) – це популярна функція веб-дизайну, яка покращує взаємодію користувача, забезпечуючи плавну навігацію між розділами веб-сторінки. Замість...
  • Плагін jQuery Accordion
    На сайтах часто використовується акордеон. Цей елемент популярний і в той же час зручний. Акордеон допомагає структурувати контент і економить місце. У своїй роботі я час...
  • Як створити власний плагін jQuery
    Зручність плагіна jQuery полягає в тому, що ви можете використовувати один і той же код кілька разів для різних об’єктів. У цьому випадку копіювати та вставляти код не по...

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *