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

Last updated: 04.01.2026
Views: 138

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

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

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

Сам розрахунок буде реалізовано в 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

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

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

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

Blue Captcha Image
Refresh

*