更新时间:2022-10-27
Android 自7.5.4版本起支持3D建筑物单体动画控制。
提供一个坐标点,返回该点附近的建筑物信息,最后以三维动画的形式将建筑物展示在地图上。
绘制3D建筑物
首先通过BuildingSearchOption 类来设置3D建筑物的属性,然后检索对应的建筑物,最后在检索成功的回调中绘制建筑物:
示例代码如下:
// 设置3D建筑物的属性 BuildingSearchOption buildingSearchOption = new BuildingSearchOption(); buildingSearchOption.setLatLng(requestLatlng); // 检索对应的建筑物 mBuildingSearch = BuildingSearch.newInstance(); mBuildingSearch.requestBuilding(buildingSearchOption); // 在检索成功的回调中绘制建筑物 mBuildingSearch.setOnGetBuildingSearchResultListener(new OnGetBuildingSearchResultListener() { @Override public void onGetBuildingResult(BuildingResult result) { if (null == result || result.error != SearchResult.ERRORNO.NO_ERROR) { return; } // 楼面外接矩形建造器 LatLngBounds.Builder boundsBuilder = new LatLngBounds.Builder(); // 获取建筑物的各个楼面 for (int i = 0; i < result.getBuildingList().size(); i++) { BuildingInfo buildingInfo = result.getBuildingList().get(i); // 创建3D棱柱覆盖物选类配置参数 PrismOptions prismOptions = new PrismOptions(); prismOptions.setBuildingInfo(buildingInfo); prismOptions.setSideFaceColor(0xAAFF0000); prismOptions.setTopFaceColor(0xAA00FF00); // 控制3D建筑物单体动画 prismOptions.setAnimation(true); // 设置3D建筑物开始显示层级 prismOptions.setShowLevel(17); LatLngBounds latLngBounds = mBaiduMap.getOverlayLatLngBounds(prismOptions); if (latLngBounds != null) { boundsBuilder.include(latLngBounds.northeast).include(latLngBounds.southwest); } // 添加3D棱柱 mBuildingPrism = (Prism) mBaiduMap.addOverlay(prismOptions); } // 获取3D建筑物外接矩形 latLngBounds = boundsBuilder.build(); // 令3D建筑物适应地图展示 if (latLngBounds != null) { mBaiduMap.setMapStatus(MapStatusUpdateFactory.newLatLngBounds(latLngBounds)); } } });
绘制效果如图:
生长动画如下: