New Route and Guide

ルートを探索して案内を開始する

ルート探索の詳細は「Route」を参照してください。
ここでは、地図を長押しした地点へのルートを探索し、案内を開始する最小限の手順を説明します。

(1) 地図の長押しを検知する

地図の長押しを検知するために、Map.addOnMapLongClickListener でリスナを登録します。

    private fun postOnInitializeMap(errorCode: ErrorCode, supportMapFragment: SupportMapFragment) {
        if (errorCode != ErrorCode.NONE) {
            return
        }

        map = supportMapFragment.map!!
        Navi.getInstance().attach(map)
        map.mapMode = Map.MapMode.NORTH_UP // 北を画面上部にします
+       map.addOnMapLongClickListener {point ->
+           false
+       }
    }

(2) ルート探索とナビゲーションの開始

長押しされた地点へルート探索を行うため、startNavigation() 関数を追加します。

    private fun startNavigation(goal: GeoCoordinate) {
        val routePlan = RoutePlan()
        routePlan.endPoint = goal
        routePlan.routeOptions = RouteOptions()
        Navi.getInstance().calculateRoute(routePlan) { errorCode, calcRouteResult ->
            if (errorCode == CalcRouteListener.ErrorCode.NONE) {
                // startGuidanceを呼び出すことでルートが確定し、案内が始まります。
                Navi.getInstance().startGuidance { startGuidanceErrorCode: StartGuidanceListener.ErrorCode, guidePointResult: GuidePointResult? ->
                    if (startGuidanceErrorCode == StartGuidanceListener.ErrorCode.NONE) {
                        // 案内開始後の処理(オプション)
                    }
                }
            }
        }
    }

長押しされた地点に対して startNavigation() を呼び出します。

        map.addOnMapLongClickListener {point ->
+           startNavigation(point)
            false
        }

(3) 誘導音声の有効化

誘導音声の出力を有効化するため、NaviInitListener.onInitCompleted() 内で Navi.startVoiceEngine() を呼び出します。

    private fun initializeNavi(context: Context) {
        /** 省略 **/

        Navi.getInstance().initialize(initInfo) { errorCode, naviInitResult ->
            if (errorCode == NaviInitListener.ErrorCode.NONE) {
                Navi.getInstance().mobileAppLifecycle = lifecycle
                Navi.getInstance().startPositioning()
+               Navi.getInstance().startVoiceEngine { }
            }
        }
    }

これで地図を長押しした地点へのルート案内が可能になります。

ルート探索

デモ走行で誘導音声を確認する

SDKは、机上で動作確認するための手段として、デモ走行(擬似走行)機能を提供しています。

(1) デモ走行の開始

startDemoRun() 関数を追加し、デモ走行を実行します。

    private fun startDemoRun() {
        val demoRunSetting = DemoRunSetting()
        demoRunSetting.demoType = Common.DemoType.AUTO
        demoRunSetting.isAutoRepeat = true
        Navi.getInstance().startDemoRun(demoRunSetting)
    }

(2) 案内開始時にデモ走行を開始

StartGuidanceListener.onCompleted() 内で startDemoRun() を呼び出します。

    private fun startNavigation(goal: GeoCoordinate) {
        val routePlan = RoutePlan()
        routePlan.endPoint = goal
        routePlan.routeOptions = RouteOptions()
        Navi.getInstance().calculateRoute(routePlan) { errorCode, calcRouteResult ->
            if (errorCode == CalcRouteListener.ErrorCode.NONE) {
                // startGuidanceを呼び出すことでルートが確定し、案内が始まります。
                Navi.getInstance().startGuidance { startGuidanceErrorCode: StartGuidanceListener.ErrorCode, guidePointResult: GuidePointResult? ->
                    if (startGuidanceErrorCode == StartGuidanceListener.ErrorCode.NONE) {
+                       startDemoRun()
+                       // 地図を自車位置中心に戻します
+                       map.mapMode = Map.MapMode.NORTH_UP
+                       // 自車位置周辺地図がわかりやすい拡大率に戻します
+                       map.setZoomLevel(15.0)
                    }
                }
            }
        }
    }

デモ走行機能の詳細は「Demo Run」を参照してください。

位置情報更新イベントの受信

SDKからの通知を受け取るために、走行情報更新イベントリスナー(RunInfoListener)を設定します。

    // 走行情報更新イベントリスナーを追加
    Navi.getInstance().addRunInfoListener(object : RunInfoListener {
        override fun onUpdate() {
        }
    })

onUpdate() の通知のタイミングで、Navi.getInstance().runInfo で最新の走行情報を取得することができます。

    // 走行情報更新イベントリスナーを追加
    Navi.getInstance().addRunInfoListener(object : RunInfoListener {
        override fun onUpdate() {
+            val runInfo = Navi.getInstance().runInfo

+            println("現在の速度: ${runInfo.ownCarInfo.velocity} km")
+            println("次の誘導地点まで: ${runInfo.nextGuidePoint.distance} m")
+            println("目的地まで: ${runInfo.destinationInfo.distance} m あと ${runInfo.destinationInfo.time / 60} 分")
        }
    })

ユーザー設定

ユーザー設定については、「User Setting」 を参照してください。
また、ナビモードをレーンバイレーン案内 に設定すると、パイオニア独自の走行車線を案内するモードになります。

        val setupInfo = SetupInfo()
        setupInfo.naviMode = Common.NaviMode.LANE_BY_LANE

        Navi.getInstance().setSetupInfo(
            setupInfo
        ) { errorCode ->
            if (errorCode == UserSettingResultListener.ErrorCode.NONE) {
                // 設定成功
            } else {
                // 設定失敗
            }
        }

なお、この設定は「SDKの初期化」 で設定したユーザーID毎に保存されます。

以上でSDKを利用したアプリを構築するための基礎知識についての解説は完了です。
本章で解説した機能の詳細や他の機能に関しては、「User Cases」 をご確認ください。

プローブデータの収集設定を行う場合は、プローブデータの収集 をご確認ください。