标题
最近项目里有一个需求,用户开始导航之后,要将导航的路径传到服务器,在另一个客户端显示所有用户的导航路径。
## 思路 ##
要实现这个功能,最关键的一点就是当用户导航之后如何取到路径。笔者是用的高德地图,在这里说说我的实现。
见上一篇博客,我们已经初始化了一个导航视图。导航开始之后,会有一个回调方法
- (void)driveManagerOnCalculateRouteSuccess:(AMapNaviDriveManager *)driveManager;
该回调方法的driveManager中有一个AMapNaviRoute类对象,这个就是导航路线类。
获取到该对象后
#pragma mark - 根据取到的AMapNaviRoute 画线
- (void)showRouteWithNaviRoute:(AMapNaviRoute *)naviRoute
{
NSLog(@"1---%@",naviRoute);
if (naviRoute == nil)
{
return;
}
// 清除旧的overlays
if (_polyline)
{
[_map removeOverlay:_polyline];
_polyline = nil;
}
NSUInteger coordianteCount = [naviRoute.routeCoordinates count];
CLLocationCoordinate2D coordinates[coordianteCount];
NSLog(@"%@",naviRoute.routeCoordinates);
for (int i = 0; i < coordianteCount; i++)
{
AMapNaviPoint *aCoordinate = [naviRoute.routeCoordinates objectAtIndex:i];
coordinates[i] = CLLocationCoordinate2DMake(aCoordinate.latitude, aCoordinate.longitude);
[uploadRouteDic setValue:[NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@"%f",aCoordinate.latitude],@"latitude",[NSString stringWithFormat:@"%f",aCoordinate.longitude],@"longitude", nil] forKey:[NSString stringWithFormat:@"%d",i]];
}
_polyline = [MAPolyline polylineWithCoordinates:coordinates count:coordianteCount];
[_map addOverlay:_polyline];
/********************************************/
NSLog(@"要上传的字典:%@",uploadRouteDic);
}
//在地图上根据数据画线
- (MAOverlayRenderer *)mapView:(MAMapView *)mapView rendererForOverlay:(id <MAOverlay>)overlay {
if ([overlay isKindOfClass:[MAPolyline class]])
{
MAPolylineRenderer *polylineRenderer = [[MAPolylineRenderer alloc] initWithOverlay:overlay];
polylineRenderer.lineWidth = 8.f;
polylineRenderer.strokeColor = [UIColor colorWithRed:1 green:0 blue:0 alpha:0.6];
polylineRenderer.lineJoinType = kMALineJoinRound;
polylineRenderer.lineCapType = kMALineCapRound;
return polylineRenderer;
}
return nil;
}
我们通过这两个方法,就可以取到路径,并且在地图上绘制路径了。注:高德地图最新SDK绘制overlay的方法与之前不太一样,上面代码为最新SDK的方法