2010年10月16日土曜日

GPS付きのデジカメを買って緯度経度情報から住所をゲットしてみた

 以前からバイクでツーリングに行く時にPanasonicのLUMIXシリーズのTZ7 (DMC-TZ7)というデジカメを使っていた。それまでNikonの古いやつを使ったいたのだが,ディスプレイが小さいためとても使いにくかったので,そろそろ機も熟したと思って買ったのがTZ7だった。ポイントはなんといっても12倍の光学ズーム。かなり遠くまで撮れるのでかなり重宝している。実際には,写真の解像度を下げているため,実質の倍率は光学20倍程度になっているらしい。以前の光学3倍と比べると写真のバリエーションが増えて楽しい。光学ズームの倍率が高い分デジカメ自体のサイズは大きいが,軽くて小さなやつはきゃしゃですぐ壊れたりするので,ツーリングの時に持って行くには多少大きくても丈夫な方がいい。なので大きさは全然気にならなかった。色は赤が良かったが,店に残っていたのが茶色だけだったので茶色だった。慣れるとそれなりにいい感じの色と思えてきた。TZ7に欠点がないかといえば,ないことはない。一番はバッテリーのもち。結構大きいバッテリ-だが,意外と早くなくなってしまう。なので予備のバッテリーは必需品らしい。

 そのTZ7をちょっと他の人に貸したらシャッター部分が壊れてしまった。壊した(壊れた時に持っていただけ?)本人は何もしてない,と主張していたが,なんでそれで壊れるんやぁ!!!とりあえず壊れたデジカメは電気屋に持って行って直してもらっている。で,問題は私のカメラ。バイクに乗りたいのにデジカメがない…困った。そこでいろいろな交渉の結果,新しいデジカメを買うことにした。できればすぐに手に入るのがいいと思っていたところ,ネットでTZ7の後継のTZ10 (DMC-TZ10)が2万円ほどで買える,というのを見つけてしまった。幾つかの販売サイトがあったが,以前他のものを購入した実績のあるサイトから購入することにした。そこなら夕方6時までに購入手続きをしたら当日発送ということだったし,色もそのサイトなら黒,銀,金,赤の中から選べたしね。色は今回は念願の赤色にしてみた。支払いは手数料かかるけど代引きにした。振込だと振込の確認に時間がかかったりするので時間がもったいないと思ったから。TZ10とTZ7の違いはあまりないのだが,一点だけ大きく違うのが,TZ10にはGPSがついている。GPSはバイクのツーリングの記録をする時には便利そう。さてどの程度使えるものやら…

 そこで,そのTZ10を持ってバイクで走りに行き,GPSの機能を確認してみた。TZ10のGPS機能はスイッチを入れた直後と,スイッチを入れていると5分に一回,電源を切っていると15分に一回測位をするらしい。3時間以上スイッチを入れないと測位をしなくなるらしい。スイッチを入れていても常に測位をし続けているわけではないので,その点は注意が必要だった。実際,どっかに行ってスイッチを入れても,すぐにはその場所で測位されていない。2~3分待つと測位されるが,気づかないと一個前の場所や,移動途中の情報が記録されてしまう。写真を撮る前に強制的に測位させることもできるが,これが意外と測位に時間がかかり,数分待たされる。さっさと写真を撮って移動したい時にはじらされてしまう。まぁ,たかが数分なので待てばいいんだけどね。いつ頃測位したかという情報は,液晶ディスプレイの右の方にGPSって書いたものと数字が出てる。その数字が何分前に測位したかを示している。これが5を超えていたら新しく測位するのを待った方がよい。また,GPSのアンテナが上部にあり,そこをふさぐと測位に失敗してしまう。他にも建物の中にいると測位できなかったりする。その辺りに気をつけていると結構精度よく位置情報を記録できた。100m移動すると全然違う位置として記録された。10m違っていても違う場所と記録されていたので,精度は数mぐらいの細かさなのかもしれない。これは結構便利かもしれない。さすがに,ルートを全部記録するにはGPSロガーじゃないときっとあかんと思うなぁ。
ちなみに,強制的にGPSを測位させるには,MENU/SET ボタンを押してメニューを表示し,その中のカバンマークのタブに入ってる「GPS設定」を選ぶ。その中の「情報」ってやつを選んで「GPSステータス」を表示させる。その際,MENU/SET ポタンを押すと GPS 情報を「更新」できる。すると GPS で測位をしなおしてくれる。戻るには「ゴミ箱ボタン」を押す。

さて,GPS情報が写真に記録されるようになったので,さっそくGPS情報をツーリング記録に使おうと考えた。TZ10で記録される情報は,以下のようなものがある。
GPSDOP : 0.8
GPSDateStamp : 2010:10:10
GPSDateTime : 2010:10:10 23:34:58Z
GPSLatitude : 34 deg 16' 28.71" N
GPSLatitude (1) : 34 deg 16' 28.71"
GPSLatitudeRef : North
GPSLongitude : 135 deg 14' 53.90" E
GPSLongitude (1) : 135 deg 14' 53.90"
GPSLongitudeRef : East
GPSMapDatum : WGS-84
GPSMeasureMode : 2-Dimensional Measurement
GPSPosition : 34 deg 16' 28.71" N, 135 deg 14' 53.90" E
GPSProcessingMethod : GPS
GPSSatellites : 8
GPSStatus : Measurement Active
GPSTimeStamp : 23:34:58
GPSVersionID : 2.2.0.0
情報はかなり重複して記録されている。ちなみにこの情報はThumbnailを作るの中でも書いたImage::ExifTool;で取り出している。これらの情報の中でまず気になるのが
GPSMapDatum : WGS-84
という情報。GPSの位置情報の基準には2種類あって,一個がこのWGS-84とよばれる世界標準の基準を利用した位置情報。もう一つは日本固有のものらしい。最近はだいたいがWGS-84を使っているみたいやから,あまり気にしないでもいいのかもしれない。で,画像に記録された情報から位置情報を得たい場合は,
GPSPosition : 34 deg 16' 28.71" N, 135 deg 14' 53.90" E
を使うとよい。GPSLatitudeGPSLongitudeを使ってもよいが…。ここに記録されている位置情報は「北緯34度16分28.71秒,東経135度14分53.90秒」というもの。位置情報を地図に利用しようと思うと,「度分秒」という単位じゃなくて,小数を使った「度」表示の方がよかったりする。なので,位置情報は分を60で割り,秒を3600で割って,度に加えたものを用意する(うぉっちずだけは違っていたけど…)。具体的には
34度16分28.71秒 = 34 + 16/60 + 28.71/3600 =34.27464166667度
としないといけない。これを使って地図を利用するには,例えばYahooの地図なら,
http://map.yahoo.co.jp/pl?type=scroll&lat=xxxxx&lon=yyyyyy&z=16&mode=map&pointer=on&datum=wgs&fa=ks&home=on&hlat=35.021772777987&hlon=135.75571213347&layout=&ei=utf-8&p=
として,xxxxxxの部分に緯度を,yyyyyyの部分に経度を入れればよい。z=16の部分は地図の縮尺を意味している。この数字が大きい方が大きく拡大されて細かい部分が見える地図になる。やりすぎると拡大しすぎとなって地図を表示してくれなくなるのでご注意を。また,
GPSDateTime : 2010:10:10 23:34:58Z
という時間情報も重要。この時刻はグリニッジ標準時を表しているみたい。実際にはこの9時間後の10/11の午前8:34のデータなので。この時刻と写真自体の時刻情報,例えばCreateDateが大きく(例えば3分や5分以上)違っていたら,写真の場所とGPS位置情報がずれている可能性がある。

 さらに,位置情報から住所がわかるとそれがどこで記録されたものかがよくわかっていい。地図で見れればそれで十分という話しもあるが…。位置情報から住所を得るにはいろいろ作戦があると思うが,今回利用したのはYahooのリバースジオコーダというやつ。日本国内以外は国名ぐらいしか情報が得られないけど…。リバースジオコーダを使うには,まず「アプリケーションID(無料)」を取得しないといけない。アプリケーションIDはサーバーのアプリケーションごとに必要らしい。アプリケーションIDを取得できれば,以下のようにして住所を得られる。
use LWP::Simple;
...
...
my $address_url = 'http://reverse.search.olp.yahooapis.jp/OpenLocalPlatform/V1/reverseGeoCoder?lat='.$ido.'&lon='.$keido.'&appid=pppppppppp';
my $address_data = get($address_url);
if ($address_data =~ /<Address>(.*)<\/Address>) { # 住所の取り出し
    $address = $1;
    $address = jcode($address)->utf8; # utf8で表示させるため
}
ここでLWP::Simple;perlのモジュールで,別名libwww-perlと表記されるLWPグループの中のもので,perlでwebにアクセスするためのもの。FreeBSDでは/usr/ports/www/p5-libwww/で得られる。LWPxxxという名前ではないので注意が必要。またp5-がついていないlibwwwというのもあるので気をつけましょう。

追記)使ってみて思ったのだが,webで公開する写真に下手にGPS情報が残っていると,住んでるところとかがわかってしまう。だから,普段はGPS機能をオフにするのがいいかもしれない。かつ,ツーリングに行った経路を記録するならGPSロガーの方がいいかも,と思ってしまった。

追記2)感度や機能を考えて,GPSロガー(TripMate850)を買ってみた。TZ10が衛星4個しか捕捉してない時に,TripMate850 は8~9個も捕捉してた。これは GPS ロガーを使う方がいい,と思ってしまった。でも,ここでの内容は写真に GPS 情報を書き込むのに応用している。

0 件のコメント: