JavaScript GeoLocation

26 февраля 2010, 10:00 Евгений Белодед JavaScript рейтинг +16-

Для многих остается секретом, что с помощью js можно получить информацию о геолокэйшене пользователя.

Средства есть разные — либо через встроенный функционал HTML5 в сафари на айфоне, либо через Гугл Гирс на андройде, либо другими путями, но так или иначе, с разрешения пользователя мы можем получить информацию о его местоположении.

Сегодня я расскажу о библиотеке, которая объединяет в себе разные средства и упрощает работу с определением геопозиции.

Начну без кода. Кому это надо?

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

Но лучше посмотреть на эту функцию не только с точки зрения социальных радостей.

Лучше всего, чтобы определение геопозиции использовалось в сайтах, предлагающих доставку товаров.

Представьте себе замечательный сайт с пиццой. Пусть у пиццы есть замечательная мобильная версия. Как приятно будет обнаружить, что сайт уже в курсе, куда надо доставлять пиццу, согласитесь?

Итак, к делу. Будем использовать — javascript geolocation framework. Это инструмент, который, как я уже сказал, определяет возможность браузера поделиться геолокэйшеном.

Работает предельно просто:

 //Определяет, есть ли возможность получить информацию о геопозиции
if(geo_position_js.init()){
geo_position_js.getCurrentPosition(success_callback,error_callback);
}
else{
alert("Информация о геопозиции недоступна");
}

После того, как пользователь подтведит, что хочет поделиться информацией о своем местоположении, мы сможем воспользовать этой информацией.

Поддерживаемые платформы:

 

Геолокэйшен включен в HTML5, но вот реализация в браузерах пока что отстает. Все же, давайте посмотрим, в каких десктопных браузерах будет работать определение геопозиции.

 

Реализация и проверка работы

Я сделал небольшую страничку, на которой можно все проверить.

HTML и JS


<html>
<head>
<meta name="viewport" content="width = device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=no;">
<script src="js/jquery-1.4.2.min.js" type="text/javascript"></script>
<script src="http://code.google.com/apis/gears/gears_init.js" type="text/javascript" charset="utf-8"></script>
<script src="js/geo.js" type="text/javascript" charset="utf-8"></script>
<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAgpm_fKKGJMknBmvrDF4s3BRNsT4fNyt1d9r1Bb9U2Gew07vUkBS5hWzE51wgj_4ognZgLIHGpRqcRg&sensor=false"
type="text/javascript"></script>
<script>
var latlng;var map;
if (geo_position_js.init()) {
geo_position_js.getCurrentPosition(success_callback, error_callback, { enableHighAccuracy: true });
}
else {
alert("Functionality not available");
}

function success_callback(p) {

initialize_map(p.coords.latitude,p.coords.longitude);
}

function error_callback(p) {
alert('error=' + p.message);
}

function initialize_map(latitude, longitude) {
$('#Coords').text(latitude + ',' + longitude);
$(window).resize(function() {
map.setCenter(latlng, 15);
});
if (GBrowserIsCompatible()) {
map = new GMap2(document.getElementById("map_canvas"));
latlng = new GLatLng(latitude, longitude);
map.setCenter(latlng, 15);
map.addOverlay(new GMarker(latlng));
}
}

</script>

</head>
<body style="margin: 0; padding: 0;" onload="initialize()" onunload="GUnload()">
<div id="Coords" style="position: absolute; left: 0; top: 0; background: #fff; padding: 1px 4px; z-index: 3333"></div>
<div id="map_canvas" style="width: 100%; height: 100%">
</div>
</body>

 Обратите внимание на мета-тег viewport. Он позволяет отключить функцию масштабирования в мобильном браузере - тогда мы сможем легко пользоваться картой на iPhone, Android и т.п., в том числе функцией мультитача.

Вот что мы увидим если зайдем на страничку с демо. На десктопе я смотрел в Хромиуме и Фаерфоксе - результат определения координад одинаков и неточен.

Я думаю, что все все поняли. Поленился менять интерфейс на русский. Соглашаемся.

В верхнем левом углу я показываю определившиеся координаты. То же самое на айПоде:

 В результате видим полноразмерную карту с возможностью масшабирования мультитачем. Красота.

Замечу, что геопозиция определилась по-разному на айподе и в десктопных браузерах, несмотря на то, что они работают через один и тот же роутер. Сафари на айподе показал очень точные координаты. Гораздо точнее чем те, которые определились через GPS на Андройде (HTC Hero).

ДемоСкачать

Если вы хотите запустить пример у себя на локали, то не забудьте поменять ключ Google Maps, иначе карты не заработают.

Функцию геокоординат, я добавил в свой Beloded Twitter Client.

Других подобных твиттер-клиентов, работающих через браузер я не нашел.

Скоро добавлю актуальную для рунета функцию обновления статуса в контакте при наличии определенного хэш-тега. И ссылко-сокращалку. И блэкджэк. И шлюх. А твиттер уберу.

Обо всех обновлениях я пишу в тви @zhendalf.

Рекламное место, которое может стать вашим

Понравилась статья?

Тогда подпишись на обновления через RSS или воспользуйся
другими способами подписки.

Читать в Яндекс.Ленте Добавить в Google Добавить в Netvibes
  •  

Комментарии — 11

RSS
  • Аватарка
    26 февраля в 11:53 ]]>sofcase]]>
    IE как всегда ничего не поддерживает :)
  • Аватарка
    26 февраля в 12:21 Леонид
    В Опере тоже не работает :(
  • Аватарка
    26 февраля в 12:46 ]]>Evgenij]]>
    Есть билд оперы, который поддерживает геолокейшен. В статье есть ссылка.

    Да, кстати, если будете смотреть демо на мобильнике, то вот короткая ссылка:
    http://bit.ly/bG0a4X
  • Аватарка
    26 февраля в 19:33 ]]>Kykyryzo]]>
    не сработало в опере. напишите про серверные методы, пожалуйста? без джава скрипта
  • Аватарка
    27 февраля в 7:58 Almaz
    В Хроме хромает
  • Аватарка
    28 февраля в 11:22 Zombik
    Народ, какой хром, какая опера?
    Геолокация - замечательная функция, которая работает в браузере андроида и айФоне. Для меня этого достаточно, чтобы начать использовать.
    Спасибо, Евгений!
  • Аватарка
    28 февраля в 17:45 ]]>Da_Bass]]>
    Спасибо Евгений!!! У меня все нормально работает.
  • Аватарка
    28 февраля в 19:29 ]]>Lera]]>
    И у меня всё ок!!!спасибо!
  • Аватарка
    1 марта в 15:08 ]]>Zerohold]]>
    О чем вообще речь? какая это возможность? Это не более чем надстройка, которая не признана многими как стандарт. При помощи самого Javascript вы никогда ничего не узнаете. Видно же по коду вызывается некий сервис который и определяет ваши типа данные коориданты и уже через javascript вам показывается. Такую фичу можно и сейчас самому сделать на обычном js для любого браузера. Конечно будет геморой, но можно.
    Поэтому ничего тут такого нет.
  • Аватарка
    2 марта в 2:26 ]]>Ланайан]]>
    А есть ли способ обойти подтверждение пользователя о разрешении его находить, чтобы чисто анонимно использовать данную возможность?
  • Аватарка
    2 марта в 11:37 ]]>Евгений]]>
    Нет, такой возможности нету. Тихо можно определить только по IP, естественно, с определенной скидкой на точность.
  • Эл. почта (используется для Граватарки)
  • Домашняя страница
  • Имя в Твиттере
  • Разрешенные теги Текст сообщения (надо бы заполнить это поле)
  • как выглядит какой тег
    жирный текст <b>жирный текст</b>
    курсивный тект <i>курсивный тект</i>
    зачеркнутый текст <s>зачеркнутый текст</s>
    подчеркнутый текст <u>подчеркнутый текст</u>
    ссылка <a href="адрес">ссылка</a>
    function foo() { ... }
    <pre><code>function foo() { ... } </code></pre>