navigator.geolocation.getCurrentPosition() - визначає координати місцезнаходження пристрою користувача.
window.navigator.geolocation.getCurrentPosition(success[, error[, options]]);
window - не обов'язково вказувати. Об'єкт window.
navigator - об'єкт navigator.
geolocation - об'єкт geolocation.
success - Обов'язковий параметр. Функція зворотнього виклику , яка викликається при отримані даних геолокації і приймає об'єкт Position в якості єдиного параметра.
error - функція зворотнього виклику, яка викликається при виникненні помилки.
options - об'єкт який містить додаткові опції.
getCurrentPosition() метод об'єкту geolocation для отримання позиції геолокації пристрою користувача.
Отримання даних користувача є асинхроним і при успішному отримані даних позиції викликається функція success, а у випадку помилки error.
За політикою безпеки деякі браузери дозволяють визначати геолокацію лише для протоколу https.
Основними даними які повертаються є longitude - довгота і latitude - широта.
Знаючи довготу і широту можна отримати інформацію про об'єкт на карті (країна, область, місто, вулиця і т.п.) за допомогою таких сервісів як Google Maps API або маючи власну базу даних міст (адрес) і їх координатів (довготу і широту).
Зверніть увагу що для отримання даних геолокації потрібна згода користувача.
Деякі браузери дозволяють отримувати дані геолокації лише для захищених протоколів https:// .
Приклад пошуку найближчого міста в Україні за довготою і широтою від місця розташування:
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("Ваш браузер НЕ підтримує геолокацію.");
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('Ваш браузер Не підтримує геолокацію');