現在位置から地図を長押しした地点までのルートを検索
MapView.MapTouchListener:: onLongPressでイベントを受け取ります。MapView側でピンが自動的に登録されるため削除しておきます。RouteOverlayを作成し、出発地としてLocationManagerから受け取った位置を設定し、長押しした位置を目的地としてRouteOverlay:: setRoutePosに設定します。移動手段として今回はRouteOverlay.TRAFFIC_WALK(徒歩)を設定します。RouteOverlayにRouteOverlayListenerを設定し、RouteOverlay::searchで検索を実行します。
最後にMapViewにRouteOverlayを追加しておきます。
//MapView.MapTouchListener::onLongPress 地図の長押しイベント
public boolean onLongPress(MapView map, Object obj, PinOverlay pin,GeoPoint point) {
//前回の処理を停止
if(mRouteOverlay!=null) mRouteOverlay.cancel();
//目的地を設定
mGoalPos = point;
//長押しピンをクリア onLongPressが発生すると自動的にピンが追加されるので、ここで削除しておきます。
mMapView.removeOverlay(pin);
//前回のRouteOverlayを地図から削除
mMapView.removeOverlay(mRouteOverlay);
//距離テキストビューを非表示
if(mDistLabel!=null) mDistLabel.setVisibility(View.INVISIBLE);
//RouteOverlay作成
mRouteOverlay = new RouteOverlay(this,"<あなたのアプリケーションID>");
//出発地ピン吹き出し設定
mRouteOverlay.setStartTitle("出発地");
//目的地ピン吹き出し設定
mRouteOverlay.setGoalTitle("目的地");
//出発地、目的地、移動手段を設定
mRouteOverlay.setRoutePos(mStartPos, mGoalPos, RouteOverlay.TRAFFIC_WALK);
//RouteOverlayListenerの設定
mRouteOverlay.setRouteOverlayListener(this);
//検索を
mRouteOverlay.search();
//MapViewにRouteOverlayを追加
mMapView.getOverlays().add(mRouteOverlay);
return false;
}
ルート検索完了イベントを受け取り、ルート距離を表示
ルートの検索結果を正常に取得できた場合、RouteOverlayListener:: finishRouteSearchに処理が返されます。画面上部にTextViewを用意しルートの距離を表示させてみましょう。
検索に失敗した場合はRouteOverlayListener:: errorRouteSearchに処理が返されます。
//ルート検索完了
public boolean finishRouteSearch(RouteOverlay routeOverlay) {
//プログレスダイアログを消します
if(mProgDialog!=null){
mProgDialog.dismiss();
mProgDialog = null;
}
//距離テキストビューを表示
if(mDistLabel!=null){
mDistLabel.setVisibility(View.VISIBLE);
}else{
mDistLabel = new TextView(this);
this.addContentView(mDistLabel, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
}
mDistLabel.setTextSize(20);
mDistLabel.setTextColor(Color.argb(255, 255, 255, 255));
mDistLabel.setBackgroundColor(Color.argb(127, 0, 0, 0));
//距離を設定
mDistLabel.setText(String.format("距離 %.3fキロメートル",(routeOverlay.getDistance()/1000)));
return false;
}
//ルート検索失敗
public boolean errorRouteSearch(RouteOverlay arg0, int arg1) {
//プログレスダイアログを消します
if(mProgDialog!=null){
mProgDialog.dismiss();
mProgDialog = null;
}
return false;
}

