Geo.js нам в помощь

Подготовили: Евгений Рыжков и Татьяна Головко Дата публикации: 25.03.2011

Geo.js — это свободно распространяющаяся Javascript библиотека, которая сглаживает различия между W3C API, Gears API и API мобильных устройств. Достаточно всего лишь подключить пару элементов внизу твоих html страниц (технически их можно подключить, где угодно, даже в <head>. Но это замедлит загрузку страницы, так что лучше этого не делать).

Первый скрипт — gears_init.js инициализирует Gears, если тот установлен. Второй скрипт — geo.js. Подключаем их к странице:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Dive Into HTML 5</title>
</head>
<body>
...
<script src="gears_init.js"></script>
<script src="geo.js"></script>
</body>
</html>

Теперь ты можешь использовать установленные API геолокации:

if (geo_position_js.init()) {
	geo_position_js.getCurrentPosition(geo_success, geo_error);
}

Разберем этот код по шагам. Во-первых, нужно вызвать функцию init(), которая вернет true, если Geoloaction API доступен:

if (geo_position_js.init()) {

Сам по себе вызов функции init() не определит месторасположение пользователя. Это просто проверка возможности вообще определить его положение. Что бы действительно определить положение — нужно вызвать функцию getCurrentPosition():

geo_position_js.getCurrentPosition(geo_success, geo_error);

Функция getCurrentPosition() попросит у браузера разрешение определить местоположение пользователя. Если геолокация поддерживается с помощью Gears, тогда пользователь увидит выплывающее диалоговое окно, в котором браузер спросит разрешения на определение месторасположения пользователя. Если у браузера есть встроенная поддержка геолокации, подобный запрос может выглядеть несколько иначе, как, например, упомянутая мною ранее панель в Firefox 3.5.

Функция getCurrentPosition() принимает в качестве входящих параметров две функции. Если определение месторасположения прошло успешно, тогда вызывается первая функция. В своем примере я дал ей имя geo_success. Например, это может выглядеть так:

geo_position_js.getCurrentPosition(geo_success, geo_error);

Функция geo_success имеет один аргумент, в котором содержится информация о местоположении:

function geo_success(p) {
	alert("Found you at latitude " + p.coords.latitude + ", longitude " + p.coords.longitude);
}

Если getCurrentPosition() не может определить местоположение или пользователь запретил определение, тогда вызовется вторая функция — geo_error:

geo_position_js.getCurrentPosition(geo_success, geo_error);

Функция по обработке ошибок не принимает аргументов:

function geo_error() {
	alert("Could not find you!");
}

В настоящее время geo.js не поддерживает функцию watchPosition(). Если тебе нужен такой функционал, тогда придется его дописать самостоятельно используя getCurrentPosition().

Куда дальше

Показать комментарии