地図で位置を示す、緯度と経度ですがこれは日本で主に使われているものでは
世界測地系と日本測地系の2つあり(詳しくはWikipediaを参照下さい)互いに同じ位置を示したい場合は変換をかける必要があります。
今回はYahoo!地図情報(日本測地系)とGoogle マップ(世界測地系)を使ってテストします。
そしてわかりやすい位置として「東京タワー」の緯度、経度を変換してみます。
まずはYahoo!地図情報で「東京タワー」を検索
Yahoo!地図情報で「東京タワー」を検索したときのURLはこちらになります。
http://map.yahoo.co.jp/pl?p=%C5%EC%B5%FE%A5%BF%A5%EF%A1%BC&lat=35.65538&lon=139.74876111&type=&lnm=%C5%EC%B5%FE%A5%BF%A5%EF%A1%BC&idx=20
こちらから緯度、経度情報を取得しようと思います。
ざっと見ただけでとてもわかりやすいパラメータです。どう考えても lat(latitude) → 緯度、 lon(longitude) → 経度ですよね。
緯度:35.65538
経度:139.74876111
変換の計算式
今回、変換の計算式はこちらのサイトの式を使用させて貰いました。
Gpso.info 開発ブログ: 経度・緯度の表し方と変換
http://blog.gpso.info/2006/08/post_2.html
PHPの変換プログラム
以上の情報を元にプログラムを組むとこんな感じになりました。
<html> <body> <?php // 日本測地系→世界測地系 function geo_japan2world(&$lat, &$lng){ $la = $lat; $ln = $lng; $lat = $la - $la * 0.00010695 + $ln * 0.000017464 + 0.0046017; $lng = $ln - $la * 0.000046038 - $ln * 0.000083043 + 0.010040; } // 世界測地系→日本測地系 function geo_world2japan(&$lat, &$lng){ $la = $lat; $ln = $lng; $lat = $la + $la * 0.00010696 - $ln * 0.000017467 - 0.0046020; $lng = $ln + $la * 0.000046047 + $ln * 0.000083049 - 0.010041; } // 東京タワーの座標(Yahoo!地図情報で取得) $lat=35.65538; $lng=139.74876111; echo "----------------------------<br>"; echo "【Yahoo!地図情報(日本測地系)】<br>"; echo "緯度:{$lat}<br>"; echo "経度:{$lng}<br>"; echo "----------------------------<br>"; // 日本→世界 geo_japan2world($lat, $lng); echo "【Google マップ(世界測地系)】<br>"; echo "緯度:{$lat}<br>"; echo "経度:{$lng}<br>"; echo "----------------------------<br>"; // 世界→日本 geo_world2japan($lat, $lng); echo "【Yahoo!地図情報(日本測地系)】<br>"; echo "緯度:{$lat}<br>"; echo "経度:{$lng}<br>"; echo "----------------------------<br>"; ?> </body> </html>
出力はこちら。
-------------------- 【Yahoo!地図情報(日本測地系)】 緯度:35.65538 経度:139.74876111 -------------------- 【Google マップ(世界測地系)】 緯度:35.6586089295 経度:139.745554451 -------------------- 【Yahoo!地図情報(日本測地系)】 緯度:35.6553800387 経度:139.748761152 --------------------
検証
それでは計算結果の検証をします。
Google マップで「東京タワー」を検索したときのURLは以下となります。
http://maps.google.co.jp/maps?f=q&hl=ja&geocode=&q=%E6%9D%B1%E4%BA%AC%E3%82%BF%E3%83%AF%E3%83%BC&sll=35.661167,139.701333&sspn=0.009658,0.03974&ie=UTF8&ll=35.661725,139.745407&spn=0.009658,0.03974&z=15&iwloc=addr
それっぽいパラメータがいくつもあってよくわかりません。
調べてみると以下のGoogle マップのヘルプに情報がありました。
緯度経度の座標の周辺のビジネスを検索することはできますか。
http://maps.google.com/support/bin/answer.py?hl=jp&answer=18539
とりあえずこんな形式で指定すれば良いらしいです。
http://maps.google.co.jp/maps?q=35.655152,+139.704444&hl=ja
この形式に今回、変換をかけた緯度経度をあてはめるとこうなります。
緯度:35.6586089295
経度:139.745554451
http://maps.google.co.jp/maps?q=35.6586089295,+139.745554451&hl=ja
表示をみるとだいたいYahoo!のものと同じ位置を指しているようです。
あと、改めてGoogle マップで「東京タワー」を検索したときのURLを見てみると ll のパラメータが緯度、経度を表していそうです。
計算で変換した値 | Google マップで検索 | |
---|---|---|
緯度 | 35.6586089295 | 35.661725 |
経度 | 139.745554451 | 139.745407 |
よっぽど精度を気にするようなとき以外は十分に実用に足りそうです。
(2009/02/15 追記)
こちらのページ、良くまとまっていて読みやすいと思います。
位置情報を取得する仕組み − @IT
http://www.atmarkit.co.jp/fnetwork/rensai/ichijouhou01/01.html