Coğrafi konum değişikliklerini saptama

Bir coğrafi konum sensörü kullanmak için, Coğrafi konum nesnesini somutlaştırın ve gönderdiği update olaylarına kaydolun. update olayı bir Coğrafi Konum olayı nesnesidir. Olayın sekiz özelliği bulunur:

  • altitude —Metre cinsinden yükseklik.

  • heading —Tamsayı olarak derece cinsinden hareketin yönü (kuzeye göre).

  • horizontalAccuracy —Metre cinsinden yatay doğruluk.

  • latitude —Derece cinsinden enlem.

  • longitude —Derece cinsinden boylam.

  • speed —Saniye başına metre cinsinden hız.

  • timestamp —Çalışma zamanının başlatılmasından olay zamanına kadar geçen milisaniye sayısı.

  • verticalAccuracy —Metre cinsinden dikey doğruluk.

timestamp özelliği dahili bir nesnedir. Diğerleri ise Sayı nesneleridir.

Aşağıda bir metin alanında coğrafi konum verilerini gösteren basit bir örnek verilmektedir:

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

Bu örneği kullanmak için, geoTextField metin alanını oluşturup bu kodu kullanmadan önce ekran listesine eklemeyi unutmayın.

Coğrafi konum nesnesinin setRequestedUpdateInterval() yöntemini çağırarak coğrafi konum için istenilen zaman aralığını ayarlayabilirsiniz. Bu yöntemin çağırdığı tek parametre, milisaniye cinsinden talep edilen güncelleme aralığı olan interval parametresidir:

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

Coğrafi konum güncellemeleri arasındaki asıl süre bu değerden daha büyük veya daha az olabilir. Güncelleme aralığındaki herhangi bir değişiklik tüm kayıtlı dinleyicileri etkiler. setRequestedUpdateInterval() yöntemini çağırmazsanız, uygulama aygıtın varsayılan aralığına göre güncelleme alır.

Kullanıcı, bir uygulamanın coğrafi konum verilerine erişmesini önleyebilir. Örneğin, bir uygulama coğrafi konum verilerini almaya çalıştığında, iPhone kullanıcıyı uyarır. Uyarıya yanıt olarak, uygulamanın coğrafi konum verilerine erişimi kullanıcı tarafından engellenebilir. Coğrafi konum nesnesi, kullanıcı mevcut olmayan coğrafi konum verilerine eriştiği zaman bir status olayı gönderir. Ayrıca, Coğrafi Konum nesnesi, coğrafi konum sensörü mevcut olmadığında true olarak ayarlanan bir muted özelliğine sahiptir. muted özelliği değiştiğinde, Coğrafi Konum nesnesi bir status olayı gönderir. Aşağıdaki kod, coğrafi konum verilerinin mevcut olmadığı durumların nasıl tespit edileceğini göstermektedir:

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 = ""; 
        } 
    } 
}
Not: GPS birimi içermeyen birinci nesil iPhone'lar, yalnızca zaman zaman update olayları gönderir. Bu cihazlarda ilk olarak bir Geolocation nesnesi bir veya iki update olayı dağıtır. Daha sonra bilgi önemli ölçüde değiştiğinde, update olaylarını dağıtır.

Coğrafi konum desteğini kontrol etme

Çalışma zamanı ortamının bu özelliği kullanabilme becerisini sınamak için Geolocation.isSupported özelliğini kullanın:

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

Şu anda, coğrafi konum yalnızca iPhone için ActionScript tabanlı uygulamalarda ve Flash Lite 4’te desteklenmektedir. Geolocation.isSupported özelliği çalışma zamanında true ise, coğrafi konum desteği mevcuttur.

Bazı iPhone modellerinde bir GPS ünitesi bulunmaz. Bu modeller coğrafi konum bilgilerini almak için başka yöntemler kullanır (cep telefonu triangülasyonu gibi). Bu modellerde veya GPS özelliği devre dışı olan herhangi bir iPhone cihazında, bir Coğrafi Konum nesnesi başlangıçta yalnızca bir veya iki update olayı gönderir.