Сводка продолжительности поездки в виде сообщения-подсказки перед запуском Route on Heremaps SDK в Android - PullRequest
0 голосов
/ 05 июля 2019

Я хотел показать общую продолжительность поездки в сообщении подсказки на Android здесь карты SDK при запросе нарисовать маршрут на фрагменте карты, как показано на изображении. Общая продолжительность поездки

Ответы [ 2 ]

0 голосов
/ 17 июля 2019

Вот пример кода, который вы можете использовать, чтобы отобразить 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. */
                }
            })
    }
}

Конечный результат кода выше

enter image description here

Как только вы замените изображения теми, которые вам нужны, у вас будет конечный результат, которого вы хотите достичь.

0 голосов
/ 05 июля 2019

Вы можете использовать информационный пузырь для отображения общей продолжительности поездки.Прочитайте документацию для дополнительной информации: https://developer.here.com/documentation/maps/topics/map-controls.html

Информационные пузыри

В дополнение к элементам управления картой, модуль пользовательского интерфейса поддерживает информационные пузыри.Информационный пузырь позволяет буквально отображать «пузырь», содержащий HTML-контент на карте, например текст или изображения.

Приведенный ниже код расширяет первый пример в этой статье, добавляя информационный пузырь на отображение карты.,Он создает экземпляр InfoBubble, указывая географические координаты местоположения, в котором он должен отображаться, и содержимое HTML, которое в этом случае представляет собой текстовую строку «Hello World!»жирным шрифтом.Последняя строка добавляет объект информационного пузыря к экземпляру пользовательского интерфейса.

// Create an info bubble object at a specific geographic location:
var bubble = new H.ui.InfoBubble({ lng: 13.4, lat: 52.51 }, {
        content: '<b>Hello World!</b>'
       });

// Add info bubble to the UI:
ui.addBubble(bubble);

Чтобы получить общую стоимость поездки, позвоните в API маршрутизации и получите сводную информацию. https://developer.here.com/documentation/android-premium/dev_guide/topics/routing.html

...