Wijzigingen in geolocatie bepalen

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.