Получить кратчайший маршрут из API Google Directions - PullRequest
0 голосов
/ 25 января 2019

У меня есть вопрос. Я хочу получить кратчайший маршрут , и я использовал этот алгоритм. Сначала я собрал ноги всех маршрутов, а затем я выбрал самую короткую ногу. Но я не уверен, правда ли это. Это правильный способ найти кратчайший маршрут? Потому что у меня и у меня нет кратчайшего объекта маршрута в моей руке. Мне нужен объект маршрута, чтобы получить его значение Overview_polyline. Также, если я получу кратчайший маршрут, как узнать его расстояние? Заранее спасибо!

DirectionsApi.getDirections(getGeoContext(), origin, destination)
                .mode(TravelMode.DRIVING)
                .alternatives(true)
                .origin("place_id:"+idPlaceOrigem)
                .destination("place_id:"+idPlaceDestino)
                .units(Unit.METRIC)
                .setCallback(new PendingResult.Callback<DirectionsResult>() {
                    @Override
                    public void onResult(DirectionsResult result) {
                        Set<Long> distances = new HashSet<>();
                        if (result != null && result.routes != null && result.routes.length > 0)
                            for (DirectionsRoute route : result.routes)
                                    for (DirectionsLeg leg : route.legs)
                                        if (leg.distance != null)
                                            distances.add(leg.distance.inMeters);

                        if (!distances.isEmpty()) {

                            ArrayList<Long> sortedList = new ArrayList(distances);

                            distance = min(sortedList);
                            despesaRequest.setKm_distancia(distance/1000);

                        }



                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                updateDistance();
                                Singleton.getInstance().dismissLoading();
                            }
                        });
                    }

                    @Override
                    public void onFailure(Throwable e) {
                        Timber.e(e);
                        runOnUiThread(() -> {
                            Toast.makeText(LancamentoODIIActivity.this, "Não foi possível traçar a rota, por favor tenta novamente mais tarde.", Toast.LENGTH_SHORT).show();
                            Singleton.getInstance().dismissLoading();
                        });
                    }
                });
    }
...