2008-07-13

写真の場所をGPSで計測して登録

GPS機能を使って写真の場所を計測できるようにしたい。
方法としては以下が考えられる。

1.測地情報を写真に設定し、写真を登録する。
2.測地情報を取得し、その測地情報と写真を登録する。

1についてはPicasa webで測地情報を表示してくれるので、わざわざ何することはない。(ただしPicasa webの設定変更は必要)
2については写真ごとに位置情報を設定しないでいいので、同じ場所で何度も写真を取る場合に効率が良く、こちらを実装してみようと思う。
ただiアプリでGPS機能を使うにはトラステッドiアプリでなければ使えないためiモードとの連携が必要。本当のところドコモには、ユーザー責任を確認のうえ、一般に使える機能として開放してほしい。

iモードからGPSを利用するサービスについては以下を参照

http://www.nttdocomo.co.jp/service/imode/make/content/gps/index.html

次はiモードから位置情報を取得するxhtml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//i-mode group (ja)//DTD XHTML i-XHTML(Locale/Ver.=ja/2.1) 1.0//EN" "i-xhtml_4ja_10.dtd">
<html>
<head>
<title>iPicasa</title>
</head>
<body>
<div style="text-align: center">
<hr style="border-style: solid; border-color: #6AA7DB;" />
<a href="/setGeoLocation.do" lcs>現在地をGPSで計測</a>
<hr style="border-style: solid; border-color: #6AA7DB;" />
</div>
</body>
</html>



測地系はgoogleも、ドコモも、世界測地系(wgs84)で同じなのだが、ドコモでは、度は10進法でdd(00~90)、分と秒は60進法でmm、ssとそれぞれ表記し、秒の小数点以下の数値は10進法で三桁表記、googleは少数で表現している。このため、利用するには変換が必要。
以下がJavaによる変換のための関数の例。


private Double setLocation(String loc) {

StringTokenizer st = new StringTokenizer(loc, ".");

double d = Double.parseDouble(st.nextToken());
int sign = d > 0 ? 1 : -1;

d += (Double.parseDouble(st.nextToken())/60.0
+ Double.parseDouble(st.nextToken())/3600.0
+ Double.parseDouble(st.nextToken())/3600000.0)*sign;

return Double.valueOf(d);
}


次回はiアプリを修正して、測地情報を登録できるようにしよう。