MKMapView中多个位置之间的最短路径

时间:2015-12-22 09:32:29

标签: ios iphone google-maps ipad mkmapview

我正在尝试使用MKMapView开发一个需要绘制最短路径的应用程序。以下是该场景。 我有5到10个坐标,它们被绘制在地图上。我必须绘制最短的路径来覆盖我当前位置的所有这些位置。这是一个旅行应用程序,所以需要显示最佳距离。请分享你的想法。我想到从当前位置找到每个点的距离,但这需要一次发送多个请求,这似乎是非常繁忙的过程,因为该点可以是10到100。 Google Maps SDK中是否有针对此问题的解决方案? 期待伟大的想法和建议。 提前谢谢......

2 个答案:

答案 0 :(得分:0)

您可以使用Google地图路线api(https://developers.google.com/maps/documentation/directions/#JSON)查找最短路径。那你有两个选择:

  • GMSMapView
  • 中绘制
  • 使用谷歌地图SDK解码谷歌返回的编码polilyne,并将其转换为 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

答案 1 :(得分:0)

您可以使用Directions API。您可以通过设置起点,航点(可选)和终点来绘制多个位置。例如,您要绘制5个不同的位置,当前位置(起点),然后是三个航路点或中途停留点和终点。 Directions API会根据您放置航点的顺序自动计算距离。如果您使用optimize:true,路线可以重新计算,这样做会重新排列航路点,从而使您从起点到终点的距离最短。由于航路点的限制数量,这仅对最多8个位置有效。有一种解决方法,其目的是使第一条路线的最后一个航点(终点航线)成为下一条航线的起点。以下是link供您参考,code也在参考文献中。