zoukankan      html  css  js  c++  java
  • ArcGIS紧凑型缓存存储格式分析

    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#编码开发工具,紧凑型和松散型切片可以互转了,经测试在平板桌面都没问题 。

     
  • 相关阅读:
    文件管理
    字符编码
    字典练习,统计字符串中单词出现次数
    字典有关练习:购物车
    列表及列表操作方法
    字符串及用法
    变量,程序交互,基本数据类型
    /usr/bin/ld: i386:x86-64 architecture of input file `command.o' is incompatible with i386 output
    混合云存储系统开发总结
    小记6月27
  • 原文地址:https://www.cnblogs.com/janehlp/p/9531589.html
Copyright © 2011-2022 走看看