Обнаружения изменений геопозиционирования

Чтобы использовать датчик геопозиционирования, создайте экземпляр объекта Geolocation и зарегистрируйте отправляемое им событие update . Событие update является объектом события Geolocation. Событие имеет восемь свойств:

  • altitude : высота в метрах.

  • heading : направление движения (относительно истинного сервера) в градусах.

  • horizontalAccuracy : точность по горизонтали в метрах.

  • latitude : широта в градусах.

  • longitude : долгота в градусах.

  • speed : скорость в метрах в секунду.

  • timestamp : число миллисекунд на момент события, начиная с инициализации среды выполнения.

  • verticalAccuracy : точность нивелирования в метрах.

Свойство timestamp является объектом int. Остальные свойства являются объектами Number.

Здесь приводится основной пример отображения данных геопозиционирования в текстовом поле:

var geo:Geolocation; 
if (Geolocation.isSupported) 
{ 
    geo = new Geolocation(); 
    geo.addEventListener(GeolocationEvent.UPDATE, updateHandler); 
} 
else 
{ 
    geoTextField.text = "Geolocation feature not supported"; 
} 
function updateHandler(event:GeolocationEvent):void 
{ 
    geoTextField.text = "latitude: " + event.latitude.toString() + "\n" 
            + "longitude: " + event.longitude.toString() + "\n" 
            + "altitude: " + event.altitude.toString() 
            + "speed: " + event.speed.toString() 
            + "heading: " + event.heading.toString() 
            + "horizontal accuracy: " + event.horizontalAccuracy.toString() 
            + "vertical accuracy: " + event.verticalAccuracy.toString() 
}

Чтобы воспользоваться этим примером, перед использованием кода создайте текстовое поле geoTextField и добавьте его в список отображения.

Можно настроить необходимый интервал времени для событий геопозиционирования, вызвав метод setRequestedUpdateInterval() объекта Geolocation. В этом методе используется один параметр interval , который представляет собой запрошенный интервал обновления в миллисекундах:

var geo:Geolocation = new Geolocation(); 
geo.setRequestedUpdateInterval(10000);

Фактическое время между обновлениями геопозиционирования может быть больше или меньше этого значения. Любое изменение в интервале обновления затрагивает все зарегистрированные прослушиватели. При отсутствии вызова метода setRequestedUpdateInterval() приложение получает обновления на основе интервала, заданного в устройстве по умолчанию.

Пользователь может запретить приложению получать доступ к данным геопозиционирования. Например, в устройстве iPhone выводится запрос, когда приложение пытается получить данные геопозиционирования. В ответ на запрос пользователь может запретить приложению доступ к данным геопозиционирования. Объект Geolocation отправляет событие status , когда пользователь запрещает доступ к данным геопозиционирования. Кроме того, для свойства muted объекта Geolocation устанавливается значение true , когда датчик геопозиционирования недоступен. Объект Geolocation отправляет событие status при изменении свойства muted . Следующий код показывает способ обнаружения отсутствия доступа к данным геопозиционирования:

package 
{ 
    import flash.display.Sprite; 
    import flash.display.StageAlign; 
    import flash.display.StageScaleMode; 
    import flash.events.GeolocationEvent; 
    import flash.events.MouseEvent; 
    import flash.events.StatusEvent; 
    import flash.sensors.Geolocation; 
    import flash.text.TextField; 
    import flash.text.TextFormat; 
 
    public class GeolocationTest extends Sprite 
    { 
         
        private var geo:Geolocation; 
        private var log:TextField; 
         
        public function GeolocationTest() 
        {             
            super(); 
            stage.align = StageAlign.TOP_LEFT; 
            stage.scaleMode = StageScaleMode.NO_SCALE; 
            setUpTextField(); 
             
            if (Geolocation.isSupported) 
            { 
                geo = new Geolocation(); 
                if (!geo.muted) 
                { 
                    geo.addEventListener(GeolocationEvent.UPDATE, geoUpdateHandler); 
                } 
                geo.addEventListener(StatusEvent.STATUS, geoStatusHandler); 
            } 
            else 
            { 
                log.text = "Geolocation not supported"; 
            } 
        } 
         
        public function geoUpdateHandler(event:GeolocationEvent):void 
        { 
            log.text = "latitude : " + event.latitude.toString() + "\n"; 
            log.appendText("longitude : " + event.longitude.toString() + "\n"); 
        } 
         
        public function geoStatusHandler(event:StatusEvent):void 
        { 
            if (geo.muted) 
                geo.removeEventListener(GeolocationEvent.UPDATE, geoUpdateHandler); 
            else 
                geo.addEventListener(GeolocationEvent.UPDATE, geoStatusHandler); 
        } 
         
        private function setUpTextField():void 
        { 
            log = new TextField(); 
            var format:TextFormat = new TextFormat("_sans", 24); 
            log.defaultTextFormat = format; 
            log.border = true; 
            log.wordWrap = true; 
            log.multiline = true; 
            log.x = 10; 
            log.y = 10; 
            log.height = stage.stageHeight - 20; 
            log.width = stage.stageWidth - 20; 
            log.addEventListener(MouseEvent.CLICK, clearLog); 
            addChild(log); 
        } 
        private function clearLog(event:MouseEvent):void 
        { 
            log.text = ""; 
        } 
    } 
}
Примечание. Устройства iPhone первого поколения, которые не оснащены блоком GPS, отправляют события update только в редких случаях. В этих моделях объект Geolocation может отправлять только одно или два первоначальных события update . После этого сообщения update отправляются в случае значительного изменения данных.

Проверка наличия поддержки геопозиционирования

Используйте свойство Geolocation.isSupported , чтобы проверить наличие поддержки этой функции в среде выполнения:

if (Geolocation.isSupported) 
{ 
    // Set up geolocation event listeners and code. 
}

В настоящее время геопозиционирование поддерживается только в приложениях на основе ActionScript для iPhone и в пакете Flash Lite 4. Если в среде выполнения свойство Geolocation.isSupported принимает значение true , то поддержка геопозиционирования существует.

В некоторых моделях iPhone блок GPS не предусмотрен. В этих моделях используются другие средства (например, триангуляция мобильного телефона) для получения данных о географическом расположении. В этих моделях и в любых моделях iPhone с отключенным блоком GPS объект Geolocation может отправлять только одно или два первоначальных события update .