在3dtile的制作过程中,如果原始的数据中,模型数据存在高程,在生成的3dtile中也会存在高程的信息,这时就需要在系统中,底图数据的高程也要存在,这样才能和3dtile进行匹配,不过,Cesium的开发文档中,也提供一个在数据加载完成后,动态调整3dtile高度的方式,有一定限制是整体调整3dtile的高度,即改变3dtile的整体高程差。
API文档参照:https://cesiumjs.org/Cesium/Build/Documentation/Cesium3DTileset.html
具体实现的代码如下:
//定义viewer
var viewer = new Cesium.Viewer('cesiumContainer');
var tileset = new Cesium.Cesium3DTileset({
url: '3dtile在线地址',
show: true
});
//加载3dtile
viewer.scene.primitives.add(tileset);
//3dtile加载完成后执行
tileset.readyPromise.then(function(tileset) {
// 定位到3dtiles的位置
viewer.camera.viewBoundingSphere(tileset.boundingSphere, new Cesium.HeadingPitchRange(0, -20, 0));
//高度偏差,向上是正数,向下是负数
var heightOffset = -1063.0;
//计算tileset的绑定范围
var boundingSphere = tileset.boundingSphere;
//计算中心点位置
var cartographic = Cesium.Cartographic.fromCartesian(boundingSphere.center);
//计算中心点位置的地表坐标
var surface = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, 0.0);