強火で進め

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

SDK開発者以外がiPhoneの緯度、経度情報を使う方法

iPhoneで緯度、経度情報を取得しようとすると通常はiPhone Developer Programに加入し、SDKでネイティブアプリを作成する必要があります。

しかし、App Storeに公開されているAlocolaというアプリ(無料、ソースはGPL2ライセンスで公開)を使う事でSDK開発者以外でも緯度、経度情報を使う事が可能です。

Alocola: iPhone app that location-enables any website
http://www.alocola.com/

このアプリを使うと以下の流れでWebアプリに緯度、経度情報を渡す事ができます。

手順

まずは取得したいパラメータとそのパラメータを渡すURIを指定してAlocolaを呼びます。

例えば全てのパラメータを取得し、 http://tsuyobi.heteml.jp/iphone/alocola/index.php に渡す場合は以下の様に記述します。

alocola://alocola.com?url=http%3a%2f%2ftsuyobi%2eheteml%2ejp%2fiphone%2falocola%2findex%2ephp%3flatitude%3d_latitude_%26longitude%3d_longitude_

こちら、先頭部分の alocola://alocola.com がURL schemeでAlocolaを起動するための記述です。
続く url= の部分が取得したいパラメータの指定とそのパラメータの渡し先URIをしています。

こちらの値にはURLエンコードをしたものを使用します。

今回の例として使用したもののURLエンコード前はこの様になっています。

url=http://tsuyobi.heteml.jp/iphone/alocola/index.php?latitude=_latitude_&longitude=_longitude_

http://tsuyobi.heteml.jp/iphone/alocola/index.php が「パラメータの渡し先URI」で latitude=_latitude_ などが取得したいパラメータの指定となります。

latitude=_latitude_ などと指定しておくと、 _latitude_ などの _ で挟まれた文字列の部分が実際に取得された値に置き換わり、サーバサイドのアプリでGET値として取得することができます。

取りあえず一番良く使うであろう緯度と経度は latitude (緯度)、と longitude (経度)となります。
その他の値については公式サイトのこちらを参照して下さい。

Alocola: web developer guide
http://www.alocola.com/developer.html

実際にPHPでサーバサイドのプログラミングを作る場合、以下の様になります。

<html>
<head>
		<meta name="viewport" content="width=320"/>
		<meta http-equiv="content-type" content="text/html; charset=Shift_JIS" />
		<title>Alocolaのテスト</title>
</head>
<body>
<style type="text/css">
<!--
body,a {
	line-height: 150%;
	font-size: 20pt;
}
-->
</style>
Alocolaのテスト<br />
<br />
<a href="alocola://alocola.com?url=http%3a%2f%2ftsuyobi%2eheteml%2ejp%2fiphone%2falocola%2findex%2ephp%3flatitude%3d_latitude_%26longitude%3d_longitude_">■緯度、経度を取得する</a><br />
<a href="alocola://alocola.com?url=http%3a%2f%2ftsuyobi%2eheteml%2ejp%2fiphone%2falocola%2findex%2ephp%3faltitude%3d_altitude_%26course%3d_course_%26horizontalAccuracy%3d_horizontalAccuracy_%26latitude%3d_latitude_%26longitude%3d_longitude_%26speed%3d_speed_%26timestamp%3d_timestamp_%26verticalAccuracy%3d_verticalAccuracy_">■全てのパラメータを取得する</a>
<hr />
GET:<br />
<?php
print("<textarea cols='40' rows='10'>\n");
foreach($_GET as $key => $val) {
	printf("%s => %s\n", $key, $val);
}
print("</textarea>\n");
if (is_numeric($_GET['latitude']) && is_numeric($_GET['longitude'])) {
	print("<hr />");
	$url = sprintf("http://maps.google.com/maps?ll=%s,%s", $_GET['latitude'], $_GET['longitude']);
	printf("<a href='%s'>GoogleMapを開く(%s)</a>", $url, $url);
}
?>
<hr />
Alocolaについては<a href="http://www.alocola.com/">こちら</a>を参照して下さい。<br />
</body>
</html>

実際に試したい方の為に上記のサンプルプログラムを設置しました。

Alocolaをインストールし(アプリのDL先はこちら)、iPhonesafariこちらのサイトにアクセスすると実際の動作が試せます。

Alocolaが起動されたときは初回起動時に緯度、経度など情報を使用しても良いかの確認が出ますので「OK」を選択して下さい。

データ取得完了後にはパラメータを渡すサイトのドメイン名が表示され、「データ送信OKですか?」の確認が入ります。こちらも「OK」を選択して下さい。

こちらのサイトではAlocolaから渡されたGET値の表示とパラメータを元に作成したGoogle マップのリンクが作成が行われます。Google マップのリンクをクリックするとiPhoneGoogle マップが起動し、現在地の地図が表示されます。