Pour utiliser le capteur de géolocalisation, instanciez un objet Geolocation et enregistrez-vous pour recevoir les événements
update
qu’il distribue. Un événement
update
est un objet GeolocationEvent. Il possède huit propriétés :
-
altitude
: renvoie l’altitude, en mètres.
-
heading
: renvoie la direction du mouvement (par rapport au nord géographique), en degrés.
-
horizontalAccuracy
: renvoie la précision horizontale, en mètres.
-
latitude
: renvoie la latitude, en degrés.
-
longitude
: renvoie la longitude, en degrés.
-
speed
: renvoie la vitesse en mètres par seconde.
-
timestamp
: nombre de millisecondes au moment où se produit l’événement après l’initialisation du moteur d’exécution.
-
verticalAccuracy
: renvoie la précision verticale, en mètres.
La propriété
timestamp
est un objet int. Les autres propriétés sont des objets Number.
Exemple de base qui affiche les données de géolocalisation dans un champ de texte :
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()
}
Pour exploiter cet exemple, veillez à créer le champ de texte
geoTextField
et à l’ajouter à la liste d’affichage avant d’utiliser le code.
Vous pouvez ajuster l’intervalle de temps qui sépare les événements de géolocalisation en appelant la méthode
setRequestedUpdateInterval()
de l’objet Geolocation. Cette méthode ne gère qu’un seul paramètre,
interval
, qui correspond à la fréquence de mise à jour requise, en millisecondes :
var geo:Geolocation = new Geolocation();
geo.setRequestedUpdateInterval(10000);
L’intervalle réel entre les mises à jour de la géolocalisation peut être supérieur ou inférieur à cette valeur. Toute modification de l’intervalle de mise à jour affecte l’ensemble des écouteurs enregistrés. Si vous n’appelez pas la méthode
setRequestedUpdateInterval()
, l’application reçoit des mises à jour à la fréquence définie par défaut sur le périphérique.
L’utilisateur peut interdire à une application d’accéder aux données de géolocalisation. L’iPhone avertit par exemple l’utilisateur lorsqu’une application tente d’obtenir des données de géolocalisation. En réponse à l’invite, l’utilisateur peut refuser à l’application tout accès aux données de géolocalisation. L’objet Geolocation distribue un événement
status
lorsque l’utilisateur refuse l’accès aux données de géolocalisation. Il possède également une propriété
muted
, définie sur
true
lorsque le capteur de géolocalisation n’est pas disponible. L’objet Geolocation distribue un événement
status
lorsque la propriété
muted
change. Le code suivant indique comment détecter que les données de géolocalisation ne sont pas 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 = "";
}
}
}
Remarque :
les iPhone de première génération, qui n’intègrent pas d’unité GPS, ne distribuent que rarement des événements
update
. Sur ces périphériques, un objet Geolocation distribue initialement un ou deux événements
update
. Il distribue ensuite des événements
update
lorsque les informations sont sensiblement modifiées.
Vérification de la prise en charge de la géolocalisation
La propriété
Geolocation.isSupported
permet de vérifier si l’environnement d’exécution prend en charge cette fonction :
if (Geolocation.isSupported)
{
// Set up geolocation event listeners and code.
}
A l’heure actuelle, la géolocalisation n’est prise en charge que par les applications ActionScript pour l’iPhone et dans Flash Lite 4. Si
Geolocation.isSupported
correspond à
true
à l’exécution, la géolocalisation est prise en charge.
Certains modèles d’iPhone ne sont pas équipés d’une unité GPS. Ces modèles font appel à d’autres techniques, telles que la localisation par triangulation des téléphones portables, pour obtenir les données de géolocalisation. Pour ces modèles, ou sur tout iPhone dont l’unité GPS est désactivée, un objet Geolocation risque de ne distribuer qu’un ou deux événements
update
initiaux.