オレオレライフログ:位置情報取得

オレオレライフログの名称をオラグーンにしようかと思っているpapettoTVです。

オレオレライフログを略してオレグとかオラグとか、って安易な名前しか思いつかないんでなんとなく伸ばしてみたら、ゲームのパンツァードラグーン(wiki)みたいでかっこいいなーと思ったっていうどうでもいい話。

いい名前思いつかなかったらこれにしちゃうぞ><

さて、前回はメールに添付した画像が自動でブラウザに反映されるとこまでいったので、今回は、さらに位置情報を取得してgoogle mapにマーカー設置するとこまでやってみます。

Exif情報の確認

まずそもそも携帯から添付されてきた写真に、exif情報が付加されてるのかどうかがあやしいので、我が携帯(AU w54sa)で見てみる。そこで、GPS付けるオプションで写真をとってみました。すると、メール本文に位置情報つきのeznabiへのリンクがでるという仕様。なんと、、、早くもexif情報じゃなくなってる・・・とにもかくにもiphoneはexifが付いてるらしいので、まずは付いてる前提で作ります。(そのうちexif付いてるのが当たり前になる、と勝手に思ってるのでw)

こちらで、exifのGPS情報取得サンプルアプリを用意しましたので、お手元の画像をアップしてGPS情報が取得できるか確認してみてください。

exif情報のGPS取得サンプルアプリ

メール添付写真自動表示アプリ修正

前回公開した、メール添付写真自動表示アプリを修正し、位置情報が取れた場合にgoogle mapを表示するようにしました。

<?
	// 本文・添付ファイルを別々に分解するため、boundary=?? を取り出し
	$log = dirname(__FILE__) . "/mail.log";

	$contents_src="";
	$fp = fopen($log, "r");
	while (!feof($fp)) {
		$contents_src .= fread($fp, 8192);
	}
	fclose($fp);

	//preg_match("/boundary=\"(.*)\"/i", $contents_src , $boundary);
	preg_match("/boundary=(.*)/", $contents_src , $boundary);

	// ヘッダ・本部・添付をばらばらに
	$data = split($boundary[1] , $contents_src , 2);
	$data = split($boundary[1] , $data[1]);

	// 本文を取得
	$body = split("\n\n" , $data[1]);
	$body[1] = preg_replace("/\n/", "", $body[1]);

	// 添付を取得
	$out = split("\n\n" , $data[2]);
	$out = preg_replace("/\n/", "", $out[1]);
	$out = preg_replace("/--/", "", $out);

	// 画像ファイル保存
	$file_name = dirname(__FILE__) . "/tmp.jpg";
	$fp = fopen($file_name, "w");
	fputs($fp, base64_decode($out));
	fclose($fp);

	// exif情報取得
	$exif = exif_read_data($file_name,0,true);
	if($exif){
		$lad = explode('/', $exif["GPS"]["GPSLatitude"][0]);

		if ($lad[0]){
			$lad2=$lad[0]/$lad[1];
			$lam = explode('/', $exif["GPS"]["GPSLatitude"][1]);
			$lam2=floor($lam[0]/$lam[1]);
			$las = explode('/', $exif["GPS"]["GPSLatitude"][2]);
			$las2=round(($lam[0]/$lam[1]-$lam2)*60+$las[0]/$las[1],2);
			$lod = explode('/',$exif["GPS"]["GPSLongitude"][0]);
			$lod2=$lod[0]/$lod[1];
			$lom = explode('/',$exif["GPS"]["GPSLongitude"][1]);
			$lom2=floor($lom[0]/$lom[1]);
			$los = explode('/',$exif["GPS"]["GPSLongitude"][2]);
			$los2=round(($lom[0]/$lom[1]-$lom2)*60+$los[0]/$los[1],2);
			$ladWGS84=$lad[0]/$lad[1]+$lam[0]/$lam[1]/60+$las[0]/$las[1]/3600;
			$lonWGS84=$lod[0]/$lod[1]+$lom[0]/$lom[1]/60+$los[0]/$los[1]/3600;
		}
	}

	$g_ct = $ladWGS84.",".$lonWGS84;
	$g_mk = $ladWGS84.",".$lonWGS84;
	// google map key は各自の環境にあわせてください。
	$g_key = "ABQIAAAATq24xBAb6pS_Wklu79Rd3hR5NNcDOspzAL-UK8nFkO1LgdNPGxS1mKxgfsylkx_m4iMA9Xdp7YhfZg";
	$g_params = "center=".$g_ct."&amp;markers=". $g_mk .",red&amp;zoom=10&amp;size=132x100&amp;key=". $g_key;

?>
<html>
<body>
<h2>添付画像</h2>
<img src="tmp.jpg" width="100"/>
<h2>位置情報取得結果</h2>
<?php
	if($ladWGS84 != "" && $lonWGS84 != ""){
?>
<img src="http://maps.google.com/staticmap?<?= $g_param ?>"/>
<?
	}else{
?>
位置情報の取得に失敗
<?
	}
?>
<a href="http://playispeace.com/blog/195/lifelog_test">back</a>
</body>
</html>

動作確認

なので、

  • 上のサンプルアプリで、写真の位置情報を確認

  • 位置情報がとれた写真をメールに添付してこちら(lifelogアットplayispeaceドットsakuraドットneドットjp)までメールを送信

  • こちら(メール添付写真自動表示アプリ)にアクセスして結果をチェック!

結果

さて、うまく表示されたでしょうか?もしうまく動作しなかった場合、詳細な現象をご一報いただけると助かります。

今後

写真を撮って、メールを送信したら地図に反映!というフローは実装したいので、exif無い場合は、メール本文のeznaviURLからでも位置情報抜いてやろうか(私の携帯の場合)と思っているのですが、他の携帯とかってどうなんでしょうね。その辺の情報共有できんかなー、もしくはライブラリがないかなー。。。

							Tags: [exif](/tag/exif), [google map](/tag/google-map), [lifelog](/tag/lifelog) 

		« [オレオレライフログ:動作検証](/195/lifelog_test)

		[メール添付画像解析やりなおし](/221/mail_img_parse) »

	[画像未復旧: similar.png](http://blog.playispeace.com/img/similar.png) 関連ありそうなエントリー