navigator.geolocation.getCurrentPosition()

navigator.geolocation.getCurrentPosition() - визначає координати місцезнаходження пристрою користувача.

Синтаксис:

window.navigator.geolocation.getCurrentPosition(success[, error[, options]]);

Параметри:

window - не обов'язково вказувати. Об'єкт window.

navigator - об'єкт navigator.

geolocation - об'єкт geolocation.

success - Обовязковий параметр. Функція зворотнього виклику , яка викликається при отримані даних геолокації і приймає об'єкт Position в якості єдиного параметра.

error - функція зворотнього виклику, яка викликається при виникнені помилки.

options - об'єкт який містить додаткові опції.

Опис:

getCurrentPosition() метод об'єкту geolocation для отримання позиції геолокації пристрою користувача.

Отримання даних користувача є асинхроним і при успішному отримані даних позиції викликається функція success, а у випадку помилки error.

Основними даними які повертаються є longitude - довгота і latitude - широта.

Знаючи довготу і широту можна отримати інформацію про об'єкт на карті (країна, область, місто, вулиця і т.п.) за допомогою таких сервісів як Google Maps API або маючи власну базу даних міст (адрес) і їх координатів (довготу і широту).

Приклад пошуку найближчого міста в Україні за довготою і широтою від місця розташування:

function position(pos){ // масив який містить назву міст та їх довготу і широту var misto=[ {name:"Київ",lat: 50.45000 , lon: 30.52333 }, {name:"Вінниця", lat: 49.23278 , lon: 28.46806}, {name:'Дніпро', lat: 48.45000, lon: 34.98333}, {name:'Донецьк', lat: 48.00278, lon: 37.80528},{name:'Маріуполь', lat: 47.09750, lon:37.54361}, {name:'Житомир', lat: 50.25667, lon: 28.66417}, {name:'Запоріжжя', lat: 47.84361, lon: 35.13056}, {name:'Івано-Франківськ', lat: 48.92278, lon: 24.71028}, {name:'Кропивницький', lat: 48.50917, lon: 32.25889}, {name:'Луганськ', lat: 48.57444, lon: 39.30778}, {name:'Луцьк', lat: 50.74722, lon: 25.32528}, {name:'Львів', lat: 49.83917, lon: 24.02972}, {name:'Миколаїв', lat: 46.97583, lon: 31.99472}, {name:'Одеса', lat: 46.46667, lon: 30.73333}, {name: 'Полтава', lat: 49.58944, lon: 34.55139}, {name: 'Рівне', lat: 50.62111, lon: 26.25194}, {name:'Суми', lat: 50.90722, lon: 34.79861}, {name: 'Тернопіль', lat: 49.55306, lon: 25.59500}, {name: 'Ужгород', lat: 48.62111, lon: 22.28778 }, {name: 'Харків', lat: 50.00444, lon: 36.23139}, {name:'Херсон', lat: 46.63611, lon: 32.61694}, {name:'Хмельницький', lat: 49.42194 , lon: 26.98972}, {name:'Черкаси', lat: 49.44444, lon: 32.05972}, {name:'Чернігів', lat: 51.50000, lon: 31.30000}, {name:'Чернівці', lat: 48.29222, lon: 25.93500}, {name:'Сімферополь', lat: 44.94806, lon: 34.10417}]; for(i=0.001;i<4; i+=0.001) for(j=0; j<misto.length;j++){ if((misto[j].lat<pos.coords.latitude+i && misto[j].lat>=pos.coords.latitude-i) && (misto[j].lon<pos.coords.longitude+i && misto[j].lon>=pos.coords.longitude-i)){ alert( misto[j].name ); return; } } } if(navigator.geolocation){ navigator.geolocation.getCurrentPosition(position, function(e){ alert('Error.code: '+e.code+' Error.message: '+e.message); } ); }else alert("Ваш браузер НЕ підтримує геолокацію.");

Зверніть увагу що для отримання даних геолокації потрібна згода користувача.

Деякі браузери дозволяють отримувати дані геолокації лише для захищених протоколів https:// .

Приклад:

if(navigator.geolocation){ navigator.geolocation.getCurrentPosition(function(pos){ alert( 'latitude: '+pos.coords.latitude+' longitude: '+pos.coords.longitude+' altitude: '+pos.coords.altitude+' accuracy: '+pos.coords.accuracy+' altitudeAccuracy: '+pos.coords.altitudeAccuracy+' heading: '+pos.coords.heading+' speed: '+pos.coords.speed ); },function(e){alert(e);}, {enableHighAccuracy: true, timeout: 4000, maximumAge: 0 } ); }else alert("Ваш браузер НЕ підтримує геолокацію."); function position(pos){ alert( 'Ваше місце розташування. широта: '+pos.coords.latitude+' довгота: '+pos.coords.longitude); } if(navigator.geolocation){ navigator.geolocation.getCurrentPosition(position, function(e){ switch(e.code){ case e.PERMISSION_DENIED: alert('Користувач не дозволим визначити місце розташування.'); break; case e.TIMEOUT: alert('Час очікування браузером на визначення місця розташування минув.'); break; case e.POSITION_UNAVAILABLE : alert('Інформація про місце розташування недоступна.'); break; case e.UNKNOWN_ERROR: alert('Виникла невідома помилка визначення місця розташування.'); break; default: alert('Error.code: '+e.code+' Error.message: '+e.message); break; } } ); }else alert("Ваш браузер НЕ підтримує геолокацію."); function pozitions(pos){ if(pos.coords.accuracy>10000) alert('Позиція користувача не дуже точна. Більше 10 км.'); else alert('Позиція користувача з точність до '+pos.coords.accuracy+' метрів'); } if(navigator.geolocation){ navigator.geolocation.getCurrentPosition(pozitions, function(e){alert(e.message);}); }else alert('Ваш браузер Не підтримує геолокацію');