JavaScript. Подробное руководство, 6-е издание, стр. 374

<b>  var latitude = pos.coords.latitude;</b>

<b>  var longitude = pos.coords.longitude;</b>

<b>  alert(&quot;Ваши координаты: &quot; + latitude + &quot;, + longitude);</b>

<b>});</b>

В дополнение к широте и долготе в ответ на каждый успешный запрос возвращается также значение (в метрах), указывающее точность определения местонахождения. Пример 22.1 демонстрирует получение информации о местонахождении: он вызывает метод

<b>getCurrentPosition(),</b>
чтобы определить текущее местонахождение, и использует полученную информацию для отображения карты (полученной от службы Google Maps) текущего местонахождения в масштабе, примерно соответствующем точности определения местонахождения.

Пример 22.1. Использование информации о местонахождении для отображения карты

<b>// Возвращает вновь созданный элемент &lt;img&gt;, настроенный (в случае успешного</b>

<b>// определения местонахождения) на отображение карты для текущего местонахождения.</b>

<b>// Обратите внимание, что вызывающая программа сама должна вставить возвращаемый</b>

<b>// элемент в документ, чтобы отобразить его. Возбуждает исключение, если возможность</b>

<b>// определения местонахождения не поддерживается броузером,</b>

<b>function getmap() {</b>

<b>  // Проверить поддержку объекта geolocation</b>

<b>  if (!navigator.geolocation)</b>

<b>    throw &quot;Определение местонахождения не поддерживается&quot;;</b>

<b>  // Создать новый элемент &lt;img&gt;, отправить запрос определения местонахождения,</b>

<b>  // чтобы в img отобразить карту местонахождения и вернуть изображение,</b>

<b>  var image = document.createElement(&quot;img&quot;);</b>

<b>  navigator.geolocation.getCurrentPosition(setMapURL);</b>

<b>  return image;</b>

<b>  // Эта функция будет вызвана после того, как вызывающая программа получит объект</b>

<b>  // изображения, в случае успешного выполнения запроса определения местонахождения,</b>

<b>  function setMapURL(pos) {</b>

<b>    // Получить информацию о местонахождении из объекта аргумента</b>

<b>    var latitude = pos.coords.latitude; // Градусы к северу от экватора</b>

<b>    var longitude = pos.coords.longitude; // Градусы к востоку от Гринвича</b>

<b>    var accuracy = pos.coords.accuracy; // Метры</b>

<b>    // Сконструировать URL для получения статического изображения карты</b>

<b>    // от службы Google Мар для этого местонахождения</b>

<b>    var url = &quot;</b><a href="http://maps.google.com/maps/api/staticmap"><b>http://maps.google.com/maps/api/staticmap</b></a><b>&quot; +</b>

<b>      &quot;?center=&quot; + latitude + + longitude +</b>

<b>      &quot;&amp;size=640x640&amp;sensor=t rue&quot;;</b>

<b>    // Установить масштаб карты, используя грубое приближение</b>

<b>    var zoomlevel=20; // Для начала установить самый крупный масштаб</b>

<b>    if (accuracy &gt; 80) // Уменьшить масштаб для низкой точности</b>

<b>      zoomlevel -= Math.round(Math.log(accuracy/50)/Math.LN2);</b>

<b>    url += &quot;&amp;zoom=&quot; + zoomlevel; // Добавить масштаб в URL</b>

<b>    // Отобразить карту в объекте изображения. Спасибо, Google!</b>

<b>    image.src = url;</b>

<b>  }</b>

<b>}</b>

Прикладной интерфейс Geolocation обладает несколькими особенностями, которые не были продемонстрированы в примере 22.1:

• В дополнение к первому аргументу с функцией обратного вызова методы getCurrentPosition() и watchPosition() принимают вторую необязательную функцию, которая будет вызвана в случае неудачного выполнения запроса.

• Помимо функций обработчиков успешного и неудачного выполнения запроса эти два метода принимают в третьем необязательном аргументе объект с параметрами. Свойства этого объекта определяют: желательна ли высокая точность определения местонахождения, насколько «устаревшей» может быть информация о местонахождении и предельное время ожидания определения местонахождения.

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

Эти дополнительные возможности демонстрируются в примере 22.2.

Пример 22.2. Демонстрация всех возможностей определения местонахождения

<b>// Асинхронно определяет местонахождение и отображает его в указанном элементе,</b>

<b>function whereami(elt) {</b>

<b>  // Этот объект передается методу getCurrentPosition() в 3 аргументе</b>

<b>  var options = {</b>

<b>    // Чтобы получить координаты с высокой точностью (например, с устройства GPS),</b>

<b>    // присвойте этому свойству значение true. Отметьте, однако, что это может</b>

<b>    // увеличить расход энергии в аккумуляторах.</b>

<b>    enableHighAccuracy: false, // Приблизительно: по умолчанию</b>