トップ » はっかかー日記 » Android DDMSでKMLから位置情報の取得方法

Android DDMSでKMLから位置情報の取得方法

タグ: Android

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でルートの検索を行います。出発地点と到着地点を入力してボタンを押すと、紫色の線で経路が表示されます。次はルートをファイルに保存します。紫色の線で右クリックし、「名前をつけて場所を保存」を選択します。

pic1.JPG

ファイル保存ダイアログボックスが表示されますので、ファイルをkmz形式(kml形式もOK)で保存します。
保存したファイルをADTが読み込み可能なファイル形式に変換する必要があります。

変換サイトURL:http://ge2adt.appspot.com/

pic10.JPG

Android DDMS

エミュレータ上ではGPSが使えませんが、かわりにDDMSを使って、偽のロケーション情報を送信することができます。ロケーション情報は、DDMS上で手入力する方法と、KMLやGPXといったファイルを指定して入力する方法があります。ここでは、先ほど作成したKMLファイルを利用します。

経度/緯度座標を手入力する場合

pic2.JPG

GPX ファイルを使う場合

pic3.JPG

KML ファイルを使う場合。

pic4.JPG

Load KMLボタンでKMLファイルをロードできます。KMLファイルがロードできたら、KMLタブの下方の緑の開始ボタンを押すと、プログラムに位置情報が送信されます。

pic5.JPG

サンプル

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

pic7.JPG

次に、位置9を選択して、メニューから現在位置をクリックすると、マップは下図のようになります。

位置9

pic8.JPG

以上です。


執筆者紹介

tomato

tomato

TrackBack URL :