Эти технологии определения географического местонахождения связаны либо с обменом данными по сети, либо с взаимодействием с несколькими спутниками, поэтому прикладной интерфейс объекта
Geolocation
является асинхронным: методы
getCurrentPosition
и
watchPosition
возвращают управление немедленно, но они принимают функцию, которая будет вызвана броузером, когда он определит местонахождение пользователя (или когда местонахождение изменится). В простейшем случае запрос местонахождения выглядит так:
В дополнение к широте и долготе в ответ на каждый успешный запрос возвращается также значение (в метрах), указывающее точность определения местонахождения. Пример 22.1 демонстрирует получение информации о местонахождении: он вызывает метод
getCurrentPosition,
чтобы определить текущее местонахождение, и использует полученную информацию для отображения карты (полученной от службы Google Maps) текущего местонахождения в масштабе, примерно соответствующем точности определения местонахождения.
Пример 22.1. Использование информации о местонахождении для отображения карты
// Возвращает вновь созданный элемент <img>, настроенный (в случае успешного
// определения местонахождения) на отображение карты для текущего местонахождения.
// Обратите внимание, что вызывающая программа сама должна вставить возвращаемый
// элемент в документ, чтобы отобразить его. Возбуждает исключение, если возможность
// определения местонахождения не поддерживается броузером,
function getmap {
// Проверить поддержку объекта geolocation
if (!navigator.geolocation)
throw "Определение местонахождения не поддерживается";
// Создать новый элемент <img>, отправить запрос определения местонахождения,
// чтобы в img отобразить карту местонахождения и вернуть изображение,
url += "&zoom=" + zoomlevel; // Добавить масштаб в URL
// Отобразить карту в объекте изображения. Спасибо, Google!
image.src = url;
}
}
Прикладной интерфейс Geolocation обладает несколькими особенностями, которые не были продемонстрированы в примере 22.1:
• В дополнение к первому аргументу с функцией обратного вызова методы getCurrentPosition и watchPosition принимают вторую необязательную функцию, которая будет вызвана в случае неудачного выполнения запроса.
• Помимо функций обработчиков успешного и неудачного выполнения запроса эти два метода принимают в третьем необязательном аргументе объект с параметрами. Свойства этого объекта определяют: желательна ли высокая точность определения местонахождения, насколько «устаревшей» может быть информация о местонахождении и предельное время ожидания определения местонахождения.
• Объект, который передается обработчику в случае успешного выполнения запроса, также включает время и может (на некоторых устройствах) содержать дополнительную информацию, такую как высота над уровнем моря, скорость и направление перемещения.