Тип позиции заказа 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);
}
});
}