Pin It On The Earth!: Googleマップで閲覧中の地点をGoogle EarthにマップするBookmarklet
Google マップの任意の地点を閲覧中に、その地点に対応するGoogle Earth上の地点を表示するBookmarkletを作ってみました。具体的にはGoogleマップから得られる緯度・経度情報を使って、gmaps2kml.cgiでKML(Google Earth KML Documentation)を生成し、それをGoogle Earthが読み込んでPlacemarkとして表示するというシカケです。もちろんKMLファイルとして保存してWebページで公開したりする目的にも使用できます。
測地系の変換には、Nowral様(02 DATUM)の「測地系パラメタを使う方法」のスクリプトを利用させていただきました。
Pin It On The Earth! (2005-07-31更新)
上記の「Pin It On The Earth!」リンクをブラウザのメニューバーなどにDrag&Dropするか、右クリックで「お気に入りに追加」するかしてBookmarkletを保存します。
使い方
- GoogleマップでGoogle Earthにマップしたい場所を表示し、メニューバーの「Pin It On The Earth!」Bookmarkletをクリックします。
- 説明を入力するためのプロンプトが表示されるので入力します。デフォルトではBookmarkletを実行したウィンドウのタイトルが入力されているので適宜書き換えてください。
- ほどなくファイルをGoogle Earthで開くかどうか聞かれるので開きます。下の画像は英語版のFirefoxでの表示です(ブラウザによって表示は異なります)。
- (゚Д゚)ウマー メイン画面にはGoogleマップで見ていた場所が表示され、左側のPlacesメニューのTemporary Placesにその場所が追加されます。
注意点
- 外部のページを呼び出している関係上、Microsoft Internet Explorer 6 SP2などでは警告が出てうまく使えない可能性があります。回避する方法はありますが説明は省略します。
更新履歴
- とりあえず公開。
- プロンプトを表示してPlacemark用ラベルを入力できるように動作を変更。
gmaps2kml.cgiについて
gmaps2kml.cgiは「ll=緯度(10進),経度(10進)」というオプションを与えるとKMLを返す単純なCGIスクリプトです。Googleマップに限らず汎用に使えます。
デフォルトでは与えられた緯度が30~50度かつ経度が115~152度のとき、日本測地系(Tokyo)のデータとみなしてWGS 84測地系に変換してKMLを出力します。それ以外のときは変換せずに出力します。「mode=tky」というオプションを与えると緯度・経度に関わらず日本測地系(Tokyo)のデータとみなしてWGS 84測地系に変換してKMLを出力します。「mode=wgs」というオプションを与えると緯度・経度に関わらずWGS 84測地系のデータとみなして変換せずにKMLを出力します。
その他のオプション:
- r=URL
Google EarthのPlacemarkからそのURLへのリンクを生成することができます。このオプションが指定されると、以下のdescription要素を含んだKMLが出力されます。<description><![CDATA[<a href="URL">Original Map Location</a>]]></description>
「Pin It On The Earth!」Bookmarkletでは座標情報の取得に用いたURLが格納されるようになっています。 - t=String
Placemarkの表示名を設定することができます。このオプションが指定されると、以下のname要素を含んだKMLが出力されます。<name>String</name>
デフォルトでは「Pin It On The Earth!」という文字列が設定されます。
ちなみに、llオプションを与えない場合にはGoogle Maps APIを使って表示された地図上の点からKMLを生成することができます。一般的にはこっちの方が有意義なのかな?
このエントリーのトラックバックURL: http://as-is.net/mt/mt-tb.cgi/298
突然のメール恐縮致します。
この「Pin It On The Earth!」を使用させて頂きました。
そこで、一つ質問をさせて頂きたく思います。
このサイトでは、Googel Maps からkmlファイルを自動生成するプログラムを作成されていることと思います。
このスクリプトを、中のCGIのものも合わせて教えて頂けませんでしょうか?
Google Earthに興味を持ち、このサイトを見つけ、自分も作ってみたいと思い、いろいろ調べましたが、プログラム自体ほとんど未経験なため、見当が付きませんでした。不躾な質問で大変恐縮ですが、よろしくお願い致します。
http://code.as-is.net/svn/public/gmaps2kml/trunk/gmaps2kml.cgi
に見つかります。
このエントリーを書いたときにはGoogle MapsとEarthの測地系が異なっていたのでその変換処理が含まれていますが、現在では必要ありません。
早速対応して頂きありがとうございました。お礼が送れたことを、改めてお詫び致します。すいませんでした。
cgiスクリプトをダウンロードさせて頂き、ローカルにてテストを行いました。
その際にcgiでは、「Pin It On The Earth!」と同じ画面になるのですが、google earthが再生されない状態になりました。
また、「Pin It On The Earth!」のソースをhtmlで再生すると、google earthは立ち上がるのですが、google mapで指定したポイントを取得することが出来ません。
分かる範囲で、cgiスクリプトを修正したのですが、他に直すべきところはありますでしょうか?
教えて頂いた上に、さらに質問を繰り返すことになり、誠に恐縮ですが、是非ともこのプログラムを使用したいと思っておりますので、何卒よろしくお願い申し上げます。
連続で申し訳ありません。
ローカルでのテストは、AN HTTPDというプログラムを使用して行いました。
「Pin It On The Earth!」をweb上で使用させて頂くと、kmlファイルが「C:\DOCUME\~\LOCAL\TEMPOR\Content.IE5」に保存され、それを自動で実行させることで、GEを起動させているのではないかと考えています。
その場合、ローカルでのテストだと、先ほどのフォルダにkmlが作成されないために、GEは起動するものの、ポイントが取得されないのではないかと考えているのですが、如何でしょうか?
重ね重ね、本当に申し訳ありませんが、よろしくお願い申し上げます。
まずコマンドラインから
gmaps2kml.cgi ll=99,100
とか実行してみて、正しいContent-typeとkmlが表示されるかどうか確認してください。
早速のご回答ありがとうございます。
仰られているコマンドラインというのが、よく分からなかったので、コマンドプロンプトから、ファイルの実行を行いましたが、そのファイルをテキストで表示するだけでした。
上記のURLから頂いたcgiスクリプトのGoogle Map api のkeyだけを変更してテストしてみたのですが、全く同じ結果です。
何度も何度も本当に恐縮致しますが、何卒ご教授頂けますようお願い申し上げます。
>コマンドプロンプトから、ファイルの実行を行いましたが、そのファイルをテキストで表示するだけでした。
何だかよく分かりませんが、もしそうであれば明白に実行されていないわけです。AN HTTPDでCGIスクリプトを正しく動かす方法を調べられたらいかがでしょう。ご自分でPerlのCGIスクリプトを作って動作させられるかどうか確認した方がよいでしょう。
一般的に個別の実行環境に関わる質問は答えかねますし、このスクリプトの内容とは無関係な質問なんじゃないかなと思っています。
ご返答ありがとうございます。
仰られる通りでございます。本当に失礼致しました。
AN HTTPDでの簡単なcgiスクリプトの実行は確認が出来ています。以後、perl,cgi等しっかり勉強させて頂きます。
無知な私にお付き合い頂き、本当にありがとうございました。また、ご迷惑をお掛けしましたこと、深くお詫び申し上げます。