|
Каким образом можно создать точку останова? Например, если в Лекции 8 в примере, который демонстрирует возможность <canvas> для работы с готовыми изображениями (последний в лекции) в цикле |
Использование возможностей HTML5 и Apache Cordova для доступа к ресурсам мобильного устройства
API геолокации для определения своего местоположения
API геолокации находится внутри объекта navigator, входящего в набор средств HTML5, и содержит всего три метода:
- getCurrentPosition() - получение информации от GPS мобильного устройства;
- watchPosition() - аналогичен getCurrentPosition(). Отличие заключается в том, что первый метод выполняет операцию один раз, в то время как watchPosition() автоматически возвращает новые данные при каждом изменении местоположения мобильного устройства, и таким образом будет немедленно сообщать о любых передвижениях пользователя;
- clearWatch() - отменяет процесс watchPosition().
Методы watchPosition и clearWatch - парные, watchPosition возвращает уникальный идентификатор, который передается методу clearWatch, когда необходимо сбросить определенное отслеживание.
Как уже сообщалось, методы getCurrentPosition и watchPosition очень похожи; они принимают одинаковые аргументы:
- обработчик успешного исполнения;
- обработчик ошибки;
- параметры геолокации.
Самый простой вариант использования API геолокации - передать методу getCurrentPosition обработчик успешного исполнения, например с использованием вот такой JavaScript - функции:
function geo() {
LocationMaster = new Object();
LocationMaster.lookUpPosition = function (position) {
this.latNow = position.coords.latitude;//широта
this.longNow = position.coords.longitude;//долгота
document.getElementById("rezult").innerHTML = "Широта=" + this.latNow + ",Долгота=" + this.longNow
}
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(LocationMaster.lookUpPosition);
}
else {
document.getElementById("rezult").innerHTML = "Не поддерживается геолокация";
}
}Обращение с ней на странице Cordova - проекта:
<input type ="button" id ="btn_geoloc" value="ГЕОЛОКАЦИЯ" onclick = "geo();" />
Результат выполнения в эмуляторе:
Объект, передаваемый методом getCurrentPosition() в функцию обратного вызова, кроме широты и долготы, по спецификации может содержать еще ряд полезных вещей. Прежде всего, это объект position.coords, содержащий географические координаты:
- position.coords.latitude - отвечает за широту местонахождения пользователя;
- position.coords.longitude - отвечает за долготу местонахождения пользователя;
- position.coords.altitude - высота над земной поверхностью;
- position.coords.accuracy - точность местоположения в метрах, этот параметр может сильно разниться в зависимости от способа вычисления координат, мобильные устройства дают разброс от 10 м до километра;
- position.coords.latitudeAccuracy - указывает погрешность в определении высоты;
- position.coords.heading - направление движения в градусах, указывается по часовой стрелке от севера;
- position.coords.speed - как нетрудно догадаться, скорость движения;
- position. Timestamp - дата замера.
Естественно, геолокация предназначена в первую очередь для мобильных устройств - задача определять координаты стационарного компьютера возникнет редко, а мобильным устройствам свойственно, соответственно названию, время от времени изменять свое местоположение. Причем иногда это изменение непрерывно (например, движущийся транспорт).
Важнейшими атрибутами объекта geolocation являются атрибуты latitude (широта) и longitude (долгота). С их помощью можно загрузить карту местонахождения мобильного устройства. В HTML5 возможно, к примеру, отображение карт сервиса Google Maps. URL-адрес этой функции выглядит так:
" http://maps.google.com/maps?hl=en&ie=UTF8&ll= " + latitude + ", " + longitude + "&spn=0.054166,0.110378 &z=13&output=embed"
Переменные latitude и longitude содержат значения координат. Таким образом, все дело в том, чтобы извлечь эти значения широты и долготы и разместить их в нужном месте страницы (например, в теге <iframe>). И для получения карты нужно всего лишь вставить эти значения в запрос карты. В JavaScript - программу необходимо будет после вычисления долготы и широты добавить следующую строку:
document.getElementById("mapHolder").src = "http://maps.google.com/maps?hl=en&ie=UTF8&ll=" + this.latNow + "," +
this.longNow + "&spn=0.054166,0.110378&z=13&output=embed";В этом случае идентификатор ID ="mapHolder" относится к элементу <iframe>. Тогда карта является объектом, вызываемым по ссылке, и загрузится во фрейм как изображение.
Результат выполнения JavaScript-кода получения карты (в браузере Internet Explorer):
Далее приводится полная разметка страницы, содержащая тег <iframe> вывода карты [4]:
<!DOCTYPE html >
<html lang="ru">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style type="text/css">
/* BF7F6C,FFDDAE,B59D7B,40372B,E6C79C */
body {
font-family:Verdana, Geneva, sans-serif;
color:#40372B;
background-color:#FFDDAE;
}
h1 {
text-align:center;
background-color:#FFDDAE;
color:#B59D7B;
h3 {
font-family:Tahoma, Geneva, sans-serif;
color:#BF7F6C;
}
</style>
<script>
LocationMaster=new Object();
LocationMaster.lookUpPosition=function(position)
{
this.latNow=position.coords.latitude;
this.longNow=position.coords.longitude;
document.getElementById("mapHolder").src = "http://maps.google.com/maps?hl=en&ie=UTF8&ll=" +
this.latNow + "," + this.longNow + "&spn=0.054166,0.110378&z=13&output=embed";
}
if (navigator.geolocation)
{
navigator.geolocation.getCurrentPosition(LocationMaster.lookUpPosition);
}
else
{
alert("Попробуйте воспользоваться другим браузером HTML5. Текущий браузер не поддерживает геолокацию.");
}
</script>
<title>Мобильная карта</title>
</head>
<body>
<article>
<header>
<h3>Вы здесь</h3>
</header>
<section>
<iframe id="mapHolder" width="240"
height="320"> </iframe>
</section>
<section>
<p> Для пользователей мобильных устройств </p>
</section>
<section>
<p>
<h1> Увеличить здесь</h1>
</p>
<p>
<h1> и здесь </h1>
</p>
<p>
<h1> Тянуть вправо или влево, но не вниз </h1>
</p>
</section>
</article>
</body>
</html>

