Вглубь Geolocaton API

Метод getCurrentPosition, кроме функций обратного вызова, имеет третий (необязательный) параметр — объект, содержащий атрибуты, определяющие характер определения координат:

Navigator. geolocation. watchPosition(

ShowPosition,

ErrorHandler,

{

EnableHighAccuracy: true, timeout: 100, maximumAge: 0

);

Поле enableHighAccuracy разрешает режим высокой точности определения (используется GPS, если эта технология поддерживается устройством, при этом возможны значительные временные задержки).

Imeout — максимальное время ожидания ответа (в миллисекундах), maximumAge определ я ет срок кэширования геолокационных данных.

Объект, передаваемый методом getCurrentPosition() в функцию обратного вызова, кроме широты и долготы, по спецификации может содержать еще ряд полезных вещей. Давайте их рассмотрим. Прежде всего это объект position. coords, содержащий географические координаты (мы его уже использовали):

— position. coords. latitude — отвечают соответственно за широту и долготу пользователя;

— position. coords. longitude — отвечают соответственно за широту и долготу пользователя;

— position. coords. w ltitude — высота над земной поверхностью;

— position. coords. wccuracy — точность местоположения в метрах. Этот параметр может сильно разниться в зависимости от неиспользования способа вычисления координат браузером. Определение по IP даст только координаты города (и то не всегда), WiFi до 20 метров, а мобильные устройства дают разброс от 10 м до километра;

— position. coords. w atitudeAccuracy — указывает погрешность в определении высоты;

— position. coords. w eading — направление движения в градусах, указывается по часовой стрелке от севера;

— position. coords. w peed — как нетрудно догадаться, скорость движения;

— position. Timestamp — дата замера.

Естественно, геолокация предназначена в первую очередь для мобильных устройств — задача определять координаты стационарного компьютера возникнет не очень часто, а мобильным устройствам свойственно, соответственно названию, время от времени изменять свое местоположение. Причем иногда это изменение непрерывно (движущийся транспорт, например).

Для постоянного прослеживания местоположения предназначен метод navigator. geolocation. watchPosition(). Работает он аналогично getCurrentPosition(), отличие состоит в том, что watchPosition будет немедленно сообщать о любых передвижениях пользователя:

<!DOCTYPE html>

<html>

<head></head>

<body>

<script type="text/javascript"> function successGeo(position) {

Alert(‘Target is moving at ‘+position. coords. speed+’ meters per second’);

}

Function failGeo(error) {

Alert(‘Houston, we have a problem: ‘+error);

}

If(navigator. geolocation) {

Var watchID = navigator. geolocation. watchPosition(successGeo, failGeo);

} else {

Alert(‘browser does not support geolocation :(‘);

}

</script>

</body>

</html>

На этом почти все, одно преимущество использования Geolocation API — в его ясности и простоте. Единственное, что осталось разобрать, — возможные проблемы его использования на примере возникающих ошибок. Реализуем функцию errorHandler:

Function errorHandler(error) { var message; switch (error. code) { case 0:

Message = ‘Неизвестная ошибка: ‘ + err. message; break;

Case 1:

Message = ‘Нет прав для определения позиции’; break;

Case 2:

Message = ‘Браузер не может определить позицию’ + error. message;

Break;

Case 3:

Message = ‘timed out’; break;

}

Console. log(message);

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *