グーグルマップに現在地を表示し、移動した軌跡を線で描画してみたいと思います。
描画の度にオーバーレイを重ねていくと、当然のことながら重たくなっていくので、
表示するオーバーレイは常に1枚、ルート情報はpathRouteに記憶させるようにしました。
ルート情報が増える毎にオーバーレイを書き直しています。
まずは、LocationListenerを実装し、MapActivityクラス継承したクラスを作成します。
public class MyMap extends MapActivity implements LocationListener {
private MapView mMapView;
private MapController mMapController;
private MyLocationOverlay mOverlay;
private LocationManager mLocationManager;
private LineOverlay lineOverlay = new LineOverlay(); //軌跡を描画するオーバーレイ
public static List<GeoPoint> pathRoute; //ルート情報
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mMapView = (MapView)findViewById(R.id.mapview);
mMapView.setClickable(true);
mMapController = mMapView.getController();
mMapController.setZoom(16);
//現在地を表示
mOverlay = new MyLocationOverlay(this, mMapView);
mOverlay.onProviderEnabled(LocationManager.GPS_PROVIDER);
mOverlay.enableMyLocation();
mOverlay.runOnFirstFix(new Runnable(){
public void run(){
GeoPoint mPoint = mOverlay.getMyLocation();
mMapController.animateTo(mPoint);
}
});
mMapView.getOverlays().add(mOverlay);
mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
}
@Override
public void onResume(){
super.onResume();
mOverlay.enableMyLocation();
if (mLocationManager != null) {
mLocationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, // 精度は高いが遅い(誤差15m程度)
//LocationManager.NETWORK_PROVIDER, // 精度は低いが速い(誤差100m程度)
//LocationManager.PASSIVE_PROVIDER, //位置情報の修正を行わない特殊なプロバイダー(他アプリ等で測位された場合に、その位置情報を流用するらしい)
5000, //通知する時間の間隔をミリ秒で指定します
0, //通知する距離の間隔をメートルで指定します
this);
}
}
public void onPause(){
super.onPause();
mOverlay.disableMyLocation();
if (mLocationManager != null) {
mLocationManager.removeUpdates(this);
}
}
//…以下省略
}
onLocationChangedイベントにてlineOverlayにポイントを追加します。 続きを読む…»