cesium加载显示点云及倾斜模型(3dtiles)

        在cesium加载并显示点云或者倾斜模型之前,需要将不同格式的数据转为3dtiles,具体参考倾斜、点云转3dtiles(osgb、las转3dtiles)切片

        转换完成后就可以写代码将其加载到cesium地球上。

//定位到该地点
viewer.camera.flyTo({
	destination : Cesium.Cartesian3.fromDegrees(112.96906,34.70736,5000.0)
});

qingxie = new Cesium.Cesium3DTileset({ 
    url: "./models/tileset.json",    
}); 
          
viewer.scene.primitives.add(qingxie); 

        有时候加载完成并不能贴地显示,或者贴地显示的具体位置和底图位置不一致,需要对模型位置进行调整。

qingxie.readyPromise.then(function(qingxie) {
         //高度偏差,向上是正数,向下是负数
         var heightOffset = -210;
         //计算tileset的绑定范围
         var boundingSphere = songlingqingxie1.boundingSphere;
         //计算中心点位置
         var cartographic = Cesium.Cartographic.fromCartesian(boundingSphere.center);
         //计算中心点位置的地表坐标
         var surface = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, 0.0);
         //偏移后的坐标
         var offset = Cesium.Cartesian3.fromRadians(cartographic.longitude+0.000015, cartographic.latitude-0.000015, heightOffset);
         var translation = Cesium.Cartesian3.subtract(offset, surface, new Cesium.Cartesian3());
        //tileset.modelMatrix转换
        qingxie.modelMatrix = Cesium.Matrix4.fromTranslation(translation);
});

        最后模型成功准确显示在地图上。

        点云的代码基本一样。

dianyun =new Cesium.Cesium3DTileset({ 
         url: "./models/ding/tileset.json",
}); 
viewer.scene.primitives.add(dianyun);

dianyun.readyPromise.then(function(dianyun) {
         //高度偏差,向上是正数,向下是负数
         var heightOffset = -210;
         //计算tileset的绑定范围
         var boundingSphere = songlingdianyun1.boundingSphere;
         //计算中心点位置
         var cartographic = Cesium.Cartographic.fromCartesian(boundingSphere.center);
         //计算中心点位置的地表坐标
         var surface = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, 0.0);
         //偏移后的坐标
         var offset = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, heightOffset);
         var translation = Cesium.Cartesian3.subtract(offset, surface, new Cesium.Cartesian3());
         //tileset.modelMatrix转换
         dianyun.modelMatrix = Cesium.Matrix4.fromTranslation(translation);
});

        显示如下。点云是自己用python按高程进行渲染的,同样需要进行渲染的可以参考博客(点云按照高程进行渲染(可自定义颜色——python)内附RGB0-1间取值对应表)。

  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值