Google Maps API@つれづれ

2005/10/12(Wed) 01:05

ずいぶん前にとりあえず動かしてみて、半端なままほったらかしてあったGoogleMapとの連携を整理。
きっかけは、トップページのRecent Locations - 最近一ヶ月の場所を見て自分で笑ってしまったから。ここ1ヶ月ちょっと飛び回り過ぎ。しばらく落ち着こう…ほんとか?

以下、ググられ用のメモ。

GPS情報をMTで扱うためののpluginとしてjm@foo jiroさん作のlocation.plをちょっと改造して利用。便利なpluginを作ってくれたjiroさんに感謝。
あとは今まで通り、エントリのメール投稿と本文のMapリンク付けにはpost2blog、写真のGPS情報の編集にはカシミール3D+デジカメプラグインを利用。改めて感謝。

エントリ毎に含まれる写真をまとめてmarkerとして表示させたかったので、jiroさんのサンプルを大半流用して、エントリ毎に緯度経度のmarker情報を含んだxmlファイルを出力させて、それを同じくエントリ毎のhtml内のJavaScriptから読み込んでGoogleMap APIに渡す形にする。
MTのTemplate編集画面で新しいArchive templateをhtmlとxmlと2つつくり、publishing settingsでIndividual typeに追加する。archive file pathはarchivesからの相対パスらしいので、1つ上がって../gmap%y%m%b.{html,xml}を指定。
xmlはutf-8指定を追加、htmlはマーカの位置にあわせてセンタリング&ズームをするように修正。
xmlテンプレート
htmlテンプレート

このGoogleMapにリンクすべく、Main index, Category, Monthlyのテンプレートに以下を追加。エントリにGPS情報があるときに1つだけ表示したかったので、あまり綺麗な方法ではないけどlocations.plにlastn引数を追加して1を指定。

<MTLocations lastn="1">
<a href="/ennui/gmap/20<$MTEntryDate format="%y%m"$><MTEntryBasename>.html">Google map</a>
</MTLocations>

Recent Locationsはindividualと同様のxmlをindex typeのテンプレートとして作成して、htmlはstaticに用意。

locations.plには以下の勝手パッチを適用
locations.pl用パッチ

  • MTLocationsのlastn対応。
  • MTEntryIfLocationsを追加。(未使用)
  • GPS情報の測位系をTOKYOと判定する部分をcase-insensitiveに変更。カシミール3DがTokyoと格納するので。
  • extended entry内のimgもLocationの取得対象に追加。
  • 文中のMapionなどへのリンクは読み取らないように変更。写真毎のMapリンクは残したかったので、これをいれたままだと写真とリンクと二重になってしまう。


    写真毎のリンクは本文に直書きではなくて、MTLocationsで何番目という指定をできるようにすればMT変数で実現できるだけど、ひとつのエントリに複数のMTLocationsは美しくないのでとりあえず放置。ほんとは、位置情報はMTEntryの属性として扱えるべきかも。


    以上で完了。GPS情報はimgタグで貼付けた写真のExifがマスターなので、撮ったときにGPS携帯で位置情報を付けておけばメールでエントリ投稿するだけで勝手にやってくれる。デジカメで撮った写真や、取得位置がずれていたものは後でカシミール3Dでexif情報を修正して、blogをリビルドすれば反映される。

    これで一応目につくおかしなところはなくなって、moblogとしての体裁は整った、はず。さてもうちょっと位置情報を使ってなんかできないだろうか…。