GPSで取った現在位置からGoogleマップへのリンクを作成する
SA702iを使ってGPSで取得した現在位置をメールでMTに投稿した時に、デフォルトのままではPCユーザが見ることが出来ないDocomoサーバ内の地図のURLが表示されるだけで面白くないので、適当な地図サイトへのリンクにすることを考えてみました。
携帯のGPSで取った緯度経度でそのままマピオンの地図を表示するとずれています。測地系 - Wikipediaで紹介されている国土地理院による日本陸上用の変換CGIを使って、携帯GPSからの情報を世界測地系として日本測地系に変換した上でマピオンに渡すとそれっぽい位置になりました。しかし変換は面倒なので世界測地系を採用している地図を探してみると…。Googleマップでいいようですね。
Pythonで試し書き。
data = "http://docomo.ne.jp/cp/map.cgi?lat=%2B33.35.26.977&lon=%2B130.25.15.976&geo=wgs84&x-acc=1" PAT = "(http://docomo.ne.jp/cp/map.cgi\?lat=%2B(\d+).(\d+).(\d+.\d+)&lon=%2B(\d+).(\d+).(\d+.\d+)&geo=wgs84&x-acc=\d+)" TEMPLATE = "http://maps.google.co.jp/?t=k&ll=%f,%f" def docomo2google(m): (a, lat1, lat2, lat3, lon1, lon2, lon3) = m.groups() lat = (float(lat3) / 60 + float(lat2)) / 60 + float(lat1) lon = (float(lon3) / 60 + float(lon2)) / 60 + float(lon1) return TEMPLATE % (lat, lon) re.subn(PAT, docomo2google, data)
こんな感じですね。 あとはこれをPerlで書き直してMovableTypeのフィルタにすればOK、と。 問題はそんなことより、僕の携帯のGPSナビゲーションがなぜか「接続できません」というエラーで使えないことなのですけどねー。近いうちにドコモショップに聞きに行かないと…。
sub docomo2google{
my($lat1, $lat2, $lat3, $lon1, $lon2, $lon3) = @_;
my $result = "";
my $lat = ($lat3 / 60.0 + $lat2) / 60.0 + $lat1;
my $lon = ($lon3 / 60.0 + $lon2) / 60.0 + $lon1;
return "<a href='http://maps.google.co.jp/?t=k&ll=$lat,$lon'>[GoogleMap]</a>";
}
# 変換部分(自作フィルタの中)
$text=~s|http://docomo\.ne\.jp/cp/map\.cgi\?lat=%2B(\d+)\.(\d+)\.(\d+\.\d+)&lon=%2B(\d+)\.(\d+)\.(\d+\.\d+)&geo=wgs84&x-acc=\d+|&docomo2google($1,$2,$3,$4,$5,$6)|ieg;
出来ました。
フィードバック
はじめまして。さんじゅうろうと申します。SA702iで検索してこちらにたどり着きました。
私も同じように「デフォルトのままではPCユーザが見ることが出来ないDocomoサーバ内の地図のURLが表示されるだけで面白くない」 と思っていました。 プログラミングスキルがないので、PCユーザーにはマピオンの携帯サイトの「ここでねマピオン」のサービスを利用して、地図情報のリンクを送ってます。
GPSナビゲーション中に「接続できません」のエラーメッセージが表示される現象、私の端末でも発生しました。 結構な頻度で発生するので、ナビゲーションはほとんど使用していません。単純に電波の感度の問題ならいいんですけどね。