JavaScript. Подробное руководство, 6-е издание, стр. 374
<b> var latitude = pos.coords.latitude;</b><b> var longitude = pos.coords.longitude;</b><b> alert("Ваши координаты: " + latitude + ", + longitude);</b><b>});</b>В дополнение к широте и долготе в ответ на каждый успешный запрос возвращается также значение (в метрах), указывающее точность определения местонахождения. Пример 22.1 демонстрирует получение информации о местонахождении: он вызывает метод
<b>getCurrentPosition(),</b>Пример 22.1. Использование информации о местонахождении для отображения карты
<b>// Возвращает вновь созданный элемент <img>, настроенный (в случае успешного</b><b>// определения местонахождения) на отображение карты для текущего местонахождения.</b><b>// Обратите внимание, что вызывающая программа сама должна вставить возвращаемый</b><b>// элемент в документ, чтобы отобразить его. Возбуждает исключение, если возможность</b><b>// определения местонахождения не поддерживается броузером,</b><b>function getmap() {</b><b> // Проверить поддержку объекта geolocation</b><b> if (!navigator.geolocation)</b><b> throw "Определение местонахождения не поддерживается";</b><b> // Создать новый элемент <img>, отправить запрос определения местонахождения,</b><b> // чтобы в img отобразить карту местонахождения и вернуть изображение,</b><b> var image = document.createElement("img");</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 = "</b><a href="http://maps.google.com/maps/api/staticmap"><b>http://maps.google.com/maps/api/staticmap</b></a><b>" +</b><b> "?center=" + latitude + + longitude +</b><b> "&size=640x640&sensor=t rue";</b><b> // Установить масштаб карты, используя грубое приближение</b><b> var zoomlevel=20; // Для начала установить самый крупный масштаб</b><b> if (accuracy > 80) // Уменьшить масштаб для низкой точности</b><b> zoomlevel -= Math.round(Math.log(accuracy/50)/Math.LN2);</b><b> url += "&zoom=" + 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>