Наповнення JS розділу

Добридень, Пані та Панове, завдяки вам вдалося зібрати більше 19тис грн з необхідних 15тис на впровадження JS розділу.

JS розділ вже впроваджено - переходимо до його наповнення і почнемо бігти довгий марафон, адже JS має більше 1100 різноманітних методів, властивостей, подій і т.д., які необхідно описати.

Будемо працювати, і вдень, і вночі, щоб орієнтовно взимку закінчити наповнювати JS розділ!

Ви також можете допомогти нам в цьому. Долучайтеся до нашої спільноти в дискорді - ставайте її частиною і допомагайте нашому розвитку.

Також, підтримуйте нас матеріально.

JS об'єкт Geolocation

Об'єкт Geolocation у JavaScript

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

Основний метод:

  • getCurrentPosition(): запитує поточне географічне положення користувача.

Основні властивості:

  • coords.latitude: широта.
  • coords.longitude: довгота.
  • coords.accuracy: точність визначення координат в метрах.

Приклад:

navigator.geolocation.getCurrentPosition(function(position) {
    console.log("Широта:", position.coords.latitude);
    console.log("Довгота:", position.coords.longitude);
});

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

Відслідковування положення в реальному часі

watchPosition() - це метод, який дозволяє вам отримувати оновлені дані про положення користувача у реальному часі. Це може бути корисно, наприклад, для створення додатків слідкування за рухом користувача.

Основний метод:

  • watchPosition(): відслідковує зміни положення користувача в реальному часі.

Приклад:

let watchID = navigator.geolocation.watchPosition(function(position) {
    console.log("Нова широта:", position.coords.latitude);
    console.log("Нова довгота:", position.coords.longitude);
});

// Для зупинки відслідковування
navigator.geolocation.clearWatch(watchID);

Тут ми починаємо відслідковувати рухи користувача і виводимо оновлені координати. Щоб зупинити відслідковування, ми використовуємо метод clearWatch().

Обробка помилок

Коли ви працюєте з Geolocation API, можуть виникати різні помилки: користувач може відмовити в доступі, може бути проблема з отриманням даних від супутників GPS і т.д. Добре зрозуміти, як обробляти такі помилки.

Приклад:

navigator.geolocation.getCurrentPosition(
    function(position) {
        console.log("Широта:", position.coords.latitude);
        console.log("Довгота:", position.coords.longitude);
    },
    function(error) {
        switch(error.code) {
            case error.PERMISSION_DENIED:
                console.log("Користувач відхилив запит на геолокацію.");
                break;
            case error.POSITION_UNAVAILABLE:
                console.log("Інформація про місцезнаходження недоступна.");
                break;
            case error.TIMEOUT:
                console.log("Тайм-аут запиту до геолокаційного сервісу.");
                break;
            case error.UNKNOWN_ERROR:
                console.log("Виникла невідома помилка.");
                break;
        }
    }
);

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

Нотатка:

Працюючи з Geolocation API, завжди пам'ятайте про приватність користувача. Завжди інформуйте користувача, якщо ви збираєтесь отримувати його геолокаційні дані, і запитуйте його дозвіл перед цим. Не всі користувачі хочуть ділитися своїм місцезнаходженням, тому важливо показати прозорість у вашому намірі отримувати таку інформацію.

Нотатка:

Дані, отримані через Geolocation API, можуть відрізнятися за точністю. Наприклад, дані отримані від мобільного телефону можуть бути менш точними, ніж дані отримані від пристрою з високоякісним GPS-модулем. Враховуйте coords.accuracy для оцінки точності отриманих даних.

Порада:

Є кілька типових причин, через які може не вдатися отримати геодані. Зокрема, користувач може відмовити в доступі, або геодані можуть бути тимчасово недоступні. Використовуйте обробники помилок, щоб надати користувачеві відповідний відгук.

Порада:

Якщо ви плануєте відслідковувати рухи користувача в реальному часі, будьте обережні, щоб не створювати надмірного навантаження на батарею його пристрою. Метод watchPosition() відправляє багато запитів, що може швидко споживати заряд батареї.

Синтаксис

navigator.geolocation.methodName([options])

Переглядачі

Переглядач

5

3.5

5

10.6

12

Переглядач

37

18

4

3

Переглядач

0.10.0

1.0

Приклади


У цьому прикладі ми отримуємо поточне місцезнаходження користувача за допомогою getCurrentPosition(). Після цього ми використовуємо отримані координати для визначення погодних умов за допомогою зовнішнього API погоди.

navigator.geolocation.getCurrentPosition(function(position) {
    let latitude = position.coords.latitude;
    let longitude = position.coords.longitude;

    fetch(`https://api.weatherapi.com/v1/current.json?key=YOUR_API_KEY&lat=${latitude}&lon=${longitude}`)
    .then(response => response.json())
    .then(data => {
        alert(`Погода у вашому місцезнаходженні: ${data.current.temp_c}°C, ${data.current.condition.text}`);
    });
});

Ми визначаємо координати певного міста (у цьому випадку Києва) і потім розраховуємо відстань від поточного місцезнаходження користувача до цього міста в кілометрах.

let destination = {lat: 50.4501, lon: 30.5234}; // координати Києва

navigator.geolocation.getCurrentPosition(function(position) {
    let latitude = position.coords.latitude;
    let longitude = position.coords.longitude;

    let distance = getDistanceFromLatLonInKm(latitude, longitude, destination.lat, destination.lon);
    alert(`Ви знаходитесь приблизно ${distance} км від Києва.`);
});

function getDistanceFromLatLonInKm(lat1, lon1, lat2, lon2) {
    let R = 6371;
    let dLat = deg2rad(lat2-lat1);
    let dLon = deg2rad(lon2-lon1); 
    let a = 
        Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * 
        Math.sin(dLon/2) * Math.sin(dLon/2)
    ; 
    let c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    let distance = R * c;
    return distance;
}

function deg2rad(deg) {
    return deg * (Math.PI/180);
}

Використовуючи Google Maps API, ми можемо відобразити поточне місцезнаходження користувача на карті та розмістити маркер на його поточному місці. Перш за все, нам потрібно отримати координати користувача, а потім створити карту та маркер з цими координатами.

navigator.geolocation.getCurrentPosition(function(position) {
    let latitude = position.coords.latitude;
    let longitude = position.coords.longitude;

    let map = new google.maps.Map(document.getElementById('map'), {
        center: {lat: latitude, lng: longitude},
        zoom: 15
    });

    let marker = new google.maps.Marker({
        position: {lat: latitude, lng: longitude},
        map: map,
        title: 'Ваше поточне місцезнаходження'
    });
});

Методи

getCurrentPosition()
Отримує поточне місцезнаходження користувача за допомогою GPS або інших датчиків.
toJSON()
Повертає об'єкт, що містить координати, точність, швидкість та інші параметри у форматі JSON.

Властивості

latitude
Визначає широту поточного місця користувача в градусах, використовуючи дані геолокації.
longitude
Визначає довготу поточного місця користувача в градусах, використовуючи дані геолокації.
altitude
Повертає висоту над рівнем моря для поточного місцезнаходження користувача.
accuracy
Використовується для визначення точності геолокації користувача.
altitudeAccuracy
Показує точність висоти користувача над рівнем моря.
heading
Визначає напрямок руху пристрою відносно Півночі в градусах (0°-360°).
speed
Повертає швидкість руху пристрою у метрах на секунду на основі географічного положення.