Als u de geolocatiesensor wilt gebruiken, moet u een Geolocation-object instantiëren en registeren voor de
update
-gebeurtenissen die door het object worden verzonden. De
update
-gebeurtenis is een GeolocationEvent-object. De gebeurtenis heeft acht eigenschappen:
-
altitude
: de hoogte in meters.
-
heading
: de bewegingsrichting (in verhouding tot het werkelijke noorden) in graden.
-
horizontalAccuracy
: de horizontale nauwkeurigheid in meters.
-
latitude
: de latitude in graden.
-
longitude
: de longitude in graden.
-
speed
: de snelheid in meters per seconde.
-
timestamp
: het aantal milliseconden op het moment waarop de gebeurtenis plaatsvindt sinds het runtimeprogramma is geïnitialiseerd.
-
verticalAccuracy
: de verticale nauwkeurigheid in meters.
De eigenschap
timestamp
is een int-object. De overige eigenschappen zijn Number-objecten.
In dit voorbeeld worden de gegevens over de geolocatie in een tekstveld weergegeven:
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()
}
Als u dit voorbeeld wilt gebruiken, moet u het tekstveld
geoTextField
maken en dit toevoegen aan de weergavelijst voordat u deze code gebruikt.
U kunt het gewenste tijdsinterval voor geolocatiegebeurtenissen aanpassen door de methode
setRequestedUpdateInterval()
van het Geolocation-object aan te roepen. Deze methode neemt één parameter,
interval
, die staat voor het gevraagde update-interval in milliseconden:
var geo:Geolocation = new Geolocation();
geo.setRequestedUpdateInterval(10000);
De werkelijke tijd tussen geolocatie-updates kan groter of kleiner zijn dan deze waarde. Elke wijziging in het update-interval beïnvloedt alle geregistreerde listeners. Als u de methode
setRequestedUpdateInterval()
niet aanroept, ontvangt de toepassing updates op basis van het standaardinterval voor het apparaat.
De gebruiker kan voorkomen dat een toepassing toegang heeft tot gegevens over de geolocatie. Zo kan een iPhone bijvoorbeeld een melding sturen naar de gebruiker wanneer een toepassing probeert toegang te krijgen tot gegevens over de geolocatie. Als reactie hierop kan de gebruiker de toegang tot deze gegevens weigeren. Het Geolocation-object verzendt de gebeurtenis
status
wanneer de gebruiker de toegang tot gegevens over de geolocatie weigert. Bovendien heeft het Geolocation-object de eigenschap
muted
. Deze eigenschap is ingesteld op
true
wanneer de geolocatiesensor niet beschikbaar is. Het Geolocation-object verzendt de gebeurtenis
status
wanneer de waarde van de eigenschap
muted
wordt gewijzigd. De volgende code laat zien hoe u kunt vaststellen dat gegevens over de geolocatie niet beschikbaar zijn.
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 = "";
}
}
}
Opmerking:
Bij iPhones van de eerste generatie (zonder GPS-eenheid) worden slechts af en toe
update
-gebeurtenissen verzonden. Bij deze apparaten verzendt een Geolocation-object een of twee initiële
update
-gebeurtenissen. Vervolgens worden er alleen
update
-gebeurtenissen verzonden wanneer de informatie merkbaar verandert.
Ondersteuning voor geolocatie
Met de eigenschap
Geolocation.isSupported
kunt u testen of deze functie kan worden gebruikt in de runtimeomgeving:
if (Geolocation.isSupported)
{
// Set up geolocation event listeners and code.
}
Momenteel wordt de functie voor geolocatie alleen ondersteund in ActionScript-toepassingen voor de iPhone en in Flash Lite 4. Als
Geolocation.isSupported
de waarde
true
heeft tijdens runtime, is er ondersteuning voor de geolocatiefunctie.
Sommige modellen iPhone beschikken niet over een GPS-eenheid. Bij deze modellen worden geolocatiegegevens verkregen via andere methoden (zoals triangulatie via mobiele telefoons). Bij deze modellen, net als bij elke iPhone waarvoor GPS is uitgeschakeld, kan een Geolocation-object niet meer dan een of twee initiële
update
-gebeurtenissen verzenden.