Статьи

12 классных идей геолокации HTML5

Знание местоположения ваших пользователей может помочь повысить качество вашего веб-сайта и скорость вашего обслуживания. Раньше пользователям приходилось активно вводить свое местоположение и отправлять его на сайт, либо печатая его, используя длинный выпадающий список, либо щелкая карту. Теперь, с помощью API геолокации HTML5, найти ваших пользователей (с их разрешения) стало проще, чем когда-либо. На рисунке 1 показан веб-сайт, использующий геолокацию для определения местоположения пользователя, представленный по широте и долготе. Числа могут быть легко переведены в нечто более понятное, например, название улицы или города.

Рисунок 1, показывающий местоположение пользователя с помощью геолокации

Представьте, насколько полезным может быть ваш сайт, если он предоставляет онлайн-расписания для всех видов общественного транспорта в конкретном городе. Используя геолокацию, сайт мог бы порекомендовать оптимальные маршруты путешествий, чтобы люди как можно быстрее шли туда, куда они направляются. Пользователи настольных компьютеров могут отсортировать свое начальное местоположение по близости к своему компьютеру. Мобильные пользователи, пытающиеся добраться до дома после ночи, могут быстро найти ближайшую автобусную остановку в нескольких минутах ходьбы. Эти возможности и многое другое просто API.

Сценарии использования API геолокации

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

  1. Места общественного транспорта могут перечислить близлежащие автобусные остановки и метро.
  2. Поздно вечером? Сайты такси или автосервиса могут найти ваше местоположение, даже если вы не знаете.
  3. Торговые сайты могут сразу предоставить оценки стоимости доставки.
  4. Туристические агентства могут предоставить лучшие советы по отдыху для текущего местоположения и сезона.
  5. Контент сайтов может более точно определять язык и диалект поисковых запросов.
  6. Сайты недвижимости могут представлять средние цены на жилье в определенной области, удобный инструмент, когда вы едете, чтобы проверить окрестности или посетить открытые дома.
  7. Сайты кинотеатров могут рекламировать фильмы, которые играют поблизости.
  8. Онлайн-игры могут смешать реальность с игрой, предоставляя пользователям миссии, которые необходимо выполнить в реальном мире.
  9. На новостных сайтах могут быть настроены местные заголовки и погода на главной странице.
  10. Интернет-магазины могут сообщить, есть ли товары на складе в местных магазинах.
  11. Сайты по продаже билетов на спортивные и развлекательные мероприятия могут рекламировать предстоящие игры и шоу поблизости.
  12. Объявления о вакансиях могут автоматически включать потенциальные времена коммутируют.

Как работает геолокация

Технически говоря, у ПК или мобильного устройства есть несколько способов узнать свое местоположение (надеюсь, в том же месте, что и пользователь).

  • GPS является наиболее точным способом определения местоположения, но он менее энергоэффективен, чем другие варианты, и иногда требует длительного времени запуска.
  • A-GPS (вспомогательный GPS) использует триангуляцию между вышками мобильной связи и мачтами для определения местоположения. Хотя A-GPS и не такой точный, как GPS, он подходит для многих сценариев.
  • Мобильные устройства, которые поддерживают точки доступа Wi-Fi, могут использовать точки доступа для определения местоположения пользователя.
  • Стационарные компьютеры без беспроводных устройств могут получать приблизительную информацию о местоположении, используя известные диапазоны IP-адресов.

Когда дело доходит до обмена физическим местоположением пользователей, конфиденциальность является серьезной проблемой. Согласно API Geolocation, «пользовательские агенты не должны отправлять информацию о местоположении на веб-сайты без явного разрешения пользователя». Другими словами, пользователь должен всегда соглашаться делиться информацией о местоположении с веб-сайтом. На рисунке 2 показано типичное сообщение, запрашивающее разрешение пользователя. Для получения дополнительной информации об обеспечении безопасности с помощью Geolocation API см. Раздел Вопросы безопасности и конфиденциальности .

Рисунок 2 Пример запроса пользователя

Три простых функции

Вы готовы включить геолокацию в свой веб-сайт? Вам нужно изучить только три простые функции для освоения всего API, который находится в объекте геолокации, атрибуте объекта Navigator. (Узнайте больше об объекте геолокации здесь .)

Функция getCurrentPosition получает местоположение пользователя один раз. Он принимает два аргумента в форме обратных вызовов: один для успешного запроса местоположения и один для неудачного запроса местоположения. Обратный вызов успеха принимает объект Position в качестве аргумента. При желании он принимает третий аргумент в форме объекта PositionOptions.

    navigator.geolocation.getCurrentPosition(locationSuccess, locationFail);
     
     function locationSuccess(position) {
     
            latitude = position.coords.latitude;
     
            longitude = position.coords.longitude;
     
     }
     
     function locationFail() {
     
           alert(‘Oops, could not find you.’);
     
     }

 

Объект Position содержит свойства, показанные на рисунке 3 .

Рисунок 3 Свойства объекта Position

Имущество Значение Ед. изм
coords.latitude двойной степени
coords.longitude двойной степени
coords.altitude двойной или ноль метры
coords.accuracy двойной метры
coords.altitudeAccuracy двойной или ноль метры
coords.heading двойной или ноль градусов по часовой стрелке
coords.speed двойной или ноль м / сек
отметка времени DOMTimeStamp как объект Date

Функция watchPosition продолжает опрос позиции пользователя и возвращает связанный идентификатор. Устройство определяет частоту обновлений и отправляет изменения местоположения на сервер.

Функция clearWatch останавливает опрос для позиции пользователя. Он принимает идентификатор watchPosition в качестве аргумента.

Представление данных о местоположении: геодезическая или гражданская

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

Каждый параметр имеет как геодезическое, так и гражданское представление, как показано на рисунке 4 .

Рисунок 4 Примеры геодезических и гражданских данных

атрибут геодезический гражданского
Позиция 59,3, 18,6 Стокгольм
высота 10 метров 4 — й этаж
Heading 234 градуса До центра города
скорость 5 км / ч Ходьба
ориентация 45 градусов К северо-востоку

При использовании Geolocation API вы возвращаете геодезические данные из функций. Представление данных о местоположении в необработанных числах редко бывает полезным или полезным. Онлайн-сервисы, такие как Bing Maps и Yahoo GeoPlanet, могут помочь вам переводить между двумя режимами презентации.

Поддержка браузера

Internet Explorer 9+ Firefox
3.5+
Chrome
5+
Опера
10.6+
Safari
5+
iPhone
3+
Android
2+
Windows Phone 7.5+

Рисунок 5 Браузеры, которые поддерживают HTML5 Geolocation API

Несмотря на то, что геолокация работает во всех основных браузерах (рисунок 5), вы все равно должны учитывать сценарии, в которых местоположение не может быть указано. Например, пользователь может использовать более старый браузер или иметь аппаратное обеспечение, которое не включает устройства позиционирования, или просто не хотеть автоматически делиться информацией о местоположении. Обнаруженное местоположение может быть даже неправильным. В таких ситуациях вы всегда должны включать альтернативный или резервный метод, чтобы пользователи могли вводить или изменять свое местоположение вручную. 

Геолокация в действии

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

Рисунок 6 Использование API геолокации

    <!doctype html>
    <html lang="en">
    <head>
        <title>Geolocation demo</title>
        <meta charset="utf-8" />
    </head>
    <body>
        <h1>Geolocation demo</h1>
        <p>
            Find out approximately where you are.
        </p>
        <p>
            Step 1: <button onclick="GetMap()">Show map</button>
        </p>
        <p>
            Step 2: When prompted, allow your location to be shared to see Geolocation in action
        </p>
        <div id="mapDiv" style="position: relative; width: 800px; height: 600px;"></div>
        <script type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0"></script>
        <script type="text/javascript">
            var map = null;
            function GetMap() {
                /* Replace YOUR_BING_MAPS_KEY with your own credentials.
                    Obtain a key by signing up for a developer account at
                    http://www.microsoft.com/maps/developers/ */
                var cred = "YOUR_BING_MAPS_KEY";
                // Initialize map
                map = new Microsoft.Maps.Map(document.getElementById("mapDiv"),
                    { credentials: cred });
                // Check if browser supports geolocation
                if (navigator.geolocation) {
                    navigator.geolocation.getCurrentPosition(locateSuccess, locateFail);
                }
                else {
                    alert('I\'m sorry, but Geolocation is not supported in your current browser. Have you tried running this demo in IE9?');
                }
            }
            // Successful geolocation
            function locateSuccess(loc) {
                // Set the user's location
                var userLocation = new Microsoft.Maps.Location(loc.coords.latitude, loc.coords.longitude);
                // Zoom in on user's location on map
                map.setView({ center: userLocation, zoom: 17 });
                // Draw circle of area where user is located
                var locationArea = drawCircle(userLocation);
                map.entities.push(locationArea);
            }
            // Unsuccessful geolocation
            function locateFail(geoPositionError) {
                switch (geoPositionError.code) {
                    case 0: // UNKNOWN_ERROR
                        alert('An unknown error occurred, sorry');
                        break;
                    case 1: // PERMISSION_DENIED
                        alert('Permission to use Geolocation was denied');
                        break;
                    case 2: // POSITION_UNAVAILABLE
                        alert('Couldn\'t find you...');
                        break;
                    case 3: // TIMEOUT
                        alert('The Geolocation request took too long and timed out');
                        break;
                    default:
                }
            }
            // Draw blue circle on top of user's location
            function drawCircle(loc) {
                var radius = 100;
                var R = 6378137;
                var lat = (loc.latitude * Math.PI) / 180;
                var lon = (loc.longitude * Math.PI) / 180;
                var d = parseFloat(radius) / R;
                var locs = new Array();
                for (x = 0; x <= 360; x++) {
                    var p = new Microsoft.Maps.Location();
                    brng = x * Math.PI / 180;
                    p.latitude = Math.asin(Math.sin(lat) * Math.cos(d) + Math.cos(lat) * Math.sin(d) * Math.cos(brng));
                    p.longitude = ((lon + Math.atan2(Math.sin(brng) * Math.sin(d) * Math.cos(lat), Math.cos(d) - Math.sin(lat) * Math.sin(p.latitude))) * 180) / Math.PI;
                    p.latitude = (p.latitude * 180) / Math.PI;
                    locs.push(p);
                }
                return new Microsoft.Maps.Polygon(locs, { fillColor: new Microsoft.Maps.Color(125, 0, 0, 255), strokeColor: new Microsoft.Maps.Color(0, 0, 0, 255) });
            }
        </script>
    </body>
    </html>

 

Если вы запустите код как есть, ваше местоположение будет показано вместе с сообщением о недействительных учетных данных, как показано на рисунке 7 . Чтобы получить результат без текста предупреждения ( рисунок 8 ), вам необходимо заменить YOUR_BING_MAPS_KEY своим собственным ключом, который генерируется при регистрации учетной записи разработчика Bing Maps .

Рис. 7. Демонстрация геолокации, сопоставление местоположения без действительного ключа

Рис. 8. Демонстрация геолокации, сопоставление местоположения после вставки действительного ключа

Чтобы увидеть другие примеры геолокации, которые отображают ваше местоположение с помощью кнопки, посетите IE Test Drive или посетите HTML5 Web Camp .

Узнайте больше о геолокации здесь: