ジオロケーションセンサーを使用するには、Geolocation オブジェクトをインスタンス化し、このオブジェクトが送出する
update
イベントを登録します。
update
イベントは、Geolocation イベントオブジェクトです。このイベントには次の 8 個のプロパティがあります。
-
altitude
—高度(メートル単位)を返します。
-
heading
—真北を基準とする移動の方角(整数)を返します。
-
horizontalAccuracy
—水平精度(メートル単位)を返します。
-
latitude
—緯度(度単位)を返します。
-
longitude
—経度(度単位)を返します。
-
speed
—速度(m/秒)を返します。
-
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()
メソッドを呼び出します。このメソッドは 1 つのパラメーター
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 オブジェクトが最初に 1 つまたは 2 つの
update
イベントを送出します。その後、情報が大幅に変更されたときに
update
イベントを送出します。
ジオロケーションサポートの確認
ランタイム環境でこの機能を使用できるかどうかをテストするには、
Geolocation.isSupported
プロパティを使用します。
if (Geolocation.isSupported)
{
// Set up geolocation event listeners and code.
}
現在、ジオロケーションがサポートされているのは、iPhone および Flash Lite 4 用の ActionScript ベースのアプリケーションのみです。
Geolocation.isSupported
が実行時に
true
の場合は、ジオロケーションサポートが存在しています。
一部の iPhone モデルには GPS ユニットがありません。これらのモデルは他の方法(携帯電話の三角測量など)を使用して、ジオロケーションデータを取得します。これらのモデルや、GPS を無効にしている iPhone では、Geolocation オブジェクトは 1 つまたは 2 つの初期
update
イベントを送出できるだけです。