[315]
25 мая 2014, 16:03

Работа с HTML5 Geolocation API

Всем привет!

Давайте поговорим о HTML5 Geolocation API, которое используется для получения географического положения пользователя. С помощью API геолокации, пользователь может поделиться с доверительным веб-приложением своим местоположением.

Ключевой момент в конфиденциальности передаваемой информации. Браузеры не могут получать информацию о местоположении пользователя без согласия самого пользователя. Иными словами, пользователь должен дать согласие на передачу своего местоположения или отказаться от передачи данных. Диалог с пользователем обычно ведется через информационную панель в верхней части окна браузера.

Сразу стоит отметить, что Геолокацию поддерживаю все современные браузеры и даже IE. Общая картина выгладит так: IE9+, FireFox 3.5+, Safari 5.0+, Chrome 5.0+, Opera 10.6+, iPhone 3.0+, Android 2.0+.

Проверка поддержки Geolocation API браузером

if ('geolocation' in navigator) { alert ('Да поддерживает!'); }

Работать с геолокацией нужно через объект navigator.geolocation, который содержит всего 3 метода.

navigator.geolocation.getCurrentPosition() — Определяет текущее местоположение пользователя.
navigator.geolocation.watchPosition() – Всякий раз определяет текущее местоположение пользователя, как только оно изменяется. Устройство пользователя само определяет оптимальный интервал опроса.
navigator.geolocation.clearWatch() – Останавливает слежение за пользователем инициированное методом watchPosition.

Методы getCurrentPosition и watchPosition похожи, за исключением того, что метод watchPosition пытается следить за сменой положения пользователя и его работа напоминает функцию setInterval, только без указания времени интервала опроса, за это отвечает само устройство пользователя. Метод watchPosition возвращает идентификатор, который нужен методу clearWatch для остановки слежения.

Далее все примеры будут основаны на методе getCurrentPosition.

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

success – callback функция, которая будет вызвана при успешном определении геопозиции пользователя.
error — callback функция, которая будет вызвана при ошибке или отмене определения геопозиции пользователем.
options – необязательный параметр, который должен быть объектом с дополнительными опциями.

Объект options может содержать некоторые свойства:

enableHighAccuracy – точность определения позиции (true/false) большая точность, меньшая точность. Для задействования средств определения геопозиции с большой точностью, устройство пользователя должно быть оборудовано этими средствами. Например, в мобильных устройствах, этим средством может выступать GPS. В противном случае, никакого эффекта от переключения этого параметра не произойдет.
timeout — количество миллисекунд, которое веб-приложение будет ожидать для получения положения пользователя. Таймер не начнет отсчет, пока пользователь не даст разрешение на вычисление его положение.
maximumAge — количество миллисекунд, пока данные хранятся в кэше. То есть не требуется постоянно заново определять геопозицию пользователя, а можно быстро взять старые данные.

Функция обратного вызова success принимает объект Position, который содержит данные о геопозиции пользователя.

Position.coords.latitude — широта в виде числа;
Position. coords.longitude — долгота в виде числа;
Position.coords.accuracy — точность позиции;
Position.coords.altitude — высота в метрах над средним уровнем моря;
Position.coords.altitudeAccuracy — точность положения высоты;
Position.coords.heading — градусы по часовой стрелке от севера;
Position.coords.speed — скорость в метрах в секунду;
Position.timestamp — время отклика.

Функция обратного вызова error принимает объект PositionError, который содержит код ошибки и текстовое сообщение.

PositionError.code – код ошибки, который является цифровым значением:

1 соответствует константе PERMISSION_DENIED – пользователь отказался сообщать своё метоположение;
2 соответствует константе POSITION_UNAVAILABLE – сеть не работает, нет связи со спутниками;
3 соответствует константе TIMEOUT – работа завершилась по таймауту, определение геопозиции занимает слишком много времени.

PositionError.message – сообщение, которое не предназначено для пользователя, а больше подходит для логов.

И так. А немного кода.

function geo_success(position) { alert(position.coords.latitude+”, ”+position.coords.longitude); }
function geo_error(error) { if(error.code == PERMISSION_DENIED) alert("Местоположение не определенно"); if(error.code == POSITION_UNAVAILABLE) alert("Сеть не активна"); if(error.code == POSITION_UNAVAILABLE) alert("Превышено время ожидания");
}
var geo_options = { enableHighAccuracy : true, maximumAge : 45000, timeout  : 30000 };
navigator.geolocation.getCurrentPosition(geo_success, geo_error, geo_options);

Вот и все. Благодаря этому простому функционалу данные о геопозиции пользователя можно использовать для многих целей. Например больше не нужно хранить огромную базу интервалов IP адресов по странам и городам, да и которую ещё нужно постоянно обновлять.

Комментарии (0)

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

Войдите, чтобы написать о чем-нибудь...
Вход Регистрация
Web.onRails
Здесь вы можете спросить или написать обо всём, что касается Веб-разработки.
написать о чем-нибудь...
Метки:
Лучшее
[52]
16 Окт 2011, 15:38
Вывести все элементы POST
[просмотров 1205]
[49]
17 Сен 2011, 15:13
FileZilla перетаскивание файлов
[просмотров 1125]
[74]
31 мая 2011, 11:48
Python проверка существования переменной
[просмотров 1081]
[58]
29 мая 2012, 12:08
Узнать версию PHP из командной строки
[просмотров 1080]
[315]
16 Июл 2011, 20:03
Python работа с MySQL
[просмотров 1073]
[2]
26 Июн 2018, 23:10
Как в React сделать поле input file с кнопкой?
[просмотров 991]
[119]
21 Июл 2011, 14:04
Python Imaging Library (PIL)
[просмотров 984]