Как пересчитать маршрут при выходе из него в Mapbox Android? - PullRequest
0 голосов
/ 16 апреля 2019

Хотелось бы узнать, как пересчитать маршрут в Android mapbox, так как выход из маршрута продолжается в том же первоначально отображенном виде.Для пунктирного маршрута запустите навигацию и даже оставьте ее, и навигация и маршрут не пересчитываются.Я благодарю всех.

public void getRoute(List<Point> waypoints){

    waypointSize = waypoints.size();
    Log.d("tag", "WaypointSSize: "+waypoints.size());
    // Transforma localizacao atual em Point para o MapBox
    Point origin = Point.fromLngLat(currentLocation.getLongitude(),currentLocation.getLatitude());
    Log.d("tag", "Origin: "+origin);
    for (Point destination : waypoints){
        // Criando a rota -> Token tem que ser AccessToken
        NavigationRoute.Builder builder = NavigationRoute.builder(this)
                .accessToken("sk.eyJ1IjoiYWhlbnRyZWdhIiwiYSI6ImNqc2NkZ2ptZjAwYmEzenA2Zmo0MDBoNjQifQ.0r13_lXZMCNdaWrkYddRLg")
                .origin(origin)
                .destination(destination);

        builder.build().getRoute(new Callback<DirectionsResponse>() {
            @Override
            public void onResponse(Call<DirectionsResponse> call, Response<DirectionsResponse> response) {
                Log.d("tag", ""+response.code());
                // Verificando se a problema como o AccessToken
                if (response.body() == null){
                    Log.d("tag","Nenhuma rota encontrada, check access token");
                    return;
                    // Verificando se nao foi encontrada nenhuma rota
                }else if(response.body().routes().size() < 1){
                    Log.d("tag","Nenhuma rota encontrada");
                    return;
                }
                // Adicionando a rota a variavel do MapBox
                currentRoute = response.body().routes().get(0);

                if (distancia == 0){
                    distancia = currentRoute.distance();
                    route = currentRoute;
                }else if (distancia > currentRoute.distance()){
                    distancia = currentRoute.distance();
                    route = currentRoute;
                }
                cont++;
                if (cont == waypointSize){
                    // Verificando se ja existe uma rota no mapa
                    if (navigationMapRoute != null) {
                        navigationMapRoute.removeRoute();
                    } else {
                        navigationMapRoute = new NavigationMapRoute(null, mapView, map);
                    }
                    // Adicionando a rota no mapa
                    navigationMapRoute.addRoute(route);

                    navigation.startNavigation(route);

                    // LatLng para marcar no mapa o destino
                    LatLng latLng = new LatLng(destination.latitude(),destination.longitude());
                    map.addMarker(new MarkerOptions().setPosition(latLng));
                }

                Log.d("tag", ""+currentRoute.distance());
                Log.d("tag", ""+currentRoute.duration());
            }

            @Override
            public void onFailure(Call<DirectionsResponse> call, Throwable t) {
                Log.d("Rota",t.getMessage());
            }
        });
    }
    Log.d("Rota", "WaypointSSize: "+waypoints.size());


}

1 Ответ

1 голос
/ 27 июня 2019

Navigation SDK включает OffRouteListener, то есть , а не , включенное по умолчанию.

В документации подробно описывается, как определить, когда пользователь отключился от начального маршрута, и инициировать запрос на новый маршрут: https://docs.mapbox.com/android/navigation/overview/off-route/


⚠️ Отказ от ответственности: я в настоящее времяработа для Mapbox ⚠️

...