Вот пример кода, который вы можете использовать, чтобы отобразить 2 местоположения, источник и пункт назначения, их маршрут и маркер в середине их маршрута. Вы должны заменить изображения для вашего источника и места назначения, а для вашего пузыря вы можете перейти по ссылке в комментарии, чтобы создать растровое изображение (или любое другое руководство онлайн) с текстом, который отображает рассчитанное расстояние (включая текущий трафик).
private fun renderLocations() {
val locations = arrayOf(
GeoCoordinate(37.4219999, -122.0862462),
GeoCoordinate(33.9880667, -118.4854341)
)
val sourceMarker = MapMarker(locations[0], Image().apply {
try {
// set source marker image
setImageResource(android.R.drawable.ic_menu_compass)
} catch (throwable: Throwable) { }
})
val destinationMarker = MapMarker(locations[1], Image().apply {
try {
// set destination marker image
setImageResource(android.R.drawable.ic_menu_camera)
} catch (throwable: Throwable) { }
})
map.addMapObjects(listOf(sourceMarker, destinationMarker))
calculateRoute(locations[0], locations[1])
}
private fun calculateRoute(source: GeoCoordinate, destination: GeoCoordinate) {
CoreRouter().apply {
dynamicPenalty = DynamicPenalty().apply {
trafficPenaltyMode = Route.TrafficPenaltyMode.OPTIMAL
}
calculateRoute(
RoutePlan().apply {
routeOptions = RouteOptions().apply {
transportMode = RouteOptions.TransportMode.CAR
setHighwaysAllowed(true)
routeType = RouteOptions.Type.SHORTEST // other alternatives: FASTEST, BALANCED
routeCount = 1
}
addWaypoint(RouteWaypoint(source))
addWaypoint(RouteWaypoint(destination))
}, object : Router.Listener<List<RouteResult>, RoutingError> {
override fun onCalculateRouteFinished(p0: List<RouteResult>?, p1: RoutingError?) {
p1?.let {
if (it == RoutingError.NONE) {
p0?.let { result ->
if (result.isNotEmpty()) {
// I only show the first result, maybe you want to show all routes
val routeResult = result[0].route
val durationWithDelayInSeconds = routeResult.getTtaIncludingTraffic(Route.WHOLE_ROUTE).duration
val totalWayPoints = routeResult.routeGeometry?.size
val middlePoint: GeoCoordinate? = routeResult.routeGeometry?.get(totalWayPoints!! / 2)
middlePoint?.let {
map.addMapObject(MapMarker(it/*, Image().apply {
// Draw yourbitmap. A good resource can be found here: https://medium.com/@travells2323/android-draw-text-to-bitmap-8251f6d79150
}*/
))
}
mapRoute?.let {
map.removeMapObject(it)
}
mapRoute = null
mapRoute = MapRoute(routeResult)
mapRoute?.let {
map.addMapObject(it)
it.renderType = MapRoute.RenderType.USER_DEFINED
it.color = Color.BLUE
it.isTrafficEnabled = true
}
}
}
}
}
}
override fun onProgress(p0: Int) {
/* The calculation progress can be retrieved in this callback. */
}
})
}
}
Конечный результат кода выше
Как только вы замените изображения теми, которые вам нужны, у вас будет конечный результат, которого вы хотите достичь.