Google Java-клиент API Api направление неверный маршрут

Я использую клиентский API Google JAVA для получения маршрута и отправляю запрос следующим образом:

   DirectionsRoute[] routes = DirectionsApi.newRequest(context)
                              .mode(TravelMode.DRIVING)
                              .origin(start).destination(end)
                              .waypoints(wayPoints).await();

Он также возвращает маршрут, но если я строю этот маршрут, он не строит его на реальном маршруте, а просто принимает прямую линию, как показано на рисунке. Как это исправить?

2 ответа

Решение

На самом деле я сделал ошибку после того запроса, я получаю результат с маршрутами, но он также содержит объект полилинии кодировщика, который состоит из массива lat lang. Как только мы декодируем это, мы получим все точки, чтобы мы могли получить маршрут правильно. Результат состоит из массива маршрутов, каждый элемент состоит из массива ветвей (детали маршрута между двумя точками), и каждая ветвь состоит из шагов, наконец, каждый шаг имеет закодированную полилинию, чтобы получить правильный латланг, вы должны декодировать эту полилинию и использовать ее.

Большое спасибо, вы мне очень помогли, я сейчас работаю с xamarin и использую этот метод для декодирования полилинии.

        private List<LatLng> DecodePolyline(string encodedPoints)
    {
        if (string.IsNullOrWhiteSpace(encodedPoints))
        {
            return null;
        }

        int index = 0;
        var polylineChars = encodedPoints.ToCharArray();
        var poly = new List<LatLng>();
        int currentLat = 0;
        int currentLng = 0;
        int next5Bits;

        while (index < polylineChars.Length)
        {
            // calculate next latitude
            int sum = 0;
            int shifter = 0;

            do
            {
                next5Bits = polylineChars[index++] - 63;
                sum |= (next5Bits & 31) << shifter;
                shifter += 5;
            }
            while (next5Bits >= 32 && index < polylineChars.Length);

            if (index >= polylineChars.Length)
            {
                break;
            }

            currentLat += (sum & 1) == 1 ? ~(sum >> 1) : (sum >> 1);

            // calculate next longitude
            sum = 0;
            shifter = 0;

            do
            {
                next5Bits = polylineChars[index++] - 63;
                sum |= (next5Bits & 31) << shifter;
                shifter += 5;
            }
            while (next5Bits >= 32 && index < polylineChars.Length);

            if (index >= polylineChars.Length && next5Bits >= 32)
            {
                break;
            }

            currentLng += (sum & 1) == 1 ? ~(sum >> 1) : (sum >> 1);

            var mLatLng = new LatLng(Convert.ToDouble(currentLat) / 100000.0, Convert.ToDouble(currentLng) / 100000.0);
            poly.Add(mLatLng);
        }

        return poly;
    }
Другие вопросы по тегам