SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

スマホアプリ開発の最新トレンド! ぜったい外せない位置情報活用術

YOLPで挑戦~Android向け簡易道のり測定アプリを30分で作る!

スマホアプリ開発の最新トレンド! ぜったい外せない位置情報活用術(1)


  • X ポスト
  • このエントリーをはてなブックマークに追加

現在位置から地図を長押しした地点までのルートを検索

 MapView.MapTouchListener:: onLongPressでイベントを受け取ります。MapView側でピンが自動的に登録されるため削除しておきます。RouteOverlayを作成し、出発地としてLocationManagerから受け取った位置を設定し、長押しした位置を目的地としてRouteOverlay:: setRoutePosに設定します。移動手段として今回はRouteOverlay.TRAFFIC_WALK(徒歩)を設定します。RouteOverlayにRouteOverlayListenerを設定し、RouteOverlay::searchで検索を実行します。

 最後にMapViewにRouteOverlayを追加しておきます。

RouteSearchActivity.java
//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に処理が返されます。

RouteSearchActivity.java
//ルート検索完了
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;
}

次のページ
クリアメニューを追加

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
スマホアプリ開発の最新トレンド! ぜったい外せない位置情報活用術連載記事一覧

もっと読む

この記事の著者

大江 啓之(ヤフー株式会社)(オオエ ヒロユキ(ヤフーカブシキガイシャ))

2008年ヤフー入社後、ソフトバンクモバイル版地図アプリ、ドコモ版地図アプリ、BREW版路線・地図アプリなどの携帯アプリの開発を手掛け、「Yahoo! Open Local Platform(略称:YOLP)」のスマートフォン向け地図SDK(iOS Map SDK&Android Map SDK)の...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6406 2012/02/29 19:12

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング