ホリデープログラミング。思わず夜更かし。
Google Maps APIを用いて地図上に線を引いて(クリックしていくと直線が引けます)Saveボタンを押すと固有のURLを作って保存することができます。渋谷の~って飲み屋で待ち合わせ、が、詳細な地図がない、というときにルートを書いてメールでURLを送れます。
Mapsにクリックして直線を引く方法はAhn Dal-Sooさんの日記を参考にさせていただいました。GPolylineというAPIの関数を使います。
JavaScriptから線の各頂点の座標を保存する際にXMLHttpRequestのPOSTで送るのですが書式にJSONを使ってみました。PHPはPEARのServices_JSONを利用。JavaScript部分はdumpだけですが「JKL.ParseXML – XML→JSON展開クラス」を利用させていただきました。簡単なデータの受け渡しはGETで十分ですが、複雑なときはJSONが便利そうです。
PHPで保存する部分では普段あまり使わないob_start()を使ってソースコード中にHTMLを書きやすくしてみました。ソースも公開しておきます。(save.phps)
2008年3月24日追記:
save.phpsは問題のあるコードだったので少し修正しました。
5 Comments
あ、これ印刷はできないんですね。残念。
Google Map Line Saver は とても便利なツールですね。僕は今、ユーザーが自転車のルートをGoogle Mapに書きその地図をURLに保存し友達などにそれを送れるようなサイトを作ろうと思っていて、ネットで参考にできるような物があるか探していたのですが、なかなか良い物が見つからなくて悩んでいました。このGoogle Map Line Saverは間違いなく、一番よい参考です。GMLSがどのようにプログラムされているか、このサイトの説明を読んで自分で出来るかどうか試して見たのですがうまく行きませんでした。Gpolylineで線を描くのは出来るのですが、保存するためにSaveボタンを押しても何も起こりません。これはきっと僕のJSONとJKL.ParseXMLの利用のしかたが多分間違っているからだと思います。
HTMLはGMLSのページのソースから、PHPは公開してあるSave.phpから、JSON.phpは公開してあるPEARのServices_JSONリンクから、そしてJavaScript部分はjkl-parsexmlを公開してあるJKL.ParseXML – XML→JSON展開クラスから利用したのですが何故かうまく行きません。
船木さん、GMLSをどのようにプログラムするかこのサイトかメールで、詳しく説明していただけませんか? もしできたら、ものすごく助かります。ありがとうございます。
ご利用ありがとうございます!
PHPのエラーメッセージが出ていないか(ini_set(‘display_errors’, 1);)保存するディレクトリのパーミッションが777か、確認してみてください。
なお、お使いのPHPのバージョンが5.2以降ならJSONのパーサは
http://jp.php.net/manual/ja/ref.json.php
こちらを使うことをお勧めします。
Saveボタンのあるindex.htmlのJavaScriptのBASE_PATHなどはご自身のサイトで動かす場合には変える必要があります。
ご返事どうもありがとうございます。
PHPのエラーメッセージは出ませんし、ページを保存するディレクトリ(/tmp/)のパーミッションも777にセットしましたが結局なにもおきませんでした。それとhttp://jp.php.net/manual/ja/ref.json.phpに行ったのですがJSONの経験があまりないため、どのリンクでどのファイルをダウンロードしたら良いのかが良く分からないため、また船木さんのアドバイスが必要です! あともう一つ、公開してある Save.phpsのソースが少し変わったのに気が付いたのですが、新しいバージョンの方が良いのですか?
忙しい中ご迷惑かけてどうもすみませんが、もう一度アソバイスくださいますか?ありがとうございます。
古いソースだったので少し修正を加えました。
新しいバージョンの方がよいかと思います。
JSONの拡張はPHP5.2.xだと標準で入っていたような気がします。
よくわからなければ、PEARでも動きますんでまずはPEARでやってみてください。
あとはどこまで動いているか、printデバッグなどを駆使して試してみてください。
サポートセンターではないのでこの辺で!
One Trackback
Google Maps Line Saver
昨日のお散歩ルートをGoogle Mapsで表現できないか、確かそんなサイトがあったなぁと思いつつ、ありました、Google Maps Line Saver
。
そこで早速、昨日のルートを起こすとこんなカンジ…