2016-04-19 4 views
1

Итак, я использую API-интерфейс направлений в своем приложении. Однако, когда я декодирую полилинию из ответа, она не отображается правильно. Вот мой код:Google Maps декодирован GMSPath неверный iOS

//Construct request URL 
    NSString *urlString = [NSString stringWithFormat: 
          @"%@?origin=%f,%f&destination=%f,%f&sensor=true&key=%@", 
          @"https://maps.googleapis.com/maps/api/directions/json", 
          userMarker.position.latitude, 
          userMarker.position.longitude, 
          place.coordinate.latitude, 
          place.coordinate.longitude, 
          @"AIzaSyDrtHA-AMiVVylUPcp46_Vf1eZJJFBwRCY"]; 

    NSURL *directionsURL = [NSURL URLWithString:urlString]; 


    //Get directions in JSON format 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     NSData* data = [NSData dataWithContentsOfURL:directionsURL]; 

     NSError* error; 

     if(data){ 
      NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; 

      //Parse JSON and plot route on map 
      NSDictionary *routes = [json objectForKey:@"routes"][0]; 

      NSDictionary *route = [routes objectForKey:@"overview_polyline"]; 
      NSString *overview_route = [route objectForKey:@"points"]; 

      //Clear map from previous polylines 
      [self.mapView clear]; 

      //Make polyline 
      GMSPath *path = [GMSPath pathFromEncodedPath:overview_route]; 
      GMSPolyline *polyline = [GMSPolyline polylineWithPath:path]; 
      polyline.strokeWidth = 4; 
      polyline.strokeColor = [UIColor darkGrayColor]; 
      polyline.map = self.mapView; 
}); 

А вот ломаная:

enter image description here

Как вы можете, видеть, что это не по пути правильно. Тем не менее, мне кажется, что недостаточно очков, чтобы иметь надлежащие изгибы.

EDIT: Это происходит только 50% времени, иногда оно отображается правильно, иногда это не так.

Что я могу делать неправильно?

ответ

0

Идя этим (который использует JS API вместо JSON API, который вы используете):

Get a polyline from Google maps directions V3

Похоже, что вы должны использовать линии в каждом из шагов legs в ответе, а не overview_polyline, который, вероятно, должен быть приблизительной приблизительной.

+0

Спасибо, но как это работает отлично в 50% случаев? –

+0

Я предполагаю, что overview_polyline настроен только на упрощенную версию пути, если полный путь слишком сложный (например, над некоторым количеством точек). –

+0

Я думаю, вы правы! Благодаря! Поскольку состояние Документов Google: я думаю, вы правы! Благодаря! Поскольку состояние Документов Google: «overview_polyline содержит объект с одной точкой, который содержит кодированное представление полилинии маршрута. Эта полилиния является приблизительным (сглаженным) путем результирующих направлений». –