浏览器版本低!无法浏览完整内容,建议升级或更换浏览器。

WebAPI文档全面上新

新增示例代码、在线运行等功能,帮助您实现快速接入,前往体验吧!

体验新版
更新时间:2023-04-06
绘制3D模型简介

Since 6.4.0起iOS地图SDK支持3D模型(BMK3DModelOverlay)绘制,用于在地图上展示3D模型,目前支持.obj+.mtl文件格式和.gltf模型加载。Since 6.5.7起iOS地图SDK支持.gltf+.bin模型加载,并支持动画播放参数控制。

绘制3D模型
1添加3D模型覆盖物数据
Objective-C
Swift
BMK3DModelOption *option = [[BMK3DModelOption alloc] init];
option.modelName = @"among_us";
option.scale = 1;
option.modelPath = [NSString stringWithFormat:@"%@/Model3D", [NSBundle mainBundle].bundlePath];
_modelOverlay = [BMK3DModelOverlay modelOverlayWithCenterCoordinate:CLLocationCoordinate2DMake(39.914838, 116.40299) option:option];

BMK3DModelOption *option = [[BMK3DModelOption alloc] init];
option.scale = 100;
option.modelName = @"batman";
option.zoomFixed = YES;
option.modelPath = [NSString stringWithFormat:@"%@/Model3D", [NSBundle mainBundle].bundlePath];
_modelBatManOverlay = [BMK3DModelOverlay modelOverlayWithCenterCoordinate:CLLocationCoordinate2DMake(39.914838, 116.40499) option:option];

/**
 向地图View添加Overlay,需要实现BMKMapViewDelegate的-mapView:viewForOverlay:方法
 来生成标注对应的View
 
 @param overlay 要添加的overlay
 */
[_mapView addOverlays:@[self.modelOverlay, self.modelBatManOverlay]];
 
var coords = [CLLocationCoordinate2D]()
        coords.append(CLLocationCoordinate2D(latitude: 39.910, longitude: 116.370))
        coords.append(CLLocationCoordinate2D(latitude: 39.950, longitude: 116.430))
        //表示一个经纬度区域:东北角点经纬度坐标和西南角点经纬度坐标
        let bound = BMKCoordinateBounds(northEast: coords[1], southWest: coords[0])
        let option = BMK3DModelOption.init()
        option.scale = 1
        option.modelName = "among_us"
        option.modelPath = Bundle.main.bundlePath + "/Model3D"
        let modelOverlay: BMK3DModelOverlay = BMK3DModelOverlay(center: CLLocationCoordinate2D(latitude: 39.914838, longitude: 116.40299), option: option)

var coords = [CLLocationCoordinate2D]()
        coords.append(CLLocationCoordinate2D(latitude: 39.910, longitude: 116.370))
        coords.append(CLLocationCoordinate2D(latitude: 39.950, longitude: 116.430))
        //表示一个经纬度区域:东北角点经纬度坐标和西南角点经纬度坐标
        let bound = BMKCoordinateBounds(northEast: coords[1], southWest: coords[0])
        let option = BMK3DModelOption.init()
        option.scale = 100
        option.modelName = "batman"
        option.zoomFixed = true
        option.modelPath = Bundle.main.bundlePath + "/Model3D"
        let modelOverlay: BMK3DModelOverlay = BMK3DModelOverlay(center: CLLocationCoordinate2D(latitude: 39.914838, longitude: 116.40499), option: option)


mapView.addOverlays([modelOverlay, modelBatManOverlay])

2实现代理方法生成对应的view(BMK3DModelOverlayView)
Objective-C
Swift
#pragma mark - BMKMapViewDelegate
/**
 根据overlay生成对应的BMKOverlayView
 
 @param mapView 地图View
 @param overlay 指定的overlay
 @return 生成的覆盖物View
 */
- (BMKOverlayView *)mapView:(BMKMapView *)mapView viewForOverlay:(id<BMKOverlay>)overlay {
    if ([overlay isKindOfClass:[BMK3DModelOverlay class]]) {
        //初始化一个overlay并返回相应的BMK3DModelOverlayView的实例
        BMK3DModelOverlayView *modelOverlayView = [[BMK3DModelOverlayView alloc] initWith3DModelOverlay:overlay];
        return modelOverlayView;
    }
    return nil;
}

//MARK:BMKMapViewDelegate
/**
 根据overlay生成对应的BMKOverlayView
 
 @param mapView 地图View
 @param overlay 指定的overlay
 @return 生成的覆盖物View
 */
func mapView(_ mapView: BMKMapView!, viewFor overlay: BMKOverlay!) -> BMKOverlayView! {
    if overlay.isKind(of: BMK3DModelOverlay.self) {
        let modelView = BMK3DModelOverlayView(overlay as! BMK3DModelOverlay)
        return modelView
    }
    return nil
}
3动画控制
/// 以下只支持带有animations标签的GLTF模型
/// 模型动画是否可用,默认为NO:添加后不执行动画,值为YES时添加后立即按照配置参数执行动画,since 6.5.7
@property (nonatomic, assign) BOOL animationIsEnable;
/// 模型动画重复执行次数,默认0:动画将一直执行动画,since 6.5.7
@property (nonatomic, assign) NSInteger animationRepeatCount;
/// 当前模型动画索引值,since 6.5.7
@property (nonatomic, assign) NSInteger animationIndex;
/// 模型动画倍速,默认:1.0,since 6.5.7
@property (nonatomic, assign) CGFloat animationSpeed;
Objective-C
Swift
BMK3DModelOption *option = [[BMK3DModelOption alloc] init];
option.scale = 2;
option.modelName = @"scenes";
option.type = BMK3DModelTypeGLTF;
option.zoomFixed = YES;
option.rotateX = 90;
option.animationIsEnable = YES;
option.animationIndex = 0;
option.animationSpeed = 1;
option.animationRepeatCount = 0;
option.modelPath = [NSString stringWithFormat:@"%@/Model3D", [NSBundle mainBundle].bundlePath];
let modelOption = BMK3DModelOption()
modelOption.scale = 2
modelOption.modelName = "scenes"
modelOption.rotateX = 90
modelOption.type = BMK3DModelTypeGLTF
modelOption.modelPath = String(format: "%@/Model3D",Bundle.main.bundlePath)
modelOption.animationIsEnable = true
modelOption.animationSpeed = 1
modelOption.animationRepeatCount = 0
modelOption.animationIndex = 1
4运行程序
效果如下:
https://mapopen-pub-iossdk.cdn.bcebos.com/map/v6_5_7/3dModel_2.MP4
  • 文档根本没法用

  • 文档水平很差

  • 文档水平一般

  • 文档不错

  • 文档写的很好

如发现文档错误,或对此文档有更好的建议,请在下方反馈。问题咨询请前往反馈平台提交工单咨询。

提交反馈

拖动标注工具

添加矩形标注

添加箭头标注

完成

取消