mapquest版OpenStreetMapのサンプルにはたくさんのクラスが紹介されていますが、そのうちの1つ(MyLocation)だけを使ってみます。

MyLocationは地図上に、現在位置と北の方位を示すコンパスを表示するものです。

mapquestのクラスライブラリは、mapquest developersからダウンロードしておきます。

独自アプリにOpenStreetMapの機能を実装する準備です。




Eclipseを起動して、新しいプロジェクトを作ります。

● AndroidManifest.xmlを編集して、以下を追加

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<supports-screens android:anyDensity="true"/>


● layoutフォルダーにサンプルのfollowme_map.xmlをコピー。

● strings.xmlを編集して、以下を追加(APIキーです)。

<string name="api_key">Kmjtd%7Cluu22gurnq%2Can%3Do5-gzrl</string>


● プロジェクトのフォルダーlibsにmapquest-android-sdk-1.0.5.jarを追加してrefresh。

● メインのActivityは以下のようなコードです。

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
    ・
    ・
    ・
import com.mapquest.android.maps.GeoPoint;
import com.mapquest.android.maps.MapActivity;
import com.mapquest.android.maps.MapView;
import com.mapquest.android.maps.MyLocationOverlay;
    ・
    ・
    ・
public class MainActivity extends Activity {
    
    protected MapView myMap;
    protected MyLocationOverlay myLocationOverlay;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.followme_map);
        
        setupMapView();
        setupMyLocation();
    }
    
    private void setupMapView() {
        this.myMap = (MapView) findViewById(R.id.map);
        
        // enable the zoom controls
        myMap.setBuiltInZoomControls(true);
    }
    
    protected void setupMyLocation() {
        this.myLocationOverlay = new MyLocationOverlay(this, myMap);
        
        myLocationOverlay.enableMyLocation();
        myLocationOverlay.runOnFirstFix(new Runnable() {
            @Override
            public void run() {
                GeoPoint currentLocation = myLocationOverlay.getMyLocation(); 
                myMap.getController().animateTo(currentLocation);
                myMap.getController().setZoom(14);
                myMap.getOverlays().add(myLocationOverlay);
                myLocationOverlay.setFollowing(true);
            }
        });
    }
    
    @Override
    protected void onStart() {
        
        myLocationOverlay.setFollowing(true);
        super.onStart();
    }
    
    @Override
    protected void onResume() {
        myLocationOverlay.enableMyLocation();
        myLocationOverlay.enableCompass();
        super.onResume();
    }
    
    @Override
    protected void onPause() {
        super.onPause();
        myLocationOverlay.disableCompass();
        myLocationOverlay.disableMyLocation();
    }

}





こんな感じ。