지리적 위치 센서를 사용하려면 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
이벤트만 가져올 수 있습니다.