3D楼块及楼层动画
功能场景
可用于智能硬件场景的定位到楼和本地生活店铺位置展示,定向展示目标建筑物的3D楼块和楼层,支持按照实际高度绘制带高度的Maker。
Android
//mapopen-website-wiki.bj.bcebos.com/demos/SVID_20230420_172110_1%20(1).mp4
1590746640|//mapopen-website-wiki.bj.bcebos.com/demos/newqrcodes/3D楼块及楼层动画.png
扫码体验
使用产品
下载源码
//mapopen-website-wiki.bj.bcebos.com/demos/3D%E6%A5%BC%E5%9D%97/BaiduMapsApiASDemo.zip
核心接口
类
接口
描述
requestBuilding(BuildingSearchOption option)
发起建筑物检索的请求
BuildingSearch
etOnGetBuildingSearchResultListener(OnGetBuildingSearchResultListener listener)
设置建筑检索的结果监听
OnGetBuildingSearchResultListener
onGetBuildingResult(BuildingResult result)
建筑物检索结果回调
etAnimation(boolean mIsAnimation)
设置建筑物的生长动画
getPoints()
获取建筑物的坐标列表
setFloorColor(int floorColor)
设置建筑物的颜色 格式:0xAARRGGBB
BuildingOptions
setFloorSideTextureImage(BitmapDescriptor floorSideTextureImage)
设置楼块的纹理
setFloorHeight(float floorHeight)
设置楼层的高度
setShowLevel(int showLevel)
设置建筑的显示层级
核心代码
检索建筑物数据(需开通高级权限才可使用)
JAVA
/** LatLng requestLatlng = new LatLng(23.008468, 113.72953); private void searchBuilding() { BuildingSearchOption buildingSearchOption = new BuildingSearchOption(); buildingSearchOption.setLatLng(requestLatlng); mBuildingSearch.requestBuilding(buildingSearchOption); }
复制
深色
复制成功
回调获取建筑数据并自定义展示
JAVA
/** public void onGetBuildingResult(BuildingResult result) { if (null == result || result.error != SearchResult.ERRORNO.NO_ERROR) { return; } buildingList = result.getBuildingList(); // 楼面外接矩形建造器 LatLngBounds.Builder boundsBuilder = new LatLngBounds.Builder(); for (int i = 0; i < buildingList.size(); i++) { BuildingInfo buildingInfo = buildingList.get(i); // 创建3D棱柱覆盖物选类配置参数 BuildingOptions buildingOptions = new BuildingOptions(); buildingOptions.setBuildingInfo(buildingInfo); buildingOptions.setSideFaceColor(0xAAFF0000); buildingOptions.setTopFaceColor(0xAA00FF00); buildingOptions.setBuildingFloorAnimateType(Prism.AnimateType.AnimateSlow); buildingOptions.setFloorHeight(buildingInfo.getHeight()-10); // 控制3D建筑物单体动画 buildingOptions.setAnimation(true); // 设置3D建筑物开始显示层级 buildingOptions.setShowLevel(16); LatLngBounds latLngBounds = mBaiduMap.getOverlayLatLngBounds(buildingOptions); if (latLngBounds != null) { boundsBuilder.include(latLngBounds.northeast).include(latLngBounds.southwest); } // 添加3D棱柱 mBuildingPrism = (Building) mBaiduMap.addOverlay(buildingOptions);; } if (mBaiduMap.getMapStatus() != null && mBuildingPrism != null) { Projection projection = mBaiduMap.getProjection(); Point srcPoint = projection.geoPoint3toScreenLocation(requestLatlng, (int) mBuildingPrism.getBuildingInfo().getHeight()); MarkerOptions markerOptionsA = new MarkerOptions().position(projection.fromScreenLocation(srcPoint)) .icon(bitmapA)// 设置 Marker 覆盖物的图标 .perspective(false) // 关闭近大远小效果 .zIndex(10) .clickable(true); // 设置Marker是否可点击 mMarkerA = (Marker) mBaiduMap.addOverlay(markerOptionsA); } // 获取3D建筑物外接矩形 latLngBounds = boundsBuilder.build(); // 令3D建筑物适应地图展示 if (latLngBounds != null) { mBaiduMap.setMapStatus(MapStatusUpdateFactory.newLatLngBounds(latLngBounds)); MapStatus.Builder builder = new MapStatus.Builder(); builder.zoom(21).overlook(-40.0f); mBaiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build())); } }
复制
深色
复制成功