株式会社八角研究所 > Android DDMSでKMLから位置情報の取得方法

エンジニア募集中!

独立心旺盛で、新しい技術で新しいWebサービスを作りたいと思っているけれど、ひとりでやることに限界を感じているフリーのエンジニアの方。あなたの期待にこたえられる仲間と環境を、八角研究所なら提供できると思います。社員としてではない関わり方も、あるかもしれません。

2009年07月28日 17:38

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

by tomato

Tags: Androidアプリ作りたい 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/

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 1歳 入社2年目

この人の会社をみる この人関連のイベントをさがす この人と一緒にはたらく

この日記にコメントする

(メールアドレスは公開されません。メールで返答が欲しい場合などに入力してください)

このエントリへのトラックバックURL

コメント

コメントはありません

トラックバック

トラックバックはありません

メンバー紹介

boy

boy

少年です。 18歳以下(嘘)でも立派に社員です。 よろしくおねがいします。

tunakan

tunakan

内臓が全般的に弱いです。データベースは苦手なのに変なデーターベースに当たることが多い気がします。

はち子さん

はち子

広報を担当している、はち子です。本当は広報じゃなくて事務デスが、広報って言うほうがかっこいいし! 社内でゆいいつ、...