지리적 위치 정보 변경 감지
지리적 위치 센서를 사용하려면 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 이벤트를 전달합니다. 다음 코드에서는 지리적 위치 데이터를 사용할 수 없을 때 이를 감지하는 방법을 보여 줍니다.
var geo:Geolocation;
var latitude:Number;
var longitude:Number;
if (Geolocation.isSupported)
{
geo = new Geolocation();
if (!geo.muted)
{
geo.addEventListener(GeolocationEvent.UPDATE, updateHandler);
geo.addEventListener(StatusEvent.STATUS, geoStatusHandler);
}
}
else
{
trace("not supported");
}
function updateHandler(event:GeolocationEvent):void
{
latitude = event.latitude;
longitude = event.longitude;
}
function geoStatusHandler(event:StatusEvent):void
{
geo.removeEventListener(GeolocationEvent.UPDATE, updateHandler);
}
참고: 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 이벤트만 가져올 수 있습니다.