mapbox - 当前位置偏离路线时出现错误
问题描述
我是 mapb box 的新手,我正在开发示例应用程序来学习。我正在使用自定义路线,用户将在开始导航时浏览自定义路线。
当用户的当前位置不在路线上时发生错误。重新路由已禁用
从 Map Matching API 生成的另一个 Activity 获取 DirectionsRoute
代码 -
val mapboxNavigationOptions = MapboxNavigation
.defaultNavigationOptionsBuilder(this, getString(R.string.mapbox_access_token))
.build()
mapboxNavigation = MapboxNavigation(mapboxNavigationOptions)
mapboxNavigation.setRerouteController(null)
navigationView = findViewById(R.id.navigationView)
navigationView.onCreate(savedInstanceState)
navigationView.initialize(this, getInitialCameraPosition())
private val routeProgressObserver = object : RouteProgressObserver {
override fun onRouteProgressChanged(routeProgress: RouteProgress) {
try {
routeProgress.currentState?.let { currentState ->
val state = currentState
if (state == RouteProgressState.ROUTE_COMPLETE && routeProgress.distanceRemaining < 10) {
finish()
} else if (state == RouteProgressState.OFF_ROUTE) {
Log.e("< <OFF> >", " off route > > > > > > > > > > > > > > > > > > >")
}
}
} catch (e: Exception) {
Log.e("Nav Err", e.message)
}
}
}
override fun onNavigationReady(isRunning: Boolean) {
if (!isRunning && !::navigationMapboxMap.isInitialized) {
ifNonNull(navigationView.retrieveNavigationMapboxMap()) { navMapboxMap ->
this.navigationMapboxMap = navMapboxMap
this.navigationMapboxMap.updateLocationLayerRenderMode(RenderMode.NORMAL)
navigationView.retrieveMapboxNavigation()?.let { this.mapboxNavigation = it }
val optionsBuilder = NavigationViewOptions.builder(this)
optionsBuilder.navigationListener(this)
optionsBuilder.directionsRoute(route)
optionsBuilder.shouldSimulateRoute(false)
optionsBuilder.bannerInstructionsListener(this)
optionsBuilder.enableVanishingRouteLine(true)
optionsBuilder.routeProgressObserver(routeProgressObserver)
navigationView.startNavigation(optionsBuilder.build())
}
}
错误日志 -
java.lang.IndexOutOfBoundsException
at java.util.AbstractList.subList(AbstractList.java:738)
at com.mapbox.navigation.core.routeoptions.MapboxRouteOptionsUpdater.update(MapboxRouteOptionsUpdater.kt:103)
at com.mapbox.navigation.core.reroute.MapboxRerouteController.reroute(MapboxRerouteController.kt:50)
at com.mapbox.navigation.core.MapboxNavigation.reroute(MapboxNavigation.kt:687)
at com.mapbox.navigation.core.MapboxNavigation.access$reroute(MapboxNavigation.kt:127)
at com.mapbox.navigation.core.MapboxNavigation$createInternalOffRouteObserver$1.onOffRouteStateChanged(MapboxNavigation.kt:681)
at com.mapbox.navigation.core.trip.session.MapboxTripSession.setOffRoute(MapboxTripSession.kt:128)
at com.mapbox.navigation.core.trip.session.MapboxTripSession.access$setOffRoute$p(MapboxTripSession.kt:49)
at com.mapbox.navigation.core.trip.session.MapboxTripSession$updateDataFromNavigatorStatus$updateNavigatorStatusDataJob$1.invokeSuspend(MapboxTripSession.kt:461)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
解决方案
您面临的问题似乎源于MapboxNavigation
.
这确实不是很明显,而是NavigationView
一个打包的导航插件,已经捆绑了MapboxNavigation
. 因此,如果您想使用NavigationView
而不是在 simple 上进行 Turn-by-Turn 导航MapView
,则这些行已过时并且可能导致此类问题:
val mapboxNavigationOptions = MapboxNavigation
.defaultNavigationOptionsBuilder(this, getString(R.string.mapbox_access_token))
.build()
mapboxNavigation = MapboxNavigation(mapboxNavigationOptions)
mapboxNavigation.setRerouteController(null)
推荐阅读
- ms-access-2010 - 在表单的两个位置使用来自查询字段的不同数据 - MS Access
- python - 如何将一些 Django 模板连接到 html 超链接?
- java - 回调代码执行
- angular - 调用scrollTo()方法后如何在ngx-scrollbar中间停止滚动
- html - 如何根据我在 HTML 表单中的第一选择过滤第二选择的选项?
- excel - excel vba 中的 Zillow 网页抓取(大问题帮助)
- 3d - vpython7 替代 3d 对象可视化
- git - 无法在 Visual Studio Code Git Bash 上将 Github 从 SSH 重置为 HTTPS
- angular - Mat-spinner 适用于某些组件,但不适用于 Angular 中的某些其他组件
- visual-studio-code - 如果 VS Code 没有输入 | 无法输入 VS CODE