先来看下转换后,贴到Cesium地球上的效果:
摄影测量的格式常见的有:
osgb
dae
gltf
b3dm
…其他格式
我们公司用的主要是OSGB格式。OSGB是OSG三维引擎定义的数据格式.OSG为二进制格式,然后贴上纹理图片就可以转换为OSGB。但是Cesium不能直接显示OSGB,需要转换下。文章末尾提供下载地址。
一、通常拿到OSGB的文件如下:
二、下载下来3dtiles工具后解压,进入3dtiles工具根目录,运行命令:
3dtile.exe [FLAGS] [OPTIONS] --format--input--output
示例:
3dtile.exe -f osgb -i E:\Data\hgc -o E:\Data\hgc_test
3dtile.exe -f osgb -i E:\Data\dayanta -o E:\Data\dayanta_test -c "{\"offset\": 0}"
3dtile.exe -f shape -i E:\Data\aa.shp -o E:\Data\aa --height height
3dtile.exe -f gltf -i E:\Data\TT\001.osgb -o E:\Data\TT\001.glb
3dtile.exe -f gltf -i E:\Data\TT\001.obj -o E:\Data\TT\001.glb
3dtile.exe -f b3dm -i E:\Data\aa.b3dm -o E:\Data\aa.glb
参数说明:
-c, --config { "x": 120, "y": 30, "offset": 0 , // 模型最低面地面距离 "max_lvl" : 20 // 处理切片模型到20级停止 } -f, --format-i, --input-o, --output--height, 指定shapefile的高度字段 (转shapefile时,必须参数)
命令行参数详解:
-c 在命令行传入 json 配置的字符串, json 内容为选配,可部分实现。 -f 输入数据格式: osgb 为倾斜摄影格式数据, shape 为shapefile面数据, gltf 为单一通用模型转gltf, b3dm 为单个3dtile二进制数据转gltf。 -i 输入数据的目录,osgb数据截止到 "\Data" 目录的上一级,其他格式具体到文件名。 -o 输出目录。最终结果位于输出目录的 "\Data" 目录。 --height 高度字段。指定shapefile中的高度属性字段。
数据说明:
1、倾斜摄影数据:
倾斜摄影数据仅支持 smart3d 格式的 osgb 组织方式, 数据目录必须有一个 “Data” 目录的总入口, “Data” 目录同级放置一个 metadata.xml 文件用来记录模型的位置信息。
每个瓦片目录下,必须有个和目录名同名的 osgb 文件,否则无法识别根节点。
正确的目录结构如下:
--metadata.xml --Data\Tile_000_000\Tile_000_000.osgb
2、shapefile 数据:
目前仅支持 shapefile 的面数据,可用于建筑物轮廓批量生成 3dtile。
shapefile 中需要有字段来表示高度信息。
仅支持WGS84坐标系的矢量数据。
3、通用模型转gltf:
支持 osg、osgb、obj、fbx、3ds 等单一通用模型数据转为 gltf、glb 格式。
转出格式为 2.0 的gltf,可在以下网址验证查看: https://pissang.github.io/clay-viewer/editor/
4、b3dm 数据转gltf:
支持将 b3dm 单个文件转成 glb 格式,便于调试程序和测试数据
三、稍等片刻,等转换完毕,可以看到如下图所示的截图:
四、在Cesium中加载OSGB倾斜摄影:
//加载OSGB倾斜摄影数据 var tileset = new Cesium.Cesium3DTileset({ //相对路径 url: './modle/dayanta/Tileset.json', }); //添加到球体上 viewer.scene.primitives.add(tileset); //定位过去 viewer.zoomTo(tileset);