Перейти к навигации · Перейти к содержимому

Геолокация на веб-сайтах

Шел я пару дней назад по улице и размышлял о том, как можно улучшить один веб-сервис, предназначенный для поиска ближайших пунктов обслуживания. Обычно такие сервисы показывают карту, на которой при помощи различных фильтров надо установить свое местоположение (например, станцию метро), а сервис вам покажет ближайшие точки. С десктопными клиентами проблем нет — там можно и все разом выложить, а вот с мобильными устройствами желательно обращаться поэкономнее. В идеале была бы такая ситуация: пользователь заходит на сайт и нажимает кнопку «Найти в радиусе 500 метров от меня». А так как во многих современных устройствах (iPhone, HTC Touch и прочие нокии) сейчас встроен GPS-приемник, такая задача должна решаться просто.

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

Порядок определения

Есть три основных способа определить местонахождение (координаты) клиента (расположены по степени уменьшения точности определения):

  • GPS в аппарате (высокая точность — в пределах десятка метров)
  • Координаты по Wi-Fi точке доступа (разброс от сотен метров до нескольких километров)
  • Город по IP (километры)

Таким образом, при определении координат, необходимо идти по этому списку сверху вниз — если клиент поддерживает GPS — использовать его и т.д.

Технологическое воплощение

Пока, чуть ли не единственным (ну еще HTC Dream a.k.a. гуглофон) аппаратом, который из коробки поддерживает геолокацию является iPhone с прошивкой 3.0. Если вы уже обновились на новую прошивку, то достаточно сделать простой запрос в виде javascript-кода:

navigator.geolocation.getCurrentPosition(foundLocation, noLocation);

и вы получите доступ (после соответствующего разрешения пользователя, конечно же) к координатам клиента. В этой функции первым параметром является callback, срабатывающий при удачном определении координат, а вторым — срабатывающий при ошибке. Соответственно, в первой функции вы получаете доступ к объекту position, содержащему свойства position.coords.latitude и position.coords.longitude, которые вы сможете использовать в своих скриптах (например, для выборки ближайших объектов).

Что делать если ваши клиенты не пользуются айфоном? Выход есть, хотя пока что это своего рода экзотика.

Но у меня на маке плагин geode глючит, и Firefox вываливается с ошибкой

Во-первых, следующий релиз Firefox 3.5 будет содержать эту же функциональность в ядре. Но уже сейчас можно поставить специальный плагин Geode, который использует беспроводные сети для попытки определить координаты. Во-вторых, можно установить Google Gears, который существует для кучи платформ (например, для Opera mobile на WM6). Этот плагин использует не только Wi-Fi, но и GPS (если он есть в устройстве, конечно же).

Понятно, что вряд ли кто-то будет специально ставить непонятные плагины, позволяющие что-то там определять (тут еще встает вопрос privacy). Но я уверен, что в самом ближайшем будущем поддержка геолокации по умолчанию появится в большинстве мобильных устройств на платформах WM, symbian (или уже?) и прочих. Особенно это актуально для устройств с GPS, который дает наиболее точные результаты.

Если нет ни GPS, ни воможности определить координаты по Wi-Fi, то в качестве первого приближения стоит определить хотя бы город посетителя. Сделать это можно средствами специальных баз данных (например, бесплатной MaxMind Geo City lite) или воспользоваться сервисом от вездесущего гугла — AJAX API. Последний позволяет определять координаты по IP прямо из javascript-кода, не прибегая к серверным языкам.

Рабочий пример

Пример рекомендуется смотреть на айфоне с прошивкой 3.0

Я написал небольшой тест-драйв-скрипт, который демонстрирует все описанные в статье технологии: сначала пытается использовать встроенные возможности браузера (для iPhone или Firefox с плагином), затем пробует Google Gears, а если и это не проходит, то определяет город по IP. Результатом должна быть карта, центрированная по вашему местоположению.

Посмотреть пример

Ссылки по теме

Комментарии

Супер! Нужно развить идею – есть задачи, когда надо отправлять форму с привязкой к координатам. Может будет время написать скрипт формы с отправкой координат и отображением данных на карте? :)

интересная идея, а что с примером? негрузится

Romasha, у меня пример работает. Проверьте, может у вас отключен js?