現在位置から地図を長押しした地点までのルートを検索
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; }