700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > cesium调整3d tiles离地高度

cesium调整3d tiles离地高度

时间:2024-05-10 22:58:24

相关推荐

cesium调整3d tiles离地高度

文章目录

1.实现效果2.实现方法2.1实现思路2.2具体代码

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);})

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。