qtree文件结构解析(二)
by 蔡建良 2020-9-19
四叉树(QuadTree,q-tree,q-树)-现有瓦片的一组引用
名称:q2-xxx-q.yyy q2 -服务数据,解密和解压缩后可用 xxx-是瓦片的数字名称 q - q-tree yyy-qtree版本 示例:q2-020310311303103-q.306
q树为历史模式(新一代树)
名称:qp-xxx-q.yyy qp-服务数据,解密和解压缩后可用 xxx-是瓦片的数字名称 q - q-tree yyy-qtree版本 示例:qp-020022323230230-q.37
有关四叉树数据包的一些说明:
根四叉树数据包q2-0将包含四个级别: “” 1 “ 0”-“ 3” 4 “ 00”-“ 33” 16 “ 000”-“ 333” 64 每个其他的四叉树数据包(即q2-0301)将包含五个级别, 但第一层是这棵本地树的根, 条目未定义,因为它与先前的四叉树数据包重叠 “” 1(未定义!) “ 0”-“ 3” 4 “ 00”-“ 33” 16 “ 000”-“ 333” 64 “ 0000”-“ 3333” 256 例如,四叉树数据包q2-0301将不提供任何详细信息 对于blist 301,因为它包含在q2-0中。 但是它将提供 blist 3010、3011、3012,...,3013333的详细信息。
下载影像第0层qtree文件: http://kh.google.com/flatfile?q2-0-q.888
下载完成后是二进制文件,用密钥解密,解密后是zlib格式的压缩数据,解压后才是真实的qtree数据。
Quadtreepacket.cpp文件包含qtree结构。
文件头部32个字节:
buf << magic_id 4字节 值=32301
<< data_type_id 4字节 值=1
<< version 4字节 值=2
<< num_instances 4字节 结点个数
<< data_instance_size 4字节 节点大小=32个字节
<< data_buffer_offset 4字节
<< databuffersize 4字节
<< meta_buffer_size; 4字节
qtree节点部分:每个节点占用32个字节
buf<<children 1字节 位段(bitfield)用于识别节点图像类型
<<kByteFiller 1字节 占位
<<cnode_version 2字节 节点版本
<<image_version 2字节 影像版本
<<terrain_version 2字节 地形版本
<<num_channels 2字节
<<kWordFiller 2字节 占位
<<type_offset 4字节
<<version_offset 4字节
<<image_neighbors 8字节
<<image_data_provider 1字节
<<terrain_data_provider 1字节
<< kWordFiller 2字节