2006-08-03

wp-eznavi 新バージョンは動いた

yuriko による 04:05:56 の投稿
カテゴリー: WordPressハック,サイト更新情報
タグ: ,

wp-eznavi の新バージョンが出ていたので、入れてみました。
前バージョンは、測地系の判定をせずに強引に日本測地系と見做して変換していたので、世界測地系の GPS データーをモブログするとマーク位置がずれてしまう問題がありましたが新バージョンは測地系をきちんと判断するようになりました。

ただし、GPS 情報 URL のプラス記号 (+) が URL エンコードされている (%2b) ことを仮定しているようで、わたしの投稿のようにエンコードされていないプラス記号では、緯度・経度情報がうまく抽出できないようです。preg_match 関数の正規表現と、マッチ部分の取り出し処理をいじってプラス記号の場合にも対応させました。修正は以下の通りです。

38c38
< if ($latlng != "") {
---
> 		if ($latlng != "" && $latlng != ",") {
58c58
< if(preg_match("#http://walk\\.eznavi\\.jp/map/\\?datum=(\\d)+&unit=
\\d+&lat=%2b(-?\\d+)\\.(\\d+)\\.([.\\d]+)&lon=%2b(-?\\d+)\\.(\\d+)\\.([.\\d]+)
&fm=\\d+#", $content, $arr)) {
---
> 		if (preg_match("#http://walk\\.eznavi\\.jp/map/\\?
datum=(\\d+)&unit=\\d+&lat=(%2[bB]|\\+)(-?\\d+)\\.(\\d+)\\.([.\\d]+)&lon=
(%2[bB]|\\+)(-?\\d+)\\.(\\d+)\\.([.\\d]+)&fm=\\d+#", $content, $arr)) {
60,65c60,65
< $n = $arr[2];
< 			$nm = $arr[3];
< 			$ns = $arr[4];
< 			$e = $arr[5];
< 			$em = $arr[6];
< 			$es = $arr[7];
---
> 			$n = $arr[3];
> 			$nm = $arr[4];
> 			$ns = $arr[5];
> 			$e = $arr[7];
> 			$em = $arr[8];
> 			$es = $arr[9];

この修正により、問題なくプラグインが動作するようになりました。GPS 情報 URL が含まれている投稿を編集してみると、プラグインによって緯度・経度が抽出され、地図ページにマークが打たれました!! ここまで見事に移動した場所のマークが打たれると感動ですね〜〜。

あとは、Instant Googlemap Plugin をハックして、「最後にマークが打たれた場所を中心として表示させる」ようにしたいです。現在は、地図ページを表示させたときの中心位置と縮尺はオプションで指定した固定位置なので、日本全体が入るような縮尺と、自宅付近を中心にせざるを得ず、それではおもしろくありませんから……。

追記: 掲載ソースでバックスラッシュが見えてなかったので、見えるように修正しました。

コメント・ピン通知 »

  1.  「wp-eznavi」作者のSa・Gaと申します。
     拙作プラグインを使っていただいているばかりか、ソースの修正もおこなっていただき、ありがとうございます。

     ご指摘の件、全く持ってお恥ずかしい限りです。
     少しだけ言い訳いたしますと、実は自分の周りでWordPressを使っている人間が誰もおらず、自分以外にデバッグを頼める人間がいなかったために、実機では実は「W41H」でしか確認を取れていませんでした。

     どうやら記事投稿のときにエスケープが消失してしまっているようですが、「d+」を「\d+」と読み替えればうまくいくようです(ちなみに「\」は本当は半角のバックスラッシュ)。

     あと、たまたまEZナビでは日本国外については全くサポートしていないので実害はないのですが、例のプラス記号の箇所について、「南緯」や「西経」を表現するときはマイナスになるのではと思われます。

     今回ご指摘いただきましたyuriko様のコードに、このあたりも(念のため)修正を施した上で、「wp-eznavi」の次のヴァージョンにマージさせていただきたいと思いますが、よろしいでしょうか?

     最後になりましたが、貴重なご指摘、本当にありがとうございました。
     また不具合点やご意見などございましたら、是非ともご一報いただきたいと思います。

    Sa・GaからのComment — 2006-08-03 (木曜日) @ 21:54:39
  2. 【WordPress ME】初めての自作プラグイン「wp-n…

     先日より作成構想を練っておりました、はじめての自作WordPressプラグインが、ようやく日の目を見ることになりました。
     その名も「wp-navi」(仮称)。
     「 (more…)

    TSJ付゛録゛IIからのトラックバック — 2006-08-03 (木曜日) @ 21:55:27
  3. あとは、Instant Googlemap Plugin をハックして、「最後にマークが打たれた場所を中心として表示させる」ようにしたいです。

     私自身はまだ試していないのですが、恐らくは「Instant Googlemap Plugin」のソースは1行たりとも書き換えずに実現可能でしょう。

     「wp-eznavi」の「function getLatLongData($content)」メソッド内で緯度・経度情報をreturnしている箇所(76行目や79行目のあたり)の手前で、

    update_option(‘yf_default_latitude’, $緯度);
    update_option(‘yf_default_longitude’, $経度);

    という記述を追加すれば行けそうな気がします。
     要は、「wp-eznavi」で緯度・経度情報を記録するタイミングで、「Instant Googlemap Plugin」の初期位置も無理矢理書き換えてしまおうということですね。

     よろしければお試しください。

    Sa・GaからのComment — 2006-08-03 (木曜日) @ 22:37:09
  4. 作者さまにお越しいただきまして、わざわざありがとうございます。

    どうやら記事投稿のときにエスケープが消失してしまっているようですが

    ごめんなさい。バックスラッシュは消されてしまうようですね。バックスラッシュを2重にして表示されるように修正しました。

    今回ご指摘いただきましたyuriko様のコードに、このあたりも(念のため)修正を施した上で、「wp-eznavi」の次のヴァージョンにマージさせていただきたいと思いますが、よろしいでしょうか?

    はい、全くかまいません。バプリックドメインとして権利を放棄いたしますです。マイナスも有効にするならば、(%2[bB]|[-+])するのがよいと思います。手元ではこの修正をしてみて運用してみます。

    update_option(’yf_default_latitude’, $緯度);
    update_option(’yf_default_longitude’, $経度);

    なるほど、これが簡単そうですね。今回は39行目の $this->updateDB() の後に挿入してみました。少し間抜けなものの、explode 関数で $latlng を緯度、経度に分割してから update_option() を実行させることにしました。こうすれば、他キャリアへの展開時は getLatLongDataEznavi(), getLatLongDataIMapFan(), getLatLongDataMapion() などと関数を増やせそうですから。

    そうそう、他キャリアへの展開ですが、iエリアの位置情報メールは比較的簡単そうです。地図を提供する IP によって URL 形式が違うものの (iMapFan, Mapion, ちず丸 etc)、それに対応した正規表現を書くだけです。ただし、GPS 非搭載の端末で i エリアの地図表示をさせた場合は、現在位置ではなく最寄りのランドマーク (駅など) の位置が出てくるため、実際にはちょっと不便かもしれません。

    WILLCOM の位置情報は、ウェブ経由でしか取得できなさそうなので、AIR-EDGE PHONE のフルブラウザで投稿したら自動的に位置情報が挿入されるプラグインを別途作る方がよさそうです。

    [追記] http://www.kit.hi-ho.ne.jp/t-sonoda/eznavi/ によると、au は端末によって、度分秒表記 (nn.nn.nn.nn) と百分率表記 (nn.nnnnnn) の両方あるようです。現在の wp-eznavi は度分秒表記と仮定しているので、百分率表記の場合も OK のように改善する必要がありそうです。

    yurikoからのComment — 2006-08-04 (金曜日) @ 01:09:57
  5.  大変返事が遅くなってしまい申し訳ありません。
     これから次ヴァージョン作成に着手します。
    #  今日中に作らんと明朝の電車撮影に影響が出る・・・。

    はい、全くかまいません。バプリックドメインとして権利を放棄いたしますです。マイナスも有効にするならば、(%2[bB]|[-+])するのがよいと思います。手元ではこの修正をしてみて運用してみます。

     ありがとうございます。それではお言葉に甘えさせていただきます。
     マイナスですが、たぶんこの文字がURLエンコードされることはないのでしょうけど(プラスは特殊な意味があるので仕方がない)、念のためこっちについてもエンコード済みも想定した出力にしてみることにします。

    少し間抜けなものの、explode 関数で $latlng を緯度、経度に分割してから update_option() を実行させることにしました。

     今はそのままこの戻り値をreturnするという前提ですのでこの様にしてしまっていますが、二次加工のことも考えると、配列にするとか、出力用の引数(PHPでこんなことできましたっけ?)を用意するとかしたほうがよろしいでしょうかねぇ?

    他キャリアへの展開時

     自分自身はW41Hしか持っておりませんので、これについては他の方にお願いするほかはないかも知れませんね。
     とりあえず仕様さえわかれば「実装」はできるとは思いますけど、実機での投稿をふまえた「確認」はどうあがいても不可能です。

    [追記] http://www.kit.hi-ho.ne.jp/t-sonoda/eznavi/ によると、au は端末によって、度分秒表記 (nn.nn.nn.nn) と百分率表記 (nn.nnnnnn) の両方あるようです。現在の wp-eznavi は度分秒表記と仮定しているので、百分率表記の場合も OK のように改善する必要がありそうです。

     どうも恐れていたことが起こってしまったようですね。

     このあたりも参考にさせていただきます。ありがとうございました。

     できあがりましたらまたご連絡させていただきます。

    Sa・GaからのComment — 2006-08-05 (土曜日) @ 13:35:08
  6. 【WordPress ME】「wp-eznavi」ヴァージョ…

     拙作WordPressプラグイン「wp-eznavi」につきまして、先ほどヴァージョン0.4としてリリースいたしました。
    ●wp-eznavi @ WordPress (more…)

    TSJ付゛録゛IIからのトラックバック — 2006-08-05 (土曜日) @ 20:26:25
  7. 今はそのままこの戻り値をreturnするという前提ですのでこの様にしてしまっていますが、二次加工のことも考えると、配列にするとか、出力用の引数(PHPでこんなことできましたっけ?)を用意するとかしたほうがよろしいでしょうかねぇ?

    わたしのセンス的には、array($lat, $lon)を返り値にして、呼出し元では list($lat, $lon) で受けるのが素直だと思います。array('lat' =>$lat, 'lon' => $lon)を返り値にする手もありますね。

    iエリアで、iMacFan, iマピオン, ゼンリンの地図を表示させるときの URL を調べましたので、それを読み取るルーチンを組み込んだものを作りました。別エントリに書きましたので、見てみてください。

    yurikoからのComment — 2006-08-06 (日曜日) @ 12:54:15
※スパム対策プラグインの影響により、すぐにトラックバックが反映されない場合があります。お手数ですが、半日ほど待ってみてください。

上に戻る

コメント投稿

※発言の責任を明確にするため「名無し」「通りすがり」「匿名希望」等の匿名は不可とします。捨てハンドルでもいいので必ず名乗ってください。
XHTML (使えるタグ): <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <img localsrc="" alt=""> .
※スパム対策プラグインの影響により、すぐにコメント内容が表示されない場合があります。お手数ですが、半日ほど待ってみてください。

上に戻る