Aug 12, 2005

Ajaxを使ってKMLをGoogle Maps上にマップする

今度はAjaxを使ってKMLをGoogle Maps上にマップしてみました。

kml2gmaps.html: Maps KML file onto Google Maps

上記のURLにアクセスするとサンプルKMLファイルをAjaxを使って読み込み、Google Maps APIを使ってマップ表示します。また、下のように「?url=」に続いてKMLファイルのURLを指定すればそのファイルをマップ表示します。

http://as-is.net/maps/kml2gmaps.html?url=http://as-is.net/maps/sample2.kml

Ogawa::Buzz: georss2kml.cgi: GeoRSSをGoogle Earthにマップするスクリプトを中継に使うことで、GeoRSSをGoogle Maps上にマップすることもできます。

http://as-is.net/maps/kml2gmaps.html?url=http://as-is.net/maps/georss2kml.cgi?url=(以下省略)

注意点

上記のkml2gmaps.htmlは自由に再利用していただいて構いませんが、Hawk's W3 Laboratory : XML : XMLHttpRequestについてで詳しく解説されているように、XMLHttpRequestを使って読み込むURLには主に以下のような制約があります。

  • 同一ホスト、ポートのリソースしか取得できない。
  • Content-Typeとしてtext/xml, application/xmlを返すリソースしかDOMDocumentに変換できない(場合がある)。

このため、この条件を満たさないKMLファイルを利用するには、kml2gmaps.htmlと同一のホスト、ポートを用いる適当なプロキシーを用意する必要があります。kml2gmaps.htmlの場合には以下の簡単なスクリプトを作って使っています。

http://as-is.net/maps/aproxy.cgi?src=1

まとめ

察しのよい方は気が付いているかもしれませんが、私がOgawa::Buzz: Pin It On The Earth!: Googleマップで閲覧中の地点を Google Earth にマップするBookmarkletOgawa::Buzz: georss2kml.cgi: GeoRSSをGoogle Earthにマップするスクリプト、そしてこのエントリーで確認したかったのは、

  • KML(Google Earth KML Documentation)は汎用の(つまり出力系に依存しない)地理情報アノテーションを実現する言語である
  • 優れたKMLエディタ/ツール(典型的にはGoogle Earth)さえあれば、わざわざ他のデータ形式を考案したり、それに特化したエディタ/ツールを作る必要はない

ということでした。部分的には確認できたのではないかと思います。さらにKMLの記述の柔軟性(曖昧性)を逆手に取ってKMLファイル内にプログラムを記述し、ブラウザ(アプリ)側でevalことで、場所に即した振る舞いをするアプリも容易に実現できるでしょう。

2006-03-16追記

入力のKMLのLookAt要素に含まれるlongitude, latitudeだけを見ていたため、一部のKMLで正常に動作していませんでした。Point要素があればその値を使い、なければLookAt要素に含まれる座標情報を使うように動作を変更することでこの問題に対処したつもりです。

About Me

My Photo

つくばで働く研究者

Total Pageviews

Amazon

Copyright 2012 Ogawa::Buzz | Powered by Blogger
Design by Web2feel | Blogger Template by NewBloggerThemes.com