Virtual Earthを利用した地図アプリケーション(その2)
日経ソフトウェアの記事(作ってビックリ!Visual Basic, こだかかおる、pp.130、2008年7月号)に基づいて、VBの代わりにwxPythonで同じものを作っている。
- 前回までやったこと
- Virtual Earth APIはJavaScriptで呼び出すものであり、その部分を記述したHTMLファイルはダウンロードできるものをそのまま使う(ファイル名ve.html。http://itpro.nikkeibp.co.jp/article/MAG/20071120/287618/?ST=nsw#200807のvb0807.lzhを展開)。
- wxPythonでウィジェットを配置し、アプリケーションの外枠を作成した。
- 地図の表示はできた。
- ボタンを押したときや、文字を入力したときのイベントは何も定義していない。
JavaScriptの関数を、関数が定義されているファイルの外からどう実行すればいいのかが検討もつかなかったのでいろいろと試してみた。
すると、ve.htmlファイルを直接ブラウザで読み込んでURLを入力する部分に
javascript:setMapStyle('a')
と入力したところ、地図の表示が変わることに偶然気づく。
ああ、こうやればいいのだな、と感心しつつ、ファイルMainFrame.pyのmapStyle関数のところを以下のように書き換えた。
def mapStyle(self, style): buf = "javascript:setMapStyle('%s')" % style self.ie.LoadUrl(buf)
こうして起動すると、”道路”、”航空写真”、”ハイブリッド”のボタンで地図の表示が切り替わる。”概観図”は3D表示を意味していて、特定の都市でしか機能しないようであるからかこのボタンを押しても何も起こらない。
同様に、"ZoomIn"、"ZoomOut"ボタンを押したときの処理も行えるように、MainFrame.pyの中の関数を以下のように修正する。
def OnZoomOut(self, event): buf = "javascript:setZoomLevel(0)" self.ie.LoadUrl(buf) def OnZoomIn(self, event): buf = "javascript:setZoomLevel(1)" self.ie.LoadUrl(buf)