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

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

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

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

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

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

        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();

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


person Nandoff    schedule 14.04.2017    source источник


Ответы (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);
  }
});

}

person cammace    schedule 14.04.2017
comment
Ладно, понял наконец. Еще один вопрос. Чтобы вызвать конструктор OptimizedTrips, какую библиотеку мне нужно импортировать в файл build.gradle? - person Nandoff; 15.04.2017
comment
Он будет включен в версию 2.1 библиотеки libjava-services (скоро будет запущен). - person cammace; 15.04.2017