-2

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

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

Он возвращается маршрут также, но если я сюжет, что маршрут не выполняется на фактическом маршруте, а просто берет прямую линию, как показано на изображении. enter image description here Как это исправить?

+0

Просьба представить [Минимальный, завершенный, проверенный и читаемый пример] (http://stackoverflow.com/help/mcve), который демонстрирует проблему. – geocodezip

+0

Я беру это направлениеApi из google java api "com.google.maps.DirectionsApi". –

ответ

1

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

0

большое спасибо, вы мне очень помогли, в настоящее время я работаю с 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; 
    }