Android DDMSでKMLから位置情報の取得方法
KMLファイルとは?
地理的情報を記録する為のファイルで、Keyhole Markup Language の略です。拡張子は、.kml .kmzです。Google Earth 専用ファイルでしたが、現在では、国際標準で、例えばGoogle Earth、Google マップ、モバイル Google マップなど、多くの製品・サービスが対応しています。特定の場所についての KML ファイルを作成し、イメージ オーバーレイを使用して、新しい方法で豊富なデータを公開できます。
KMLファイルの作り方
自分で作る
下のコードは、Google CodeにあるKMLチュートリアルで紹介されている、Google Earthで最もよく使う目印のサンプルです。このサンプルでは、KMLの名前空間を宣言して、placemarkタグで1個目印を定義しています。placemarkタグの中には、nameタグ、descriptionタグ、pointタグがあります。それぞれの意味は、目印の名前、説明、位置情報(経度、緯度、標高)です。
<kml xmlns="http://www.opengis.net/kml/2.2">
<placemark>
<name>Simple placemark</name>
<description>Attached to the ground.</description>
<point>
<coordinates>
-122.0822035425683,37.42228990140251,0
</coordinates>
</point>
</placemark>
</kml>
Google Earthで自動生成する
まずGoogle Earthでルートの検索を行います。出発地点と到着地点を入力してボタンを押すと、紫色の線で経路が表示されます。次はルートをファイルに保存します。紫色の線で右クリックし、「名前をつけて場所を保存」を選択します。
ファイル保存ダイアログボックスが表示されますので、ファイルをkmz形式(kml形式もOK)で保存します。
保存したファイルをADTが読み込み可能なファイル形式に変換する必要があります。
変換サイトURL:http://ge2adt.appspot.com/
Android DDMS
エミュレータ上ではGPSが使えませんが、かわりにDDMSを使って、偽のロケーション情報を送信することができます。ロケーション情報は、DDMS上で手入力する方法と、KMLやGPXといったファイルを指定して入力する方法があります。ここでは、先ほど作成したKMLファイルを利用します。
経度/緯度座標を手入力する場合
GPX ファイルを使う場合
KML ファイルを使う場合。
Load KMLボタンでKMLファイルをロードできます。KMLファイルがロードできたら、KMLタブの下方の緑の開始ボタンを押すと、プログラムに位置情報が送信されます。
サンプル
KMLを使った位置情報の取得をテストするために、サンプルプログラムを作りました。このサンプルでは、現在位置を取得できるマップビューを表示します。
レイアウト
<?xml version="1.0" encoding="utf-8"?>
<framelayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/frame"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<view class="com.google.android.maps.MapView"
android:id="@+id/map"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
android:apiKey="取得したAPIKey"/>
</framelayout>
Activity
public class MyMap extends MapActivity {
private MapView map;
private MyLocationOverlay overlay;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
map = (MapView)findViewById(R.id.map);
map.setBuiltInZoomControls(true);
map.getController().setZoom(17);
overlay = new MyLocationOverlay(getApplicationContext(),map);
overlay.onProviderEnabled(LocationManager.GPS_PROVIDER);
overlay.enableMyLocation();
map.invalidate();
overlay.runOnFirstFix(new Runnable(){
public void run(){
map.getController().animateTo(overlay.getMyLocation());
}
});
map.getOverlays().add(overlay);
}
//省略....
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(0, 0, 0, "現在位置");
return true;
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
switch (item.getItemId()) {
case 0:
overlay.enableMyLocation();
map.invalidate();
return true;
}
return super.onMenuItemSelected(featureId, item);
}
}
プログラムを実行すると、マップビューが表示されます。DDMSのKMLタブでリストから位置0を選択して、エミュレーターでメニューから現在位置をクリックすると、マップが下図のようになります。
位置0
次に、位置9を選択して、メニューから現在位置をクリックすると、マップは下図のようになります。
位置9
以上です。
このサイトについて
TrackBack URL :

[…] ☆八角研究所 : Android DDMSでKMLから位置情報の取得方法 ☆勉強会/GPS - 日本Androidの会(日本アンドロイドの会) […]
Posted by アンドロイダー育成日記 -Androidと仲良くなるには- その4 | イージーネット Tech Blog | 2009年09月01日 10:01