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

文档全面上新

更科技的视觉体验,更高效的页面结构,快前往体验吧!

体验新版
更新时间:2023-04-20
绘制3D建筑物简介

提供一个坐标点,返回该点附近的建筑物信息,最后以三维动画的形式将建筑物展示在地图上。自6.5.7版本开始支持楼层动画效果。

绘制3D建筑物

首先通过BMKBuildingSearch 类来设置3D建筑物的属性,然后检索对应的建筑物,最后在检索成功的回调中绘制建筑物:
注意:建筑物检索为高级服务,需申请AK权限。

1发起建筑物检索
Objective-C
BMKBuildingSearch *buildingSearch = [[BMKBuildingSearch alloc] init];
buildingSearch.delegate = self;
BMKBuildingSearchOption *opeiton = [[BMKBuildingSearchOption alloc] init];
opeiton.location = CLLocationCoordinate2DMake(40.03558, 116.34301);
[buildingSearch buildingSearch:opeiton];

2实现代理方法,获取检索结果,添加3D建筑物数据
Objective-C
#pragma mark - BMKBuildingSearchDelegate
- (void)onGetBuildingResult:(BMKBuildingSearch *)searcher result:(BMKBuildingSearchResult *)result errorCode:(BMKSearchErrorCode)error {
    if (error != BMK_SEARCH_NO_ERROR) return;
    _isBuilding = NO;
    [_mapView removeOverlays:_mapView.overlays];
        
    NSMutableArray<BMKPrismOverlay *> *buildingOverlays = [NSMutableArray array];
    BMKMapRect resultRect = BMKMapRectNull;
    for (BMKBuildInfo *info in result.buildingList) {
        BMKPrismOverlay *prismOverlay = [[BMKPrismOverlay alloc] init];
         prismOverlay.buildInfo = info;
        /// 楼层高度  (仅对建筑物生效)
        prismOverlay.floorHeight = _floorHeight;
        [buildingOverlays addObject:prismOverlay];
        BMKMapRect bounds = BMKMapRectFromEncodedGeoPoints(info.paths, BMKEncodePointTypeBuildInfo);
        if (BMKMapRectIsNull(resultRect)) {
            resultRect = bounds;
        } else {
            resultRect = BMKMapRectUnion(resultRect, bounds);
        }
        if (info.label == 1) {
            _coord = info.center;
            _buildingHeight = info.height;
        }
    }
         
    [_mapView fitVisibleMapRect:resultRect edgePadding:UIEdgeInsetsMake(10, 40, 40, 40) withAnimated:YES];
    [_mapView addOverlays:buildingOverlays];
    self.buildings = [buildingOverlays copy];
    _isBuilding = YES;
}

3实现代理方法生成对应的view
Objective-C
- (__kindof BMKOverlayView *)mapView:(BMKMapView *)mapView viewForOverlay:(id<BMKOverlay>)overlay {
    if([overlay isKindOfClass:[BMKPrismOverlay class]]){
        BMKPrismOverlayView *prismOverlayView = [[BMKPrismOverlayView alloc] initWithPrismOverlay:overlay];
        /// 建筑物侧面纹理
        prismOverlayView.sideTextureImage = [UIImage imageNamed:@"64x32"];
        /// 顶部颜色
        prismOverlayView.topFaceColor = [UIColor colorWithRed:1.f green:0.f blue:0.f alpha:1.f];
        /// 自定义建筑物的楼层颜色 (仅对建筑物生效)
        prismOverlayView.floorColor = [UIColor colorWithRed:1.f green:0.f blue:0.f alpha:0.5f];
        /// 自定义建筑物的楼层侧面纹理 (仅对建筑物生效)
        prismOverlayView.floorSideTextureImage = [UIImage imageNamed:@"64x32"];
        /// 自定义建筑物的楼层动画类型
        prismOverlayView.buildingFloorAnimateType = kBMKBuildingFloorAnimateSlow;
        /// 是否开启生长动画 (仅对建筑物生效),默认YES
        prismOverlayView.isGrowthAnimation = YES;
        /// 动画结束代理
        prismOverlayView.delegate = self;
        return prismOverlayView;
    }      
    return nil;
}

4设置楼层增长动画
Objective-C
- (__kindof BMKOverlayView *)mapView:(BMKMapView *)mapView viewForOverlay:(id<BMKOverlay>)overlay {
    if([overlay isKindOfClass:[BMKPrismOverlay class]]){
        BMKPrismOverlayView *prismOverlayView = [[BMKPrismOverlayView alloc] initWithPrismOverlay:overlay];
        /// 建筑物侧面纹理
        prismOverlayView.sideTextureImage = [UIImage imageNamed:@"64x32"];
        /// 顶部颜色
        prismOverlayView.topFaceColor = [UIColor colorWithRed:1.f green:0.f blue:0.f alpha:1.f];
        /// 自定义建筑物的楼层颜色 (仅对建筑物生效)
        prismOverlayView.floorColor = [UIColor colorWithRed:1.f green:0.f blue:0.f alpha:0.5f];
        /// 自定义建筑物的楼层侧面纹理 (仅对建筑物生效)
        prismOverlayView.floorSideTextureImage = [UIImage imageNamed:@"64x32"];
        /// 自定义建筑物的楼层动画类型
        prismOverlayView.buildingFloorAnimateType = kBMKBuildingFloorAnimateSlow;
        /// 是否开启生长动画 (仅对建筑物生效),默认YES
        prismOverlayView.isGrowthAnimation = YES;
        /// 动画结束代理
        prismOverlayView.delegate = self;
        return prismOverlayView;
    }      
    return nil;
}

效果如下:
https://mapopen-pub-iossdk.cdn.bcebos.com/map/v6_5_7/3dBuilding.mp4
  • 文档根本没法用

  • 文档水平很差

  • 文档水平一般

  • 文档不错

  • 文档写的很好

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

提交反馈

拖动标注工具

添加矩形标注

添加箭头标注

完成

取消