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.