浏览器版本低!无法浏览完整内容,建议升级或更换浏览器。
更新时间:2021-09-20
绘制3D模型简介

Since 6.4.0起iOS地图SDK支持3D模型(BMK3DModelOverlay)绘制,用于在地图上展示3D模型,目前支持obj+mtl文件格式模型加载。

绘制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运行程序
效果如下:

3dModel_1.png

  • 文档根本没法用

  • 文档水平很差

  • 文档水平一般

  • 文档不错

  • 文档写的很好

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

提交反馈

拖动标注工具

添加矩形标注

添加箭头标注

完成

取消