2015-12-22 6 views
0

Я пытаюсь разработать приложение с использованием MKMapView, для которого требуется построить кратчайший путь. Следующим является сценарий. У меня есть от 5 до 10 координат, которые нанесены на карту. Мне нужно нарисовать кратчайший путь, чтобы охватить все эти местоположения из моего текущего местоположения. Это приложение для путешествий, поэтому вам нужно показать оптимальное расстояние. Пожалуйста, поделитесь своими мыслями. Я подумал о том, чтобы найти расстояние до каждой точки из текущего местоположения, но это требует одновременного отправки нескольких запросов, что кажется очень суетным процессом, поскольку точка может быть от 10 до 100. Есть ли решение для этого доступно в Google Карты SDK? В ожидании отличных идей и предложений. Заранее спасибо ...Самый короткий путь между несколькими местоположениями в MKMapView

+0

https://developers.google.com/maps/documentation/directions/intro. проверьте направление api вида карты. – Wolverine

ответ

0

Чтобы найти кратчайший путь, вы можете использовать навигационные карты goi api (https://developers.google.com/maps/documentation/directions/#JSON). Тогда у вас есть два варианта:

  • сделать это в GMSMapView
  • Decode кодированного polilyne возвращенного Google с Google Maps SDK и перевести его в MKPolyline, чтобы показать его в MKMapView. Вот фрагмент в Obj-C для второго варианта:

    GMSPath *path = [GMSPath pathFromEncodedPath:encodedPolyline]; 
    if (path.count != 0){ 
        CLLocationCoordinate2D points[path.count]; 
        for (NSInteger i = 0; i < path.count; i++){ 
         CLLocationCoordinate2D coordinate = [path coordinateAtIndex:(NSUInteger) i]; 
         points[i] = coordinate; 
        } 
        MKPolyline *p = [MKPolyline polylineWithCoordinates:points count:path.count]; 
        [self.mapView addOverlay:p]; 
    } 
    

У вас есть некоторые ограничения, используя API направления, вы можете увидеть его здесь: https://developers.google.com/maps/documentation/directions/usage-limits

+0

, но в этом случае маршрут идентифицируется путем пропускания двух точек вправо (начало и конец) ?. В моем случае у меня есть несколько точек и не уверен, что является последней точкой, динамически мне нужно найти последнюю точку, которая будет самое длинное расстояние от текущего местоположения – user2577391

+0

Да, вы должны знать начало и конец маршрута. Вы можете рассчитать расстояние между текущим местоположением и всеми точками с помощью distanceFromLocation: а затем использовать самый длинный, как ваш конец. – lorenzoliveto

0

Вы можете использовать Directions API. Вы можете построить несколько местоположений, установив начальную точку, путевые точки (необязательные) и конечную точку. Например, вы должны построить 5 разных местоположений, ваше текущее местоположение (начальную точку), затем три путевые точки или остановки и конечную точку. API-интерфейс Directions автоматически вычисляет расстояние в соответствии с порядком, в котором вы помещаете путевые точки. Маршруты могут быть пересчитаны, если вы используете optimize:true, тем самым изменив путевые точки, которые дадут вам кратчайшее расстояние от начальной точки до конечной точки. Это действует только на максимум 8 мест из-за количества пределов путевых точек. Существует обходное решение для этого, идея состоит в том, чтобы сделать последнюю путевую точку (конечный маршрут) первого маршрута начальной точкой следующего маршрута. Вот link для вашей справки и code, который также находится в ссылке.

Смежные вопросы