Detección de cambios de geolocalización

Para utilizar el sensor de geolocalización, cree una instancia del objeto Geolocation y registre los eventos update que distribuya. El evento update es un objeto de evento Geolocation. El evento tiene ocho propiedades:

  • altitude : la altitud, en metros.

  • heading : la dirección de movimiento (con respecto al norte verdadero), en grados.

  • horizontalAccuracy : la precisión horizontal, en metros.

  • latitude : la latitud, en grados.

  • longitude : la longitud, en grados.

  • speed : la velocidad, en metros por segundo.

  • timestamp : el número de milisegundos en el momento del evento desde que se inicializó el motor de ejecución.

  • verticalAccuracy : la precisión vertical, en metros.

La propiedad timestamp es un objeto int. El resto son objetos Number.

A continuación incluimos un ejemplo básico que muestra datos de geolocalización en un campo de texto:

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() 
}

Para usar este ejemplo, debe crear un campo de texto geoTextField y añadirlo a la lista de visualización antes de utilizar este código.

Puede ajustar el intervalo de tiempo que desee para los eventos de geolocalización llamando al método setRequestedUpdateInterval() del objeto Geolocation. Este método toma un parámetro, interval , que es el intervalo de actualización requerido, en milisegundos:

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

El tiempo real entre las actualizaciones de geolocalización puede ser mayor o menor que este valor. Cualquier cambio en el intervalo de actualización afecta a todos los detectores registrados. Si no llama al método setRequestedUpdateInterval() , la aplicación recibe actualizaciones basadas en el intervalo predeterminado del dispositivo.

El usuario puede impedir que la aplicación acceda a los datos de geolocalización. Por ejemplo, el iPhone muestra un mensaje al usuario cuando una aplicación intenta obtener datos de geolocalización. Como respuesta al mensaje, el usuario puede denegar el acceso de la aplicación a los datos de geolocalización. El objeto Geolocation distribuye un evento status cuando el usuario impide el acceso a los datos de geolocalización. Asimismo, el objeto Geolocation cuenta con una propiedad muted que se establece en true cuando el sensor de geolocalización no está disponible. El objeto Geolocation distribuye un evento status cuando la propiedad muted cambia. El siguiente código muestra cómo detectar cuándo los datos de geolocalización no están disponibles:

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 = ""; 
        } 
    } 
}
Nota: los iPhone de primera generación, que no incluyen unidad GPS, distribuyen eventos update de forma ocasional. En estos dispositivos, un objeto Geolocation inicialmente distribuye uno o dos eventos update . Seguidamente, distribuye eventos update cuando cambia notablemente la información.

Comprobación de compatibilidad con geolocalización

Utilice la propiedad Geolocation.isSupported para probar si el entorno del motor de ejecución tiene capacidad para usar esta función:

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

Actualmente, la geolocalización solo se admite en aplicaciones basadas en ActionScript para iPhone y en Flash Lite 4. Si Geolocation.isSupported es true en tiempo de ejecución, se admite la geolocalización.

Algunos modelos de iPhone no disponen de unidad GPS. Estos modelos utilizan otros medios (como triangulización de teléfonos móviles) para obtener los datos de geolocalización. Para estos modelos, o para iPhone con GPS desactivado, un objeto Geolocation solo puede distribuir uno o dos eventos update iniciales.