Итак, Mapbox предоставляет замечательный Navigation SDK для Android, и я пытался создать собственные маршруты, представляя каждую точку как элемент в файле Geojson, а затем передавая их в модуль MapMatching для получения маршрутов.что я могу потом передать в Navigation Engine.
Мое решение состоит из двух основных частей.Первый включает в себя итерацию точек, по которым я хочу перейти, путем добавления их в качестве входных данных к элементу .coordinates MapboxMapMatching.builder () и последующего преобразования его в .toDirectionRoute ();за инструкциями Mapbox и примером здесь: https://www.mapbox.com/android-docs/java/examples/use-map-matching/
private void getWaypointRoute(List<Point> features) {
originPosition = features.get(0);
destinationPosition = features.get(features.size() - 1);
MapboxMapMatching.builder()
.accessToken(Mapbox.getAccessToken())
.coordinates(features)
.steps(true) // Setting this will determine whether to return steps and turn-by-turn instructions.
.voiceInstructions(true)
.bannerInstructions(true)
.profile(DirectionsCriteria.PROFILE_DRIVING)
.build().enqueueCall(new Callback<MapMatchingResponse>() {
@Override
public void onResponse(Call<MapMatchingResponse> call, Response<MapMatchingResponse> response) {
if (response.body() == null) {
Log.e(TAG, "Map matching has failed.");
return;
}
if (response.isSuccessful()) {
currentRoute = response.body().matchings().get(0).toDirectionRoute();
Второй бит включает просто передачу currentRoute на NavigationLauncher, как показано ниже:
NavigationLauncherOptions options = NavigationLauncherOptions.builder()
.origin(origin)
.destination(destination)
.directionsRoute(currentRoute)
.shouldSimulateRoute(simulateRoute)
.enableOffRouteDetection(false)
.build();
// Call this method with Context from within an Activity
NavigationLauncher.startNavigation(MainActivity.this, options);
Пример маршрута можетможно посмотреть здесь Снимок Android-симулятора с маршрутом .Каждая точка на маршруте является пересечением и соответствует объекту в моем файле GeoJson.Проблема становится, когда я запускаю навигацию.Каждый раз, в симуляторе или на реальном устройстве, каждая точка интерпретируется как пункт назначения, поэтому голосовая команда звучит так: «Вы достигли своего первого (второго, третьего и т. Д.) Пункта назначения».Я нахожу это раздражающим, поскольку я хотел бы иметь единственный маршрут с пунктом назначения, и это все.Я просто хотел бы иметь эти точки, чтобы у меня был свой собственный путь вместо кратчайшего, обычно возвращаемого приложениями маршрутизации.Я пытаюсь избежать этой проблемы, отключив voiceInstructions, но затем система переходит на бананы, и экран навигации перемещается к широте, lng (0,0), которая в значительной степени находится где-то к западу от Африки.Любая помощь в том, как я мог решить эту проблему, была бы очень признательна, и я был бы счастлив купить пиво или два для человека, который дает правильный ответ.Я также обратился в службу поддержки Mapbox, но мы не нашли ответа на эту проблему, поэтому я попросил их расширить его внутри своей команды инженеров, как я полагаю, хотя проблема, которую я решаю, не редкость, она все еще неочень проверено разработчиками.Ура!