2005年07月14日
Movable Type用 位置プラグイン
Google Mapsが日本地図対応になった。しかも詳細。
いやー、すごいです。
というわけで、Google Maps APIなどの位置情報ツールとMovable Typeをつなぐプラグインを作成。エントリーに含まれる緯度経度を返します。
(2005-07-15 01:00 ちょっと変更)
locations.pl
(測地系変換にNowralさんのコードを使用させていただきました。ありがとうございます。)
インストール:
locations.plをpluginsディレクトリに置く
Image::Info
HTML::Parserに含まれるHTML::LinkExtor
が必要。HTML::Parserは多くのサーバに最初からインストールされているようだが、Image::Infoがない場合はここ参照
対応する位置情報:
・エントリー本文にimgタグとして記述され、同じサーバに置かれている画像のExif GPSタグ
・エントリー本文に含まれる地図サービスのURL ( walk.eznavi.jp / www.gpspowered.jp / mapfan.com / www.mapion.co.jp )
タグ記述例:
パラメータ:
実例:
その1-1:Individual Entry Archiveテンプレートに
その1-2:Individual Entry Archiveテンプレートに
その1-3:たとえばこのようなCGIをMovable TypeのCGIと同じディレクトリに置き、Individual Entry Archiveテンプレートに
その2:data.xmlという出力ファイル名のインデックス・テンプレートを作る。中身は以下。
Google Maps APIのこれを参考に、
面白い記事ありがとうございます。
この記事を参考に、自サイトでも「地図上に最近100件のエントリーの位置がマップされる」ようにしたいのですが、IEだと何も表示されず、うまく表示されません。Firefox、ネスケ、Operaだと表示されます。
あ、ほんとですね。IEはほとんど使っていないので気付きませんでした。ご指摘ありがとうございます。
http://www.google.com/apis/maps/documentation/#XHTML_and_VML
を参考に動くようにしました。
IEでも見れるようになりました。
ご対応いただきありがとうございました。
すばらしいプラグインありがとうございます。ところで、アップロードでEXIF画像をサムネイル化した場合、本文に位置座標が記述されませんが、対応は予定されていますか?
Posted by: foxhound at 2005年08月25日 16:48すばらしいプラグインありがとうございます。ところで、アップロードでEXIF画像をサムネイル化した場合、本文に位置座標が記述されませんが、対応は予定されていますか?
Posted by: foxhound at 2005年08月25日 16:49すばらしいプラグインありがとうございます。ところで、アップロードでEXIF画像をサムネイル化した場合、本文に位置座標が記述されませんが、対応は予定されていますか?
Posted by: foxhound at 2005年08月25日 16:50サムネイル化した場合、html的には単なる静的に生成されたhtmlファイルへの「リンク」になり、それがサムネイルのつもりで記述されたものなのか、同一サイト内へのリンクとして任意に記述されたものなのかを厳密に見分ける方法はありません。
いろいろ条件を付ければ判別可能だとは思いますが、実際に運用する際の汎用性が下がります。
サムネイルのリンク先が「そのエントリーに記述された位置」なのかどうかも迷うところです。位置を取る手をそこまで延ばすと、「blogエントリーの位置情報」という原理が揺らぐ気もします。
というわけで今のところ対応の予定はありません。
Posted by: jm at 2005年10月15日 19:31はじめまして面白いプラグインありがとうございます。いま必死にMTのエントリーをMapにリンクするように作業してるのですが、どうしてもエントリーの画像を抜き出す部分の記述方がわかりません。
MTCollectを使用する方法で試してみたのですがうまく行かず行き詰まりの状態です。
どうかご教授いただけないでしょうか。
よろしくお願いします。
エントリーの画像を色々試して、表示する事ができました。おさがわせしました。
Posted by: Shou at 2005年10月30日 00:51何度もコメント失礼致します。
位置情報が含まれるエントリーに表示する
地図のリンクURLを自分の地図にリンクURLする事はできないのでしょうか。
てぃーだ
↑このブログようにリンクできないでしょうか。
どうか、ご教授お願いできないでしょうか。
よろしくお願いします。
先日はサムネイルのコメントに対する回答ありがとうございました。ところで、GoogleMapが12月から世界測地形になってしまうみたいですが、location.plは今のままでも使えるのでしょうか?それとも改修が必要になるのでしょうか?
Posted by: foxhound at 2005年11月27日 23:37このページの「パラメータ:」の部分にも記載していますが、datum="1"になっている部分を省略すれば世界測地系になります。datum="0"と明示しても構いません。
Posted by: jm at 2005年11月27日 23:45すみません。
その1-3のred2map.cgiを使った場合、GoogleMapをWGS84(世界測地系)にするにはどうすればよいのでしょうか?
cgiの309行目
} elsif ($map_service eq 'Google Maps') {
($lon, $lat) = geoconv($lon, $lat, 1);
を
} elsif ($map_service eq 'Google Maps') {
($lon, $lat) = geoconv($lon, $lat, 0);
にすればよいです。
早速のご回答ありがとうございました。
cgiの該当部分を変更して位置表示を試してみました。
その結果ですが、Google Mapのみ位置が違います。他のNAVITIME、MapFan Web、livedoor MAPの3つは同じ場所を指しますが、Google Mapのみ違います。
更に、その1-1の方法でdatum="0"にし表示したのGoogle Mapの位置とも違います。datum="0"の場合、先ほどのNAVITIME、MapFan Web、livedoor MAPと同位置です。
どうすれば、cgiのGoogle Mapでも他の地図と同じ位置を表示することができるのでしょうか?
Posted by: 朱雀ぱ at 2005年12月12日 22:31失礼しました。渡される緯度経度はすでに世界測地系になっているはずですので、測地系変換の行をコメントアウトするだけでした。
} elsif ($map_service eq 'Google Maps') {
#($lon, $lat) = geoconv($lon, $lat, 1);
素晴らしいプラグインをありがとうございます。
今まで有り難く使用させて頂いていたのですが、MT Version 3.2-ja-2で複数のブログを管理している状態のところに導入したら、やが全く出なくなってしまいました。
それまでは別々のMTで管理していたブログを一つのMTで管理するようにしたのですが、このプラグインは複数のブログがある環境に対応しておりますでしょうか。
エラーも出ませんし、画像にもGPS情報がしっかりある(移設前はちゃんと出てたもの)のですが、MAPへのリンクが出ない状態です。
何が原因か全く分かりません。
すいません。タグが抜けました。
「<MTLocations>や<$MTLocation$>が」と書きました。
画像を置いているのがBLOGディレクトリ下でなかったのが原因でした。
ありがとうございました。
原因を書いたら何が悪かったかスパムコメント扱いされてしまったのでお礼だけ。
解決しました。ありがとうございました。
新しいドコモGPS携帯に対応させたくて、location.plを改良しているのですがうまくできません。これをhttp://www.gpspowered.jp/gpsmenu.cgi?pos=N35.41.30.71E139.43.57.82&geo=wgs84&X-acc=1
→これにhttp://docomo.ne.jp/cp/map.cgi?lat=%2B35.41.32.995&lon=%2B139.43.41.976&geo=wgs84&x-acc=1
取替えようとしています。こんな感じ→
/http:\/\/docomo\.ne\.jp\/cp\/.*?lat=%2B([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)&lon=%2B([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+).*/) {
$lat = (/http:\/\/docomo\.ne\.jp\/cp\/.*?lat=%2B([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+).*/) ? $1 + $2/60 + ($3 + $4/100)/3600 : undef;
$lon = (/http:\/\/docomo\.ne\.jp\/cp\/.*?lat=.*&lon=%2B([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+).*/) ? $1 + $2/60 + ($3 + $4/100)/3600 : undef;とまあみよう見まねでこんな感じにしたのですが、perlがよくわからないのでやっぱだめでした。ご指南いただければ助かります。
そういうときは正規表現部分だけ取り出して、テストしてみるのが手っ取り早いです。例えば
#!/usr/bin/perl
$_ = 'http://hogehoge/gps/no/value';
if (/kono/moji/wo/mitsuketara/) {
$lat = (/hoge(foo)(bar)/) ? $1 + $2/60 : 0;
print $lat;
}
みたいなテストコードを書いて、シェルで
$ perl test.pl
ありがとうございます。さっそく実行します。
Posted by: foxhound at 2006年01月23日 14:28