更新时间:2022-04-06
绘制动态轨迹简介
Since6.4.0起支持动态轨迹绘制,开发者可以提供轨迹数据,来动态展示轨迹。支持监听轨迹绘制状态。Since 6.5.6起iOS地图SDK动态轨迹支持渐变色绘制和.gltf+.bin模型加载,并支持动画播放。
绘制动态轨迹
1添加动态轨迹覆盖物数据
Objective-C
Swift
BMKTraceOverlay *traceOverlay = [BMKTraceOverlay traceOverlayWithCoordinates:_coords count:_coordsCount option:self.animationOption]; /// 是否使用渐变色轨迹 /// 注意:要配合strokeColors使用,否则无效 traceOverlay.isGradientColor = YES; /// 是否使用发光轨迹 traceOverlay.isTrackBloom = YES; traceOverlay.bloomSpeed = 5.0f; traceOverlay.delegate = self; [self.mapView addOverlay:traceOverlay]; /// 轨迹动画选项 - (BMKTraceOverlayOption *)animationOption { if (!_animationOption) { _animationOption = [[BMKTraceOverlayOption alloc] init]; _animationOption.animate = YES; // 是否动画 _animationOption.delay = 0.0; // 动画延迟开始时间 _animationOption.duration = 10.0; // 动画时间 _animationOption.fromValue = 0.0; _animationOption.toValue = 1.0; _animationOption.easingCurve = BMKTraceOverlayAnimationEasingCurveLinear; _animationOption.trackMove = NO; // 是否跟踪轨迹动画(地图跟随移动) _animationOption.pointMove = YES; BMKTrace3DModelOption *option = [[BMKTrace3DModelOption alloc] init]; option.scale = 5; option.modelName = @"scenes"; option.rotateX = 90; option.rotateY = -90; option.type = BMK3DModelTypeGLTF; option.modelYawAxis = BMKTraceOverlay3DModelYawAxisY; option.modelPath = [NSString stringWithFormat:@"%@/Model3D", [NSBundle mainBundle].bundlePath]; option.animationIsEnable = YES; option.animationSpeed = 1; option.animationRepeatCount = 0; option.animationIndex = 1; _animationOption.modelOption = option; } return _animationOption; }
/// 轨迹图层 lazy var traceOverlay: BMKTraceOverlay = { let overlay = BMKTraceOverlay(coordinates: &coords, count: UInt(coordsCount), option: traceOverlayOption) overlay!.delegate = self /// 是否使用渐变色轨迹 /// 注意:要配合strokeColors使用,否则无效 overlay!.isGradientColor = true overlay!.isTrackBloom = true overlay!.bloomSpeed = 5.0 return overlay! }() /// 轨迹动画选项 lazy var traceOverlayOption: BMKTraceOverlayOption = { let option = BMKTraceOverlayOption() option.duration = 8.0 option.easingCurve = .linear option.trackMove = true // 是否跟踪轨迹动画,地图跟随移动 option.pointMove = true // 是否点动画 let modelOption = BMKTrace3DModelOption() modelOption.scale = 5 modelOption.modelName = "scenes" modelOption.rotateX = 90 modelOption.rotateY = -90 modelOption.type = BMK3DModelTypeGLTF modelOption.modelYawAxis = BMKTraceOverlay3DModelYawAxis.Y modelOption.modelPath = String(format: "%@/Model3D",Bundle.main.bundlePath) modelOption.animationIsEnable = true modelOption.animationSpeed = 1 modelOption.animationRepeatCount = 0 modelOption.animationIndex = 1 modelOption.modelOption = modelOption return option }()
2实现代理方法生成对应的view(BMKTraceOverlayView)
Objective-C
Swift
#pragma mark - <BMKMapViewDelegate> - (__kindof BMKOverlayView *)mapView:(BMKMapView *)mapView viewForOverlay:(id<BMKOverlay>)overlay { if ([overlay isKindOfClass:[BMKTraceOverlay class]]) { BMKTraceOverlayView *polylineView = [[BMKTraceOverlayView alloc] initWithTraceOverlay:overlay]; /// 纯色 // polylineView.strokeColor = [UIColor blueColor]; // polylineView.fillColor = [UIColor blueColor]; /// 渐变色颜色 /// 注意:strokeColors 长度与轨迹点的个数必须保持一致 polylineView.strokeColors = [_colors copy]; polylineView.lineWidth = 8.0; return polylineView; } return nil; }
/// - BMKMapViewDelegate extension BMKTraceOverlayPage: BMKMapViewDelegate { func mapView(_ mapView: BMKMapView, viewFor overlay: BMKOverlay) -> BMKOverlayView? { let traceOverlayView = BMKTraceOverlayView(overlay: overlay) /// 纯色 traceOverlayView?.fillColor = UIColor.blue traceOverlayView?.strokeColor = UIColor.blue traceOverlayView?.lineWidth = 8 /// 渐变色颜色 /// 注意:strokeColors 长度与轨迹点的个数必须保持一致 traceOverlayView?.strokeColors = colors return traceOverlayView } }
3运行程序
效果如下:
https://mapopen-pub-iossdk.cdn.bcebos.com/map/v6_5_7/dynamictory_1.MP4