map2earth の説明

Yahoo!地図情報などの地図サイトから Google Earth に位置を指定する kml ファイルを出力するスクリプトの説明です。

takanori

Google Earth は 3D 画像で世界中の衛星写真を参照できるすごいアプリケーションです。

ですが、日本国内の場所を探そうとすると Google Maps のときと同様になかなか場所がわからなくて面倒です。

そこで、日本国内の Web の地図情報から、簡単に Google Earth で同じ場所を表示する仕組みを作ってみました。

目次

使い方[usage]

使い方は簡単なんですが、IE のセキュリティ関係の確認とかについて書いていると長くなっちゃいました。

  1. まず最初に、下のリンク(map2earth Boolmarklet)の上で右クリックして、ブックマーク(またはお気に入り)として登録します。
    これを登録→map2earth
    Add map2earth bookmarklet
  2. IE の場合「セキュリティの警告」が表示されますが、このスクリプトでは現在表示している地図画面の URL を送るだけなので、気にせず「はい(Y)」をクリックして登録します。
    Security alert dialog
  3. ブックマークを追加する場所や名前を入力するための画面が表示されます。自分が使いやすい場所を指定して「OK」を押します。名前は「map2earth」のままでいいと思いますが必要なら変更します。
    Add bookmark dialog(IE)
  4. 次に、地図サイトにアクセスして、Google Earth で表示したい場所の地図を表示します。現在は以下の地図サイトに対応しています。 ここでは東京タワーの地図を表示してみました。
    Tokyo tower map
  5. 地図を表示した状態で、ブックマークから先ほど登録した map2earth bookmarklet を呼び出します。 Run map2earth bookmarklet
  6. IE の場合はここで「ポップアップのブロック」が行われる場合があるので、ポップアップできるように許可します。
    Allow popup
  7. またファイルのダウンロードに対しても、ブロックが行われる場合があるので、ここも許可します。
    Allow file download
  8. で、やっと kml ファイルのダウンロードダイアログが表示されます。今後も使用するのであれば「この種類のファイルであれば常に警告する」のチェックをはずしておきます。その後「開く」ボタンをクリックします。
    kml file download dialog
  9. kml ファイルが Google Earth と関連付けられていると、自動的にファイルが読み込まれて、指定した場所が表示されます。このように東京タワーの場所をびしっと表示してくれます。
    google earth screen
以上で使い方の説明は終わりです。Google Earth で色々表示させて楽しんでみてください。

動作[action]

ここでは、map2earth の基本的な動作の仕組みについて説明します。

1.ユーザが Web browser で地図を表示している。

2.map2earth Bookmarklet を実行する。

3.map2earth Bookmarklet は、地図画面から位置情報の入った URL を取得して、それを引数として http://takanory.net/misc/map2earth スクリプトに渡す。

4.map2earth スクリプトは受け取った URL を解釈して、位置情報を日本測地系(Tokyo)から、 Google Earth が使用している WGS 84 測地系に変換する。

5.map2earth スクリプトは Yahoo!地図情報にアクセスし、対象となっている場所の地名を取得する。

6.4. と 5. で作成したデータを下に、Google Earth に読み込ませる kml ファイルを作成して出力する。

7.Web browser は kml ファイルを受け取ると自動的に Google Earth にそのデータを渡し、Google Earth でその場所が表示される。

なお、このコードを使用する場合は、re と httplib を PythonScript から使用できるようにする必要があります。 そのためには PythonScript で標準以外のモジュールを使う の記述を参考にして、下記のコードを GlobalModules/__init__.py に追記してください。:

ModuleSecurityInfo('re').declarePublic('compile', 'findall',
  'match', 'search', 'split', 'sub', 'subn', 'error',
  'I', 'L', 'M', 'S', 'X')
import re
allow_type(type(re.compile('')))
allow_type(type(re.match('x','x')))

ModuleSecurityInfo('httplib').declarePublic('HTTPConnection')
ModuleSecurityInfo('httplib').declarePublic('HTTPResponse')
from httplib import HTTPConnection
from httplib import HTTPResponse
allow_class(HTTPConnection)
allow_class(HTTPResponse)

また、出力される KML のコードはこんな感じで、非常にシンプルです。:

<?xml version="1.0" encoding="UTF-8"?>

<kml xmlns="http://earth.google.com/kml/2.0">
<Placemark>
  <name>東京都豊島区西池袋3丁目</name>
  <View>
    <longitude>139.704071265</longitude>

    <latitude>35.7302483201</latitude>
    <range>1000</range>
  </View>
</Placemark>
</kml>

参考サイト[ref]

この map2earth を作成するのに参考にさせてもらったサイトです。

  • 02 DATUM 測地系を Tokyo から WGS 84 に変換する数式