Cesium实战系列文章总目录
:
传送门
1.实现效果
2.实现方法
参考官方沙盒示例实现调整3D tiles离地高度功能:传送门
2.1实现思路
(1)获取瓦片中心点
坐标
根据Cesium3Dtileset
类的BoundingSphere
属性获取瓦片的外包矩形,再根据center
属性,获取当前瓦片中心点的坐标。API:传送门
(2)获取瓦片中心点的原始坐标
和拉伸后坐标
使用Cartesian3
类的fromRandians
方法,确定瓦片中心点移动前后的笛卡尔坐标
(经纬度不变,只有高度值改变),API:传送门
(3)计算偏移量
使用Cartesian3
类的subtract
方法计算两点之间的坐标偏移量
,API:传送门
(4)建立转换矩阵
根据两点之间的偏移量,使用Matrix4
类的fromTranslation
方法建立转换矩阵
,API:传送门
(5)偏移3D tiles
使用Cesium3DTileset
类的modelMatrix
方法,偏移瓦片,API:传送门
2.2具体代码
核心实现代码如下所示:
let tileset = new Cesium.Cesium3DTileset({
url: '.././data/sz/tileset.json'
});
// 判断加载完成
tileset.readyPromise.then((tileset) => {
viewer.scene.primitives.add(tileset);
viewer.zoomTo(tileset);
// 将3d tiles离地高度抬升100米
let cartographic = Cesium.Cartographic.fromCartesian(
tileset.boundingSphere.center
);
let surface = Cesium.Cartesian3.fromRadians(
cartographic.longitude,
cartographic.latitude,
0.0
);
let offset = Cesium.Cartesian3.fromRadians(
cartographic.longitude,
cartographic.latitude,
100.0
);
let translation = Cesium.Cartesian3.subtract(
offset,
surface,
new Cesium.Cartesian3()
);
tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation);
})