まずは、地図を表示してみましょう。Android Mapsを使用するうえで必要な手順は、以下の通りです。
Android MapsはGoogleの拡張APIなので、ターゲットはGoogle APIsに設定する必要があります。
今回は、最新のAndroid 2.1を使用していますが、Android MapsはAPI Level 4なので、少なくともAndroid 1.6以上を指定する必要があります。
AndroidManifest.xmlには以下、4つの設定が必要です。
<?xml version="1.0" encoding="utf-8"?> <manifest ...> <application ...> <uses-library android:name="com.google.android.maps" /><!-- 【1】 --> </application> <uses-permission android:name="android.permission.INTERNET" /><!-- 【2】 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/><!-- 【3】 --> <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/><!-- 【4】 --> </manifest>
上記の【3】【4】は、厳密にはAndroid Mapsではなく、今回Android Mapsと組み合わせて使用したロケーションサービスのための設定ですが、組み合わせて使用することが多いと思いますので、紹介しておきます。
あらかじめ取得しておいたAndroid Maps API Keyをアプリに埋め込みます。今回は複数のActivityで使いまわすので、strings.xmlに埋め込んであります。
Android Mapsを使用するためには通常のActivityではなくMapActivityクラスを継承する必要があります。
MapActivityは抽象メソッドが1つ定義されていて、それを実装しなければなりません。
メソッド | 処理概要 |
---|---|
abstract boolean isRouteDisplayed() | ルート情報を表示しているならtrueを返す |
boolean isLocationDisplayed() | 位置情報を表示しているならtrueを返す |
表2 MapActivityのメソッド |
上記表はMapActivityに定義されているメソッドです。1つは抽象メソッドなので、必ず実装しなければなりません。ルート情報の詳細について調べてみましたが、Javadocの以下の説明以上の情報がありません。
ルート情報は例えば走行方向などなのですが、Android Mapsには走行方向が分かる機能が用意されているわけではなく、こうしたルート情報は自前で実装し、それを表示しているかどうかを返す、ということのようです。後述する「Google Maps Navigation」向けの機能のようにも思えます。
説明の最後のTODOで「リンクを貼る」と書かれているので、Javadocが更新されれば詳細が分かるかもしれません。
位置情報は、後述するMyLocationOverlayを使用して表示する場合は、自動的に適切な値が返されるように実装されていますが、独自の位置情報表示を行っている場合、メソッドをオーバーライドして適切な値を返す必要があります。
MapViewの作成方法は、XMLでレイアウトを定義する方法と、Javaでコーディングする方法があります。
<?xml version="1.0" encoding="utf-8"?> <com.google.android.maps.MapView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:apiKey="@string/map_key" />
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.map); }
上記はレイアウトをXMLで定義し、Javaからレイアウトを読み出す方法です。
以下はJavaでコーディングを行う例です。
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MapView mapView = new MapView(this, getResources().getString(R.string.map_key)); setContentView(mapView); }
今回のほとんどのサンプルは簡単のためJavaでコーディングを行う方法を採用しています。
実行すると、以下のように地図が表示されます。
Android Mapsには、簡単で効果的な設定がいくつか存在します。
メソッド | 説明 |
---|---|
setTraffic(boolean)/isTraffic() | 交通量を表示/表示しているかどうかを取得 |
setStreetView(boolean)/isStreetView() | ストリートビューを表示/表示しているかどうかを取得 |
setSatellite(boolean)/isSatellite() | 衛星写真で表示/表示しているかどうかを取得 |
表3 MapViewの表示切り替えメソッド |
これらのメソッドで注意しなければならない点は、以下の4つです。
交通量は、時間帯を変えて表示し直すと、情報が変化しているため、リアルタイム性を持っていることが分かります。
表示色についての説明は特にありませんが、緑が少なく、赤が多いと見てよいと思います。現在は米国に限定され、交通量情報は主要なルートに限定されるようですが、これはとても便利なサービスです。
Android Mapsでは、「MapController」という便利なクラスが提供されています。
MapControllerを使用したアニメーション |
地図の拡大・縮小、特定の座標へ移動、特定のピクセル座標へのスクロール、キーイベントの取得などが主な機能です。上動画では拡大・縮小と特定座標への移動を行っています。
それでは、次ページより地図上にマーカーを指定したり、GPSで自身の位置情報を取得したりする方法を詳しく見ていきましょう。
Android Mapsにこれだけの機能があれば、カーナビゲーションシステムが作れるのではないか、と想像するのは難しくありませんが、すでにグーグルが「Google Maps Navigation (Beta)」を提供しています。
このGoogle Maps Navigation (Beta)は音声ガイド、音声サーチ、リアルタイム渋滞情報、ルート探索など、カーナビに必要な機能は一通り備えています。そのほか、実際のストリートビューによる表示が利用可能です。
このカーナビのダウンロードとサービスの利用は無料です。さすがはグーグル、というべきでしょう。
現在はβ版で、米国のみのサービスですが、日本やそのほかの国でも普及していくであろうと筆者は考えています。
Copyright © ITmedia, Inc. All Rights Reserved.