強火で進め

このブログではプログラム関連の記事を中心に書いてます。

iPhoneの位置情報を取得する方法

プログラム(JavaScript)はこの様に書きます。

private var locStatus : String = "";
private var locInfo : String = "";

function Start () {
	iPhoneSettings.StartLocationServiceUpdates();
}

function Update () {
	switch (iPhoneSettings.locationServiceStatus) {
		case LocationServiceStatus.Stopped:
			locStatus = "Stopped";
			break;
		case LocationServiceStatus.Initializing:
			locStatus = "Initializing";
			break;
		case LocationServiceStatus.Running:
			locStatus = "Running";
			
			locInfo = "Location: " + iPhoneInput.lastLocation.latitude + " " +
				iPhoneInput.lastLocation.longitude + " " +
				iPhoneInput.lastLocation.altitude + " " +
				iPhoneInput.lastLocation.horizontalAccuracy + " " +
				iPhoneInput.lastLocation.timestamp;
			
			if (Input.touchCount >= 1) {
				Application.OpenURL ("http://maps.google.com/maps?ll="+
					iPhoneInput.lastLocation.latitude+","+iPhoneInput.lastLocation.longitude);
			}
			break;
		case LocationServiceStatus.Failed:
			locStatus = "Failed";
			break;
	}
}

function OnGUI () {
	GUI.Label (Rect(5, 5, Screen.width-10, 20), locStatus);
	GUI.Label (Rect(5, 30, Screen.width-10, 20), locInfo);
}

function Destroy () {
	iPhoneSettings.StopLocationServiceUpdates();
}

Hierarchyに適当なオブジェクトを追加し、このプログラムを追加すると動作します。

  • このサンプルではアプリの動作が開始すると自動的に位置情報の取得を始め、毎フレーム情報を更新して画面に表示します。
  • 画面には現在の位置情報取得についてのステータスと取得出来たデータを表示します。
  • 画面をタップすると取得出来た値を元にその位置をGoogle マップに表示します。

プログラムの解説

function Start () {
	iPhoneSettings.StartLocationServiceUpdates();
}

位置情報の取得を開始します。

	switch (iPhoneSettings.locationServiceStatus) {

Update () で iPhoneSettings.locationServiceStatus の値により処理を分岐しています。このプロパティはGPSなど、位置情報を取得する装置の準備が完了し、情報を取得仕始めると LocationServiceStatus.Running に変化します。

			locInfo = "Location: " + iPhoneInput.lastLocation.latitude + " " +
				iPhoneInput.lastLocation.longitude + " " +
				iPhoneInput.lastLocation.altitude + " " +
				iPhoneInput.lastLocation.horizontalAccuracy + " " +
				iPhoneInput.lastLocation.timestamp;

ステータスが LocationServiceStatus.Running に成っている時は iPhoneInput.lastLocation に現在取得出来ている位置情報が入っています。

プロパティ 内容
latitude 緯度
longitude 経度
altitude 高度
horizontalAccuracy 水平方向の精度
verticalAccuracy 垂直方向の精度
timestamp タイムスタンプ
function Destroy () {
	iPhoneSettings.StopLocationServiceUpdates();
}

今回のサンプルでは毎フレーム位置情報を取得しているので Destroy () で位置情報の取得を停止していますがアプリによっては一回取得するだけで大丈夫なアプリも多いかと思います。

その様なアプリの場合はデータの取得が完了したら直ぐに位置情報の取得を停止する様にして下さい。位置情報の取得はかなりバッテリー消費する処理です。

関連情報

Unity Script Reference – iPhoneInput.lastLocation
http://unity3d.com/support/documentation/ScriptReference/iPhoneInput-lastLocation.html

Unity Script Reference – LocationInfo
http://unity3d.com/support/documentation/ScriptReference/LocationInfo.html