Получение географических местоположений

Используйте классы JavaScript, описанные в этой главе, чтобы получить или отследить текущее географическое местоположение устройства хоста. Эти классы скрывают подробные данные реализации того, как информация о расположении получена — например, с помощью Системы глобального позиционирования (GPS), IP-адресов, Wi-Fi, Bluetooth или некоторой другой технологии. Классы позволяют Вам получать текущее расположение или получать непрерывные обновления на расположении, когда это изменяется.

Классы географического местоположения

Navigator объект имеет только для чтения Geolocation переменная экземпляра. Вы получаете информацию о расположении из этого Geolocation объект. Параметры к Geolocation методы, получающие информацию расположения, являются главным образом обратными вызовами, экземплярами PositionCallback или PositionErrorCallback. Поскольку может быть задержка получения информации расположения, это не может быть сразу возвращено этими методами. Обратные вызовы, которые Вы указываете, вызываются, когда информация о расположении получена, или ошибка происходит. Если информация о расположении получена, обратный вызов позиции передается объект позиции описание географического местоположения. Если ошибка происходит, ошибочный обратный вызов передается экземпляр PositionError описание ошибки. Объект позиции представляет расположение в координатах долготы и широте.

Получение текущего расположения

Наиболее популярный способ использования Geolocation класс должен получить текущее расположение. Например, Ваше веб-приложение может получить текущее расположение и вывести на экран его на карте для пользователя. Используйте getCurrentPosition метод в Geolocation получить текущее расположение от Navigator объект. Передайте свою функцию обратного вызова как параметр к getCurrentPosition метод следующим образом:

   // Get the current location
    navigator.geolocation.getCurrentPosition(showMap);

Ваша функция обратного вызова — showMap функция в этом примере — должна открыть позицию объект как параметр следующим образом:

    function showMap(position) {
      // Show a map centered at position
    }

Используйте coords переменная экземпляра переданного - в позиции возражает для получения широты и координат долготы следующим образом:

    latitude = position.coords.latitude;
    longitude = position.coords.longitude;

Отслеживание текущего расположения

Можно также отследить текущее расположение. Например, если Ваше веб-приложение выводит на экран текущее расположение на карте, можно зарегистрироваться для изменений расположения и постоянно прокручивать карту, когда изменяется текущее расположение. Когда Вы регистрируетесь для изменений расположения, Вы получаете обратный вызов каждый раз изменения расположения. Обратные вызовы непрерывны, пока Вы не не регистрируетесь для изменений расположения.

Используйте watchPosition метод в Geolocation класс для регистрации для изменений расположения. Передайте свою функцию обратного вызова как параметр. В этом примере, scrollMap функция вызывается каждый раз текущие изменения расположения:

    // Register for location changes
    var watchId = navigator.geolocation.watchPosition(scrollMap);

Функция обратного вызова должна открыть позицию объект как параметр следующим образом:

    function scrollMap(position) {
      // Scroll the map to center position
    }

Подобный Получению Текущего Расположения, используйте coords переменная экземпляра переданного в позиции возражает для получения координат долготы и широты.

Используйте clearWatch метод в Geolocation класс, чтобы не зарегистрироваться для изменений расположения. Например, не зарегистрируйтесь, когда пользователь нажмет кнопку или коснется пальца на карте следующим образом:

    function buttonClickHandler() {
      // Unregister when the user clicks a button
      navigator.geolocation.clearWatch(watchId);
    }

Обработка ошибок расположения

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

При регистрации для изменений расположения можно дополнительно передать ошибочный обратный вызов watchPosition метод в Geolocation класс следующим образом:

    // Register for location changes
    var watchId = navigator.geolocation.watchPosition(scrollMap, handleError);

Ошибочный обратный вызов должен взять a PositionError возразите как параметр как в:

    function handleError(error) {
      // Update a div element with the error message
    }