지리적 위치 정보 변경 감지

지리적 위치 센서를 사용하려면 Geolocation 객체를 인스턴스화하고 이 객체가 전달하는 update 이벤트에 대해 등록합니다. update 이벤트는 Geolocation 이벤트 객체로서 8가지 속성을 가집니다.

  • altitude - 미터 단위의 고도입니다.

  • heading - 정북 방향으로 이동한 각도입니다.

  • horizontalAccuracy - 미터 단위의 수평 정확도입니다.

  • latitude - 도 단위의 위도입니다.

  • longitude - 도 단위의 경도입니다.

  • speed - 미터/초 단위의 속도입니다.

  • timestamp - 런타임이 초기화된 이후 이벤트가 발생하는 시점의 밀리초입니다.

  • verticalAccuracy - 미터 단위의 수직 정확도입니다.

timestamp 속성은 int 객체이고 나머지는 Number 객체입니다.

다음은 텍스트 필드에 지리적 위치 데이터를 표시하는 기본적인 예제입니다.

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

이 예제 코드를 사용하려면 먼저 geoTextField 텍스트 필드를 만들어 표시 목록에 추가해야 합니다.

Geolocation 객체의 setRequestedUpdateInterval() 메서드를 호출하여 지리적 위치 정보 이벤트의 원하는 시간 간격을 조정할 수 있습니다. 이 메서드는 interval 매개 변수 하나를 사용합니다. 이 매개 변수는 밀리초 단위의 요청된 업데이트 간격입니다.

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

지리적 위치 정보 업데이트의 실제 시간 간격은 이 값보다 크거나 작을 수 있습니다. 업데이트 간격을 변경하면 등록된 모든 리스너에 영향을 줍니다. setRequestedUpdateInterval() 메서드를 호출하지 않으면 응용 프로그램에서 장치의 기본 간격에 따라 업데이트를 받습니다.

사용자는 응용 프로그램에서 지리적 위치 데이터에 액세스하는 것을 막을 수 있습니다. 예를 들어 iPhone은 응용 프로그램에서 지리적 위치 데이터를 얻으려고 할 때 사용자에게 허용할 것인지 묻는 메시지를 표시합니다. 사용자는 해당 메시지에 대한 반응으로 응용 프로그램이 지리적 위치 데이터에 액세스하는 것을 거부할 수 있습니다. Geolocation 객체는 사용자가 지리적 위치 데이터를 사용할 수 없게 만드는 경우 status 이벤트를 전달합니다. 또한 지리적 위치 센서를 사용할 수 없게 될 때 Geolocation 객체의 muted 속성이 true 로 설정됩니다. Geolocation 객체는 muted 속성이 변경될 때 status 이벤트를 전달합니다. 다음 코드에서는 지리적 위치 데이터를 사용할 수 없을 때 이를 감지하는 방법을 보여 줍니다.

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 = ""; 
        } 
    } 
}
참고: GPS 장치를 포함하지 않는 1세대 iPhone은 일부의 경우에만 update 이벤트를 전달합니다. 이러한 장치에서 Geolocation 객체는 처음에 update 이벤트를 한두 개 전달합니다. 그런 다음 정보가 눈에 띄게 변경되는 경우 update 이벤트를 전달합니다.

지리적 위치 정보 지원 확인

Geolocation.isSupported 속성을 통해 런타임 환경에서 이 기능을 사용할 수 있는지 여부를 테스트합니다.

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

현재 지리적 위치 정보는 iPhone의 ActionScript 기반 응용 프로그램과 Flash Lite 4에서만 지원됩니다. Geolocation.isSupported 가 런타임에 true 값을 반환하는 경우 지리적 위치 정보가 지원되는 것입니다.

일부 iPhone 모델에는 GPS 장치가 포함되어 있지 않습니다. 이러한 모델은 다른 수단(예: 휴대폰 삼각 측량)을 통해 지리적 위치 데이터를 얻습니다. 이러한 모델 또는 GPS가 지원되지 않는 iPhone의 경우 Geolocation 객체가 한두 개의 초기 update 이벤트만 가져올 수 있습니다.