Cesium Terrain Builder
输出瓦片默认是zib压缩后的,在业务中如果传输不是问题,反而增加浏览器的解压处理,希望能支持输出非压缩瓦片。
针对此需求,修改代码并重新编译。
一、代码分析
1、输出数据对象
文件格式:主要为heightmap-1.0、quantized-mesh-1.0,其类图结构如下:
- MeshTile为quantized-mesh-1.0格式数据对象。
- TerrainTile为heightmap-1.0格式数据对象。

2、瓦片生成器
- Meshtiler 用来生成MeshTile对象。
- TerrainTiler 用来生成TerrainTile对象。

3、迭代器和序列化器

4、ctb-tile.exe的主要流程

二、功能扩展
1、增加非压缩支持。
- ctb-tile.cpp中TerrainBuild类,增加参数
// 内部变量
bool gzib;
// 构造函数设置默认值
gzib(false)
// 设置压缩参数
static void setGzib(command_t* command) {
static_cast<TerrainBuild *>(Command::self(command))->gzib = true;
}
- ctb-tile.cpp中main函数解析参数
command.option("-G", "--gzip", "use zib compress file(defalut uncompress)", TerrainBuild::setGzib);
- CTBFileTileSerializer.cpp中,serializeTile函数增加zibFlag参数。根据gzibFlag决定是否使用CTBZFileOutputStream(压缩)或者CTBFileOutputStream(非压缩)
/**
* @details
* Serialize a MeshTile to the Directory store
* 增加zibFlag,是否输出压缩格式文件
*/
bool
ctb::CTBFileTileSerializer::serializeTile(const ctb::MeshTile *tile, bool writeVertexNormals, bool gzibFlag) {
const TileCoordinate *coordinate = tile;
const string filename = getTileFilename(coordinate, moutputDir, "terrain");
const string temp_filename = concat(filename, ".tmp");
if (gzibFlag) {
CTBZFileOutputStream ostream(temp_filename.c_str());
tile->writeFile(ostream, writeVertexNormals);
ostream.close();
} else {
FILE

本文介绍了如何修改CesiumTerrainBuilder源代码,以支持输出非压缩的瓦片数据,并允许用户指定输出的瓦片坐标范围。通过新增参数和调整函数实现这一功能,使得在不需要压缩传输时,减轻浏览器的解压负担,同时提供更灵活的数据生成选项。
最低0.47元/天 解锁文章
822

被折叠的 条评论
为什么被折叠?



