Добавление координат в Mapbox Android

Я работаю с mapbox android, я пытаюсь добавить несколько путевых точек между исходной и конечной точками. Но после добавления одной путевой точки, когда она добавляет другую, это дает исключение "Слишком много координат s; максимальное количество координат равно 3."

Я просто хочу добавить несколько путевых точек между двумя точками и нарисовать маршрут над этой линией в mapbox android.

[ссылка на прошлый]: https://paste.ubuntu.com/p/PKMQzFyzVb/

Моя функция рисования маршрута ->

{
    private void getRouteWithWaypoint(Point origin, Point destination, List<Point> wayPoints) {
        assert Mapbox.getAccessToken() != null;
        NavigationRoute.Builder builder = NavigationRoute.builder(getActivity())
                .accessToken(Mapbox.getAccessToken())
                .origin(origin)
                .destination(destination);
        if (wayPoints != null) {
            for (Point point : wayPoints) {
                builder.addWaypoint(point);
            }
        }
        builder.build().getRoute(new Callback<DirectionsResponse>() {
            @Override
            public void onResponse(@NonNull Call<DirectionsResponse> call, Response<DirectionsResponse> response) {
                Log.e(TAG, "Response code: " + response.code());
                if (response.body() == null) {
                    Log.e(TAG, "No routes found, make sure you set the right user and access token.");
                    return;
                } else if (response.body().routes().size() < 1) {
                    Log.e(TAG, "No routes found");
                    return;
                }
                currentRoute = response.body().routes().get(0);
                if (navigationMapRoute != null) {
                    navigationMapRoute.removeRoute();
                } else {
                    navigationMapRoute = new NavigationMapRoute(null, mapView, map, R.style.NavigationMapRoute);
                }
                navigationMapRoute.addRoute(currentRoute);

            }

            @SuppressLint("TimberArgCount")
            @Override
            public void onFailure(Call<DirectionsResponse> call, Throwable t) {
                Timber.e(t, "Error: %s");
            }
        });

    }}

2 ответа

Нарисуйте корень на карте Mapbox, скопировав приведенный ниже код из документации Mapbox.

private void getRoute(Point origin, Point destination) {
  NavigationRoute.builder(this)
    .accessToken(Mapbox.getAccessToken())
    .origin(origin)
    .destination(destination)
    .build()
    .getRoute(new Callback<DirectionsResponse>() {
      @Override
      public void onResponse(Call<DirectionsResponse> call, Response<DirectionsResponse> response) {
        // You can get the generic HTTP info about the response
        Log.d(TAG, "Response code: " + response.code());
        if (response.body() == null) {
          Log.e(TAG, "No routes found, make sure you set the right user and access token.");
          return;
        } else if (response.body().routes().size() < 1) {
          Log.e(TAG, "No routes found");
          return;
        }

        currentRoute = response.body().routes().get(0);

        // Draw the route on the map
        if (navigationMapRoute != null) {
          navigationMapRoute.removeRoute();
        } else {
          navigationMapRoute = new NavigationMapRoute(null, mapView, mapboxMap, R.style.NavigationMapRoute);
        }
        navigationMapRoute.addRoute(currentRoute);
      }

      @Override
      public void onFailure(Call<DirectionsResponse> call, Throwable throwable) {
        Log.e(TAG, "Error: " + throwable.getMessage());
      }
    });
}

для более подробной информации перейдите по ссылке https://www.mapbox.com/help/android-navigation-sdk/

Профиль по умолчанию для запроса маршрутов: DirectionsCriteria.ProfileCriteria.PROFILE_DRIVING_TRAFFIC

Этот профиль допускает только 1 путевую точку между исходной точкой и пунктом назначения. Если вы хотите использовать более 1 путевой точки, просто используйте PROFILE_DRIVING вместо этого (я думаю, это позволяет до 25 путевых точек).

Как это:

       NavigationRoute.Builder builder = NavigationRoute.builder(getActivity())
            .accessToken(Mapbox.getAccessToken())
            .origin(origin)
            .destination(destination)
            .profile(DirectionsCriteria.ProfileCriteria.PROFILE_DRIVING);
    if (wayPoints != null) {
        for (Point point : wayPoints) {
            builder.addWaypoint(point);
        }
    }
Другие вопросы по тегам