Тип позиции заказа ArrayList для отслеживания маршрута в Mapbox

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

Что я хочу: я хочу нарисовать ломаную линию между несколькими точками, принимая во внимание, что маршрут должен быть таким, который содержит МЕНЬШУЮ РАССТОЯНИЕ, а не как способ, которым пользователь выбирает свои пункты назначения.

Контекст: у меня есть LatLng ArrayList, который заполняется, когда пользователь нажимает на карту, а нажатый LatLng автоматически сохраняется в ArrayList. Затем я преобразую его в массив для позиционирования, чтобы использовать метод setCoordinates(). Кроме того, у меня есть точка происхождения, которая будет текущим местоположением пользователей. Я установил обычный для тестирования.

Проблема: когда пользователь щелкает по пунктам назначения, ArrayList заполняется так, как он щелкает, без учета того, что является ближайшим пунктом назначения, и это то, чего я хочу достичь, чтобы отслеживать маршрут только с учетом того, что расстояние между точки должны быть самыми короткими.

Вот мой пример кода (обратите внимание, что если ArrayList "al" можно заказать с учетом расстояния, вероятно, маршрут будет успешным):

        for (int i=0; i<= direcciones.size() - 1; i++) {
            LatLng tri = direcciones.get(i);
            Position p = Position.fromCoordinates(tri.getLongitude(), tri.getLatitude());
            al.add(i, p);
        }
        MapboxDirections client = new MapboxDirections.Builder()
                .setAccessToken(Mapbox.getAccessToken())
                .setOrigin(Position.fromCoordinates(-56.1645, -34.9011))
                .setCoordinates(al)
                .setProfile(DirectionsCriteria.PROFILE_DRIVING)
                .build();

Заранее спасибо!

1 ответ

Решение

Похоже, вы хотите использовать Оптимизированные поездки, которые я только что добавил в этом запросе. Это решает проблему коммивояжера. Это очень похоже на API направлений, но запрос немного отличается:

MapboxOptimizedTrips.Builder builder = new MapboxOptimizedTrips.Builder()
  .setAccessToken(Mapbox.getAccessToken())
  .setProfile(DirectionsCriteria.PROFILE_DRIVING)
  .setSource(DirectionsCriteria.SOURCE_FIRST)
  .setOverview(DirectionsCriteria.OVERVIEW_FULL);

MapboxOptimizedTrips client = builder.setCoordinates(coords).build();
client.enqueueCall(new Callback<OptimizedTripsResponse>() {
  @Override
  public void onResponse(Call<OptimizedTripsResponse> call, Response<OptimizedTripsResponse> response) {

    drawLine(response.body().getTrips().get(0).getGeometry());
  }

  @Override
  public void onFailure(Call<OptimizedTripsResponse> call, Throwable throwable) {
    Timber.e("Calling optimize trips failed: ", throwable);
  }
});

}

Другие вопросы по тегам