マーカーで特定の位置を指定・表示するには
緯度経度を基に、地図上にマーカーを設置してみます。
![]() |
| 図7 東京タワーにマーカーを設置 |
- - PR -
中央付近に表示されている東京タワーに気球のマーカーを設置しました。影が付いたりしてなかなか気が利いています。
■ マーカーを設置する際のポイント
地図上に何かを描画したい場合は、Android Mapsで提供されている「Overlay」というクラスを使用します。
地図上に直接描画できないので、透明のレイヤを用意して、その上に描画します。Overlayを使用する場合、描画はすべて自前で行い、描画制御する必要がありますが、何でも描画できます。
![]() |
| 図8 オーバーレイのイメージ図 |
今回使用したのは、OverlayのサブクラスであるItemizedOverlayというクラスです。このクラスはOverlayItemに基付きレイヤ上に描画を行うクラスで、OverlayItemを適切に作成することで、描画は自動で行われます。OverlayItemには、マーカー画像、緯度、経度、そのほかの情報が保持されます。
OverlayItemを作成する際に必要なGeoPointクラスには、緯度と経度を渡しますが、このGeoPointクラスのコンストラクタに渡すlatitudeE6とlongitudeE6というのは、通常の緯度・経度の精度を1000000倍してintに直したものです。
例えば、東京駅の座標は以下のように作成します。
private static final GeoPoint TOKYO = new GeoPoint(
new Double(35.68198003744061 * 1E6).intValue(),
new Double(139.76609230041504 * 1E6).intValue());
■ ItemizedOverlayクラスの重要なメソッドのポイント
コンストラクタには、デフォルトのマーカー画像を設定する必要があります。マーカー画像を差し替えたい場合はOverlayItem#setMarker(Drawable)で個別に行います。マーカーとして渡すDrawableは、あらかじめsetBounds()を呼び出しておく必要があります。これを行わないと、レイヤ上に表示されません。
ItemizedOverlayは、polulate()メソッドを呼び出す必要があります。これが呼び出されると、size()メソッドが返すサイズ分だけcreateItem()が呼び出されOverlayItemがキャッシュされます。マーカーのどの位置にアンカーを置くかは、boundCenter()またはboundCenterBottom()で指定します。
| 表4 マーカーのアンカー指定 | ||||||||
|
マーカーを作成する際には制限があることに注意する必要があります。
ロケーションサービスと連携して現在位置を表示
Android Mapsは、GPSなどのロケーションサービスと連動させると、とても便利です。Android Mapsには、「MyLocationOverlay」というOverlayのサブクラスが用意されており、これを使用することで現在位置を簡単に表示できます。
package com.example.android.maps;
import android.location.LocationManager;
import android.os.Bundle;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.MyLocationOverlay;
public class Tracking extends MapActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final MapView mapView = new MapView(this, getResources().getString(R.string.map_key));
mapView.setEnabled(true);
mapView.setClickable(true);
mapView.setBuiltInZoomControls(true);
final MyLocationOverlay overlay =
new MyLocationOverlay(getApplicationContext(), mapView);
overlay.onProviderEnabled(LocationManager.GPS_PROVIDER); // GPS を使用する
overlay.enableMyLocation();
overlay.runOnFirstFix(new Runnable() {
@Override
public void run() {
mapView.getController().animateTo(
overlay.getMyLocation()); // 現在位置を自動追尾する
}
});
mapView.getOverlays().add(overlay);
mapView.invalidate();
setContentView(mapView);
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
}
たったこれだけのソースコードで、最初に紹介した動画のように動作します。
コラム 「エミュレータでの位置情報発信」 |
||||
エミュレータで位置情報を発信するには、ADTから位置情報を設定する必要があります。
ここでは緯度と経度を入力する必要があります。手軽な方法として、FirefoxまたはGoogle ChromeのブックマークレットとGoogleマップの組み合わせを紹介します。 位置情報を知りたい場所をGoogle Mapsで中央に表示します。その後、アドレスバーに以下のように入力すると、緯度と経度がプロンプトで表示されます。
上記方法は、Googleマップで簡単に位置情報を知る方法とブックマークレットで紹介されていた記事を参考にさせてもらいました。 また、連続して位置情報を送信したい場合は、GPXかKML形式のファイルを読み込ませると可能です。
今回使用したデータは、実際にGPSで計測したデータからKMLを作成しました。KMLはADTが読み込めるように加工しなければなりませんが、それを行ってくれるのが「Google Earth to Android ADT」です。 しかし、Google EarthからエクスポートしたKMLは「Google Earth to Android ADT」でADTが読み込める形式に変換できますが、例えばルートラボからダウンロードしたKMLは変換に失敗します。 ADTで必要になるKMLのフォーマットは非常に簡単なので、自分で加工した方が早いかもしれません。 AndroidMapsSample.kmlを公開するので、これを参考にしてみてください。 |
Android Mapsの強力さと簡単さが分かりましたか?
Android Mapsの強力さと簡単さを知ると、使用してみたくなりませんか。サンプルアプリの中には、今回紹介していない機能も含まれていますので、ダウンロードして動作させてみてください。
また、Android Mapsは機能が豊富なので、クラスやメソッドの詳細は、APIを参照してください。
■ @IT関連記事
| 本当はすごい、知られざるGoogle
Maps APIたち!! インタビュー特集:Google直伝!(3) 数多く存在するGoogle MapsのAPIや機能のうち、あまり知られていないものや新しいもの、とっておきをGoogle担当者に聞いた 「リッチクライアント
& 帳票」フ ォーラム 2009/5/21 |
||
| 商業利用もOK!
Google Mapsについて知りたいこと インタビュー特集:Google直伝!(2) Google Mapsライセンス担当者インタビュー。問い合わせの多い質問から順に、意外と知らない利用規約を分かりやすくお伝えする 「リッチクライアント
& 帳票」フ ォーラム 2009/5/11 |
||
| 位置情報を取得する仕組み 連載:位置情報を使ってみよう(1) 可能性の広がる位置推定技術。ケータイやカーナビ、モバイル端末での位置推定の仕組みを、具体的な製品や実装方法を交えて説明 「Master of IP Network」フ ォーラム 2009/2/12 |
||
| ブラウザで位置情報を取得してみよう 連載:位置情報を使ってみよう(2) PCのブラウザで位置情報を取得しよう。IPアドレスやWi-Fiの電波強度、Google MapsやJSONPの外部サービスとの連携方法も説明 「Master of IP Network」フ ォーラム 2009/6/19 |
||
| ケー タイアプリ事情−iPhoneからAndroidへの移植も ESEC2009イベントレポート 今回のテーマは“ケータイ”。話題のAndroidやiPhone向けアプリケーションの展示・デモンストレーションを行っていたブースを中心に紹介する |
||
| HTML+JavaScriptでiPhone/Androidアプリを作る Web技術でネイティブアプリを作れるTitanium(1) iPad/iPhone VS Androidに戸惑っているWebデザイナ/開発者のためにオープンソースの開発ツールを紹介します |
||
ケータイ分野以外の組み込みデバイス開発の現場でも注目を集めている「Android」。組み込みデバイスへの適用からアプリケーション開発、イベントレポート、ニュースなどAndroidに関するさまざまな技術情報・最新動向をお届けします! |
| Index | ||||||||
|
||||||||
Androidで動く携帯Javaアプリ作成入門 バックナンバー 連載インデックスへ»
- 第1回 Android Market配布を目指しEclipseでHelloWorld!
- 第2回 Androidアプリ作成の基本“Activity”とは何か?
- 第3回 ブラウザや地図、ストリートビューの基、Intentとは?
- 第4回 簡単でワクワクするAndroidウィジェット10連発!
- 第5回 Androidアプリの使いやすさを左右する5つのレイアウト
- 第6回 AndroidでSQLiteのDB操作をするための基礎知識
- 第7回 常駐アプリが作成できるAndroidの“サービス”とは
- 第8回 アプリを国際化してAndroid Marketから世界へ発信
- 第9回 Netbookにも広まるAndroidで、かつてないWeb体験を
- 第10回 Androidのホーム画面に常駐するアプリを作るには
- 第11回 Android 1.6のジェスチャーとテキスト読み上げを使う
- 第12回 SurfaceViewならAndroidで高速描画ゲームが作れる
- 第13回 iPhoneより多彩なAndroidのセンサをアプリで操作
- 第14回 Android 2.1の新機能で作る、美しく燃える“待ち受け”
- 第15回 Android NDKでJNIを使用してアプリを高速化するには
- 第16回 地図/位置情報/GPSを使うAndroidアプリを作るには
- 第17回 もはやケータイに必須のカメラをAndroidで制御しよう
- 第18回 開発者が知っておきたいAndroid 2.2新機能 12連発
- 第19回 XMLレイアウトでAndroidアプリに“設定画面”を追加
- 第20回 Androidアプリで“アニメーション”するための基礎知識
- 第21回 アニメーションでAndroidに独創的な画面エフェクトを
- 第22回 開発者が知って得するAndroid 2.3の新機能18選
- 第23回 Android 3.0の新APIで簡単ドラッグ&ドロップ実装
- 第24回 Androidの画面の大きさの違いを解決するFragments
- 第25回 Compatibility packageで2.x系でもマルチサイズ対応
- 第26回 開発者が知らないと損するAndroid 4.0の新機能44選
- 第27回 Android 4.0でアプリ開発を始めるための環境構築
- 第28回 Android 4.0で注目の顔認識をアプリに組み込むには
- 第29回 Androidのウィジェットにノーティフィケーションするには
- 第30回 Androidアプリでマルチメディアを扱うための基礎知識
- 第31回 Android 4.0のサービス/プロセス間通信の基本
| ご意見、ご感想は Smart&Social 会議室へどうぞ |
| Smart&Social フォーラム トップページへ |
TechTargetジャパン
- JenkinsでCIすればAndroidアプリ開発はもう怖くない (2012/5/23)
Androidアプリ開発における継続的インテグレーションの重要性やJenkinsの利点を解説し、環境構築の仕方や使い方の手順を紹介します - Open Graphアプリを作りApp Centerに登録するには (2012/5/18)
ユーザーの活動を共有できるFacebookの新機能を使ったアプリの開発方法と新しいアプリストアへの登録手順を解説 - Bootstrap、Hogan.js、FinagleなどTwitter系OSS (2012/5/15)
Twitterのアーキテクチャやオープンソースへの取り組みなどの講演模様をお届け。OpenJDKやStorm、Gizzard、Twitter4Jも注目 - ソーシャルゲーム/スマホ開発イベント記事が人気 (2012/5/11)
4月はソーシャルゲームの開発者向けイベントや、Webとネイティブの対決が熱かった! UnityやPerfumeも見逃せない!?
|
|
キャリアアップ
スポンサーからのお知らせ
イベントカレンダー
- - PR -






