博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ArcGIS紧凑型缓存存储格式分析
阅读量:6429 次
发布时间:2019-06-23

本文共 1285 字,大约阅读时间需要 4 分钟。

by 蔡建良 2018-8-24 

网络中我看到的网文将bundle存储切片数据的方式都没说清或是说错。按照错误方法一样可以在桌面浏览,但在arcgis for android却无法浏览。

bundlx存储格式的分析:

1) 每个bundlx文件的大小都是81952 字节(我这里PacketSize是128),前面16字节 + 每个图片偏移量5字节 * (128 * 128)个切片 + 结尾16字节。
2) 每个bundle文件中最多存储16384个切片。
3) 文件起始16字节和文件结束16字节与索引无关。
起始16字节: { 0x03, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00 }

结束16字节: { 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }

4) 剩余的81920字节数据以5个字节的频率重复,构成了一个对bundle文件的索引。

5) 5个字节是以低位到高位的方式标示了数据的偏移量(在bundle文件中的地址)。
6) bundlx中的每5个字节标示的到底是哪个切片的数据偏移?
按列-行存储:先是1列1行、1列2行……2列1行、22……这样写的位置。
bundle存储格式的分析:
1) 从0x00到0x3b的这些位置都是bundle文件的描述信息。
0-7:      固定
8-b:      所有瓦片当中文件大小最大的一张切片的文件大小的数值
c-f:       固定
10-13:  表示非空文件个数*4
14-17:  固定
18-1b:  bundle文件大小
1c-1f:   固定
20-2b:  固定
2c-2f:   开始行
30-33:  结束行
34-37:  开始列
38-3b:  结束列
2) bundle文件里从0x3c->0x1003c这些位置是为空切片预留了偏移位置。
3) bundle中的切片数据是如何存储?
按行-列存储:先是1行1列、1行2列……2行1行、2行2列……这样写的位置。(这个与bundlx相反)
依次按照行列顺序开始写切片,如果遇到空的,就指向0x3c->0x1003c的空位置段,
比如第r行第c列切片是空的,对应的位置就是 0x3c + ((c - colStart) * this.m_packetSize + (r - rowStart)) * 4。
4) 非空切片在bundle文件里是从0x1003c开始写的。
5) 找到非空切片存储的偏移位置,接下来的4个字节是该image的长度,
然后在这4个字节之后取这些长度的字节就组合成了一副图像。

 

按照以上存储格式采用C#编码开发工具,紧凑型和松散型切片可以互转了,经测试在平板桌面都没问题 。

 

 

转载于:https://www.cnblogs.com/janehlp/p/9531589.html

你可能感兴趣的文章
使用samba搭建便利的web开发环境
查看>>
TEST DESIGN TECHNIQUES: AN OVERVIEW
查看>>
线段树模板
查看>>
第94天:CSS3 盒模型详解
查看>>
HDU 2200
查看>>
关于函数参数
查看>>
iOS--Runtime--Method Swizzling
查看>>
Oracle - 函数
查看>>
牧师与修女的那些事
查看>>
安全加固SELinux
查看>>
pyramid安装和开始
查看>>
在Pyramid的Mako模板中引入helper
查看>>
SqlServer 重置自动编号起始值
查看>>
mysql数据导入导出语句
查看>>
Android 动态类加载
查看>>
sql中的in与not in,exists与not exists的区别
查看>>
百度Ueditor在Nginx环境下目录创建问题
查看>>
PHP error_log() 函数
查看>>
OpenMediaVault 搭建git,ssh无法连接问题
查看>>
浅谈java中"&&"和"&"的区别
查看>>