最近東神戸の書店情報がごちゃごちゃしてきたので見やすい地図を張りたくなった。
Pukiwikiのプラグインで何かありそうだと思って探したけど、無かったので自分で書いてみた。
GoogleMapsはまだベータ段階でAPIも流動的なので(ver2で固まった模様)今後もそのまま使えるかどうかは不明だが(ver1系は将来的に廃止されるらしい。)、一応できるよーということで。。。v2系に対応して1.1.1にしてみた(2006-05-01)
v3対応の最新版はこちらへどうぞ PukiwikiでGoogleMaps3
こんな風に書く
&googlemaps(width=300px, height=200px, small=1, maptype=1); &googlemaps_icon(神社, http://reddog.s35.xrea.com/img/googlemaps/mm_sample.png, http://www.google.com/mapfiles/shadow50.png, 20, 34, 37, 34, ianchorx=10, ianchory=34, sanchorx=10); -&googlemaps_mark(135.72924826268591554, 35.03937960872038611, title=金閣寺, caption=足利義満の別荘。先日変な男が光ケーブルを接続するために車で突っ込んだ。東側の門は暇そうな警備員が守りを固めている。(長文サンプル), image=http://reddog.s35.xrea.com/img/googlemaps/img_kinkaku.jpg);~ -&googlemaps_mark(135.73510610251286543, 35.03108745526382363, title=北野天満宮, caption=菅原道真を祭ってる, icon=神社);~ -&googlemaps_mark(135.71296373262029438, 35.02872397300313933, title=仁和寺,caption=和尚が名物(嘘));~ -&googlemaps_mark(135.71834889613717445, 35.03447795362604991, title=龍安寺,caption=石庭のうずまきが有名);~
Pukiwiki1.4.6をEUC-JPで使っています。
DTD宣言でXHTMLをHTML 4.01 Transitionalとして宣言してあります。
FirefoxとIEで超適当に動作確認。動かない環境がありそうな気がする。
BSD-Styleのライセンスです。
GoogleがVersion1系をもうすぐ止めるらしいので、配布停止にします。
様々な機能を追加したVersion2系は PukiwikiでGoogleMaps2 で配布しています。
googlemapsで地図を表示して、googlemaps_markでマーカーをつけます。
マーカーで自分で作ったアイコンを使いたいときはgooglemaps_iconでアイコンを定義します。
&googlemaps(?option=value, ...?); &googlemaps_mark(x, y ?, option=value, ...?); &googlemaps_icon(name, image, shadowimage, imagesize_w, imagesize_h, shadowsize_w, shadowsize_h ?, option=value, ...?);
formatlistとformatinfoは%title%と%caption%と%image%の文字列を各マーカーのそれに置き換える。
例文:
<b>%title%</b> - %caption% <b>%title%</b><br><div style='width:200px;'><span style='float:left;'>%image%</span>%caption%</div>
しばらくメンテをほっといたら座標系がいつのまにか変っていたので次のような
TclスクリプトでPukiwikiのドキュメントを修正した。Pukiwikiのプラグインは
何も変更していない。mpexprは任意桁数で計算できるライブラリで、ちょっと
Tclのデフォでの精度に不安があったので使ってみた。それだけ。
package require Mpexpr set str [read stdin] proc trav {x y} { set x [mpexpr $x - $y * 0.000046038 - $x * 0.000083043 + 0.010040] set y [mpexpr $y - $y * 0.00010695 + $x * 0.000017464 + 0.00460170] return [list $x $y] } proc fmt {s1 s2 s3 s4} { foreach {s2 s4} [trav $s2 $s4] break return $s1$s2$s3$s4 } proc conv {str} { set q {(\&googlemaps_mark\()(\d*\.\d*)([^\d]*,[^\d]*)(\d*\.\d*)} foreach {s0 s1 s2 s3 s4} [regexp -inline -all -- $q $str] { set str [string map [list $s0 [fmt $s1 $s2 $s3 $s4]] $str] } return $str } puts [conv $str] exit
javascript:void(prompt('中心座標', "cx=" + googlemaps.getCenter().x + ", cy=" + googlemaps.getCenter().y) );