0
🆓 FREE PROJECT

🚖 Урок 5: Geolocation — де я?

📍 Визначаємо місцезнаходження!

Відкриваєш Uber — він вже знає де ти!

Geolocation API визначає координати через GPS або Wi-Fi.

💡
А ТИ ЗНАВ?

🛰️ GPS точний до 3-5 метрів на відкритій місцевості!
📶 Wi-Fi визначає локацію до 50-100 метрів в приміщенні!

🧠
НОВЕ В ЦЬОМУ УРОЦІ!

📍 getCurrentPosition() — отримуємо координати
Success callback — коли користувач дозволив
Error callback — коли відмовив або помилка

🛰️
Geolocation — це як запитати дорогу!
Уяви, що браузер — це ввічливий помічник.

🙋 Ти: "Де я зараз?"
🔐 Браузер: "Спочатку дозвіл!" (спливаюче вікно)
Користувач: "Дозволяю!"
📍 Браузер: "Ось твої координати: 50.4501, 30.5234"

Приватність понад усе! Без дозволу — нічого не отримаєш.

🔐 Чому браузер питає дозвіл?

Геолокація — це чутлива інформація. Уяви:

🏠 Зловмисник може дізнатися де ти живеш
🏢 Де ти працюєш і коли йдеш додому
📍 Відстежувати твої маршрути щодня

Тому: Браузер ЗАВЖДИ питає дозвіл перед доступом до геолокації!

📱 ЖИВИЙ ДОДАТОК
Визначаємо твоє місцезнаходження!
9:41 📍 🔋 100%
🚖 KOODI TAXI
📍
Твоє місцезнаходження
Очікуємо...
⏳ Натисни кнопку

👆 Натисни "Знайти мене" і дозволь геолокацію в браузері!

🔐
Потік дозволів
Що відбувається коли викликаєш getCurrentPosition()?
1
Твій код викликає API
navigator.geolocation.getCurrentPosition(...)
2
Браузер показує спливаюче вікно
"Цей сайт хоче знати ваше місцезнаходження"
✅ Дозволити
→ Викликається success callback з координатами
❌ Заблокувати
→ Викликається error callback з помилкою
🗺️
Що є в position.coords?
Всі властивості об'єкта координат
latitude 50.4501
longitude 30.5234
accuracy ~15 метрів
altitude null (не завжди)
speed null (потрібен рух)
latitude (широта)

Від -90° до +90°
+ = північ, - = південь

longitude (довгота)

Від -180° до +180°
+ = схід, - = захід

🎯 accuracy (точність)

Показує радіус в метрах, в якому ти знаходишся.
GPS: ~5-15м | Wi-Fi: ~50-100м | IP: ~1-5км

1
📍 getCurrentPosition — отримуємо координати
🙋 getCurrentPosition — це як одноразовий запит!
"Де я зараз?" → Отримав відповідь → Все, функція закінчила роботу.
Базовий запит геолокації:
// Перевіряємо чи браузер підтримує геолокацію if ('geolocation' in navigator) { // Запитуємо координати navigator.geolocation.getCurrentPosition( // Success callback — коли користувач дозволив function(position) { const lat = position.coords.latitude; const lng = position.coords.longitude; console.log('Координати:', lat, lng); }, // Error callback — коли відмовив або помилка function(error) { console.log('Помилка:', error.message); } ); } else { alert('Геолокація не підтримується!'); }
🧪 Geolocation API потребує...
💡 navigator.geolocation — об'єкт для роботи з геолокацією

💡 getCurrentPosition(success, error) — запитує координати ОДИН раз

💡 position.coords — об'єкт з координатами та точністю

📝 СТРУКТУРА ВИКЛИКУ:

getCurrentPosition(
  successCallback, // отримав координати
  errorCallback,   // помилка або відмова
  options         // налаштування (опціонально)
)
✅ ПЕРЕВІРКА ПІДТРИМКИ:

'geolocation' in navigator — перевіряє чи браузер підтримує API.
Старі браузери або деякі вбудовані WebView можуть НЕ підтримувати!
2
❌ Обробка помилок
🛡️ Користувач може відмовити, GPS може бути вимкнений,
або сигнал недоступний. Завжди обробляй помилки!
Обробка всіх типів помилок:
function handleError(error) { switch(error.code) { case error.PERMISSION_DENIED: // Користувач натиснув "Заблокувати" alert('❌ Ви відмовили в доступі до геолокації'); break; case error.POSITION_UNAVAILABLE: // GPS недоступний (вимкнений, немає сигналу) alert('📡 Місцезнаходження недоступне'); break; case error.TIMEOUT: // Занадто довго чекали відповіді alert('⏱️ Час очікування вичерпано'); break; } } navigator.geolocation.getCurrentPosition( successCallback, handleError // передаємо функцію обробки помилок );
🧪 Якщо користувач відмовив у доступі...
💡 error.code — числовий код помилки

💡 error.message — текстовий опис помилки

🚨 ТРИ ТИПИ ПОМИЛОК:

PERMISSION_DENIED Користувач відмовив
POSITION_UNAVAILABLE GPS/Wi-Fi недоступний
TIMEOUT Занадто довго чекали
💡 ВАЖЛИВО ПРО ДОЗВОЛИ:

Якщо користувач натиснув "Заблокувати", браузер запам'ятає це!
Наступного разу спливаюче вікно НЕ з'явиться — одразу error callback.

Щоб скинути: Налаштування сайту → Дозволи → Геолокація
3
👁️ watchPosition — відстежуємо рух
🏃 getCurrentPosition — одноразове фото 📸
watchPosition — відеозйомка 🎥 (постійне оновлення)
Відстеження руху в реальному часі:
// Починаємо відстежувати рух const watchId = navigator.geolocation.watchPosition( function(position) { // Викликається КОЖНОГО РАЗУ коли координати змінюються! const lat = position.coords.latitude; const lng = position.coords.longitude; console.log('Нова позиція:', lat, lng); // Оновлюємо маркер на карті, показуємо маршрут, тощо updateMarker(lat, lng); }, function(error) { console.log('Помилка відстеження:', error.message); } ); // ⚠️ ВАЖЛИВО: Зупиняємо відстеження коли більше не потрібно! // Інакше батарея швидко розрядиться 🔋 navigator.geolocation.clearWatch(watchId);
🧪 position.coords.accuracy показує...
💡 watchPosition() — викликає callback кожного разу при зміні позиції

💡 clearWatch(watchId) — зупиняє відстеження (ОБОВ'ЯЗКОВО!)

🆚 getCurrentPosition vs watchPosition:

getCurrentPosition watchPosition
Один раз Постійно
Для: "Де я зараз?" Для: навігація, трекінг
Не потребує зупинки ОБОВ'ЯЗКОВО clearWatch!
🔋 УВАГА: БАТАРЕЯ!

watchPosition постійно використовує GPS!
Якщо забудеш clearWatch():
• 🔋 Батарея швидко розрядиться
• 📱 Телефон нагріється
• 👤 Користувач буде незадоволений
🚖 В KOODI TAXI:

getCurrentPosition — визначити стартову точку
watchPosition — показувати рух таксі на карті
clearWatch — зупинити коли поїздка завершилась

▶️ Натисни RUN і перевір!

Дозволь геолокацію — побачиш свої координати!

🏆 Що ти вивчив:

getCurrentPosition() — отримувати координати
Success & Error callbacks — обробляти результат
position.coords — latitude, longitude, accuracy
watchPosition / clearWatch — відстежувати рух

✅ Коли все працює:

Натисни "Готово" в редакторі!

⏱️ ~20 хв • Урок 5 з 8

Потрібна допомога?

💡 Підказка
🤖 AI-KOODI
HTML index.html ✏️
CSS style.css
JS app.js
1 2 3 4 5 6 7 8 9 10
localhost/taxi.html
🚖

Напиши код і натисни Run ▶