現在,訳あってWebで活用できる地図検索APIを調べている。地図検索APIとは,Web上のオンライン地図検索サービスが公開しているAPIのことだ。APIを使うことで,ユーザーは自分のWebページで地図を活用したアプリケーションを無償で作れる。Googleマップの「Google Maps API」がその代表例である。

 Googleに対抗して,米Microsoftが力を注いでいる検索サービス「Live Search」にも地図検索機能がある。国内でも2006年11月から日本語版(ベータ版)が利用可能になった。Live Search地図検索では,外部から利用可能なAPIをSDKという形で提供している。それがVirtual Earth SDKだ。

 しかし,Google Maps APIに比べると,Virtual Earth SDKの知名度は非常に低い。日本法人のマイクロソフトは,今年の1月からようやく開発者向けに情報提供を積極的に始めたばかりで,Web上にも活用例などの情報はまだ少ない。SDKでどの程度のことができるのか,実際に自分で触れてみた。

 Virtual Earthは,Live Search地図検索を実現するプラットフォームという位置付けになっている。Live Searchの画面上では,左上のロゴに小さく「powered by Virtual Earth Beta」と表示されている。

 Virtual Earth SDKの情報は,開発者向けのサイト「Windows Live Dev」にある。ここでVirtual Earth SDKのリンクをクリックすると,Virtual Earth Interactive SDKというページに飛ぶ。

 Virtual Earthが提供するSDKは,正確にはInternet Explorer上で動作するActiveXコントロール(Virtual Earth Map Control V4.0)の機能群だ。そのためVirtual Earth Interactive SDKは,Map Controlが提供するクラスやメソッドの詳細や,サンプル・アプリケーションとそのソースコードを参照できるオンライン型のリファレンス・ページになっている。

 SDKで利用可能な機能を一通り見てみると,Webページに地図を埋め込んで見せるという基本機能に加えて,ズーミング,表示位置の移動,地図と航空写真の切り替え,任意の位置に刺せるプッシュピン,地図上での線画──といったLive Search地図検索とほぼ同等の機能を使えることがわかる。

 さらに,地図を3Dで表示する機能や,2地点間の最短/最速経路探索を行うといった機能もある。しかし,これらは日本語版のLive Search地図検索ではまだサポートされていない。

 大まかに言えば,Virtual Earthは,Web上のGoogleマップと独立の地図ソフトであるGoogle Earthの機能をいくつか併せ持つものと言えよう。それをWebブラウザだけで実現している点が特徴であると同時に,実現可能なブラウザがInternet Explorerに限られるという弱点を持っている。

 Virtual Earth Interactive SDKのコードを参考にしながら,実際にサンプル・アプリケーションを作った。ここでは,あえてGoogle Maps APIがまだ備えていない経路探索の機能を使ってみた。

 リスト1は,弊社(港区白金1-17-3)を基準に,品川,目黒,恵比寿の各駅までの経路探索を行うサンプルだ。radio buttonでいずれかの駅を選択すると,各駅までの経路を表示する。しかし,前述の通り日本語版では経路探索機能をサポートしていないので,結果はすべてとんちんかんな道順になってしまう(図1)。


<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <script src=
  "http://dev.virtualearth.net/mapcontrol/v4/mapcontrol.js"></script>
  <script>
    var map = null;
    var MyLatLong0 = null;
    var MyLatLong1 = null;

    function GetMap()
    {
      map = new VEMap('myMap');
      MyLatLong0 = new VELatLong(35.644679, 139.734523);
      map.LoadMap(MyLatLong0, 16, 'h', false);
    }      

    function sta1click() {
      MyLatLong1 = new VELatLong(35.630151,139.74044);
      getRoute(MyLatLong0, MyLatLong1);
    }

    function sta2click() {
      MyLatLong1 = new VELatLong(35.633997,139.715828);
      getRoute(MyLatLong0, MyLatLong1);
    }

    function sta3click() {
      MyLatLong1 = new VELatLong(35.64669,139.710106);
      getRoute(MyLatLong0, MyLatLong1);
    }

    function getRoute(latlong1, latlong2)
    {
      map.GetRoute(latlong1,
                   latlong2,
                   VEDistanceUnit.Kilometers,
                   VERouteType.Quickest);
    }
  </script>
  </head>
  <body onload="GetMap();">
    <p>
    <input type="radio" onClick="sta1click()">品川駅&nbsp;&nbsp;
    <input type="radio" onClick="sta2click()">目黒駅&nbsp;&nbsp;
    <input type="radio" onClick="sta3click()">恵比寿駅
    </p>
    <div id='myMap'
         style="position:relative; width:800px; height:500px;">
    </div>
  </body>
</html>
リスト1●Virtual Earth SDKを使ったサンプル・アプリケーション

図1●サンプル・アプリケーションの実行画面
図1●サンプル・アプリケーションの実行画面
[画像のクリックで拡大表示]

 コードを見ればわかるように,最初にLoadMapメソッドで地図を表示し,GetRouteメソッドで2地点間のルート探索を行っているだけだ。地図検索APIは,簡単なコーディングでインタラクティブなアプリケーションをさっと作れるところがおもしろい。特に,GetRouteメソッドは日本語版で正式に使えるようになったら,何かと使い出がありそうだ。

 しかし,地図の特定の位置を指定するのに,経度/緯度を度形式(35.630151といった値)で指定しなければならないのはやっかいだ。あらかじめ弊社や各駅の経度/緯度を調べておく必要がある。やはり,Google Maps APIのように,住所から緯度/経度を割り出すジオコーディングの機能が欲しい(日本語では試せないが,GetRouteメソッドは2地点を地名などで指定することができるようだ)。

 Google Maps APIの機能や開発事例の豊富さを考えると,今あえてVirtual Earth SDKを使う必要性はあまりないかもしれない。特に日本語環境では,目玉になる3D表示や経路探索がまだ使えないのが痛い。

 とはいえ,現状でも「Virtual Earth Tour Editor」のように,ユニークなサンプル・アプリケーションも作れる。要は,アイディア次第ということだ。地図検索APIについては,今後も注意深くウォッチしていきたいと思う。