cesuim加载倾斜摄影.OSGB格式三维数据

2 篇文章 0 订阅
1 篇文章 0 订阅

cesuim加载倾斜摄影.OSGB格式三维数据

一、关于OSGB
Open Scene Gragh Binary是OSGB的全称
此类文件的特点:此类数据文件碎、数量多、高级别金字塔文件大等特点难以形成高效、标准的网络发布方案,从而无法实现不同地域、不同部门之间数据共享。cesumi不能直接支持OSGB数据需要转成3dtiles。

正确的OSGB格式数据

  1. 倾斜摄影数据仅支持 smart3d 格式的 osgb 组织方式, 数据目录必须有一个Data 目录的总入口, Data目录同级放置一个 metadata.xml 文件用来记录模型的位置信息。
  2. 每个瓦片目录下,必须有个和目录名同名的 osgb 文件,否则无法识别根节点。
  3. 正确的目录结构如下:
    –metadata.xml
    –Data\Tile_000_000\Tile_000_000.osgb

保证数据结构正确后通过下载转换工具将OSGB数据转成3dtiles:
源码地址: https://github.com/fanvanzh/3dtiles(开源工具)
直接使用下载编译好的程序在这里插入图片描述

该工具要求的osgb文件目录格式需要是这样的:

在这里插入图片描述

转换工具的使用方法

cmd命令行切换到该目录下:

cd D:\3dtiles

运行命令:

3dtile.exe -f osgb -i osgb数据的目录 -o 要输出3dtiles目录

转换好的格式如下:
在这里插入图片描述
一般情况3dtiles自带坐标,可以直接使用如下代码进行加载:

var tileset = new Cesium.Cesium3DTileset({
  url: './3d/tileset.json'
});
viewer.scene.primitives.add(tileset);
viewer.zoomTo(tileset);

如果坐标系有偏移,需要进行矩阵变换

//方法一:
var m = Cesium.Matrix4.fromArray([
      1.0, 0.0, 0.0, 0.0,
      0.0, 1.0, 0.0, 0.0,
      0.0, 0.0, 1.0, 0.0,
      x, y, z, 1.0
    ]);

//方法二:
var translation=Cesium.Cartesian3.fromArray([x, y, z]);
    m= Cesium.Matrix4.fromTranslation(translation);

var tileset = new Cesium.Cesium3DTileset({ 
  url: './3d/tileset.json', //数据路径
  maximumScreenSpaceError: 2, //最大屏幕空间误差
  maximumNumberOfLoadedTiles: 1000, //最大加载瓦片个数
  modelMatrix: m //转移矩阵
});

注意该数值需要不断的调整来确定3D Tile和底图是否贴合,以及位置是否正确(为了便于确定每次修改后3D Tile改变的位置可以通过一段代码直接将视角锁定3D Tile的位置)

var boundingSphere = null;
function zoomToTileset() {
      boundingSphere = tileset.boundingSphere;
      viewer.camera.viewBoundingSphere(boundingSphere, new Cesium.HeadingPitchRange(0, -2.0, 0));
      viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);

    }
 tileset.readyPromise.then(zoomToTileset);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值