我正在尝试使用MKMapView开发一个需要绘制最短路径的应用程序。以下是该场景。 我有5到10个坐标,它们被绘制在地图上。我必须绘制最短的路径来覆盖我当前位置的所有这些位置。这是一个旅行应用程序,所以需要显示最佳距离。请分享你的想法。我想到从当前位置找到每个点的距离,但这需要一次发送多个请求,这似乎是非常繁忙的过程,因为该点可以是10到100。 Google Maps SDK中是否有针对此问题的解决方案? 期待伟大的想法和建议。 提前谢谢......
答案 0 :(得分:0)
您可以使用Google地图路线api(https://developers.google.com/maps/documentation/directions/#JSON)查找最短路径。那你有两个选择:
使用谷歌地图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也在参考文献中。