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

 

ArcGIS紧凑型缓存存储格式分析的更多相关文章

  1. ArcGIS for Server 10.3.X 新型紧凑型缓存的解读和应用

    早在2010年年底,牛魔王中王在其博客空间牛魔王的作坊中对ArcGIS 10中推出的紧凑型缓存格式进行了详细的解读,详见<ArcGIS 切片缓存紧凑文件格式分析与使用>.紧随着的4年时间里 ...

  2. 【转】ArcGIS地图缓存制作简介

    [PDF]ArcGIS 地图缓存制作简介 - Esri中国 ArcGIS地图缓存制作简介 制作好的电子地图只有发布为服务后才能为更多的用户所查看与使用.ArcGIS Server 为共享 GIS 资源 ...

  3. ArcGIS紧凑型切片读取与应用3-紧凑型批量转分散型(附源码)

    1.前言 上篇介绍了webgis动态加载解析紧凑型切片的例子,现在我们使用逆向思维实现紧凑型切片转分散型切片,在实际工作中很有用处,紧凑型切片易于拷贝,但读取只有部署到Arcgis Server才行. ...

  4. ArcGIS紧凑型切片读取与应用2-webgis动态加载紧凑型切片(附源码)

    1.前言 上篇主要讲了一下紧凑型切片的的解析逻辑,这一篇主要讲一下使用openlayers动态加载紧凑型切片的web地图服务. 2.代码实现 上篇已经可以通过切片的x.y.z得对应的切片图片,现在使用 ...

  5. 【Web技术】276- WebView缓存原理分析和应用

    前言 混合式开发,在产品体验以及页面加载速度的体验上已经非比以往的.今日早读文章由@unclechen分享. 正文从这开始- 一.背景 现在的App开发,或多或少都会用到Hybrid模式,到了WebV ...

  6. Thrift的TCompactProtocol紧凑型二进制协议分析

    Thrift的紧凑型传输协议分析: 用一张图说明一下Thrift的TCompactProtocol中各个数据类型是怎么表示的. 报文格式编码: bool类型: 一个字节. 如果bool型的字段是结构体 ...

  7. Howto: 如何将ArcGIS Server缓存移动到新服务器

     Howto: 如何将ArcGIS Server缓存移动到新服务器 文章编号: 33686 软件: ArcGIS Server 9.2, 9.3, 9.3.1 操作系统: Windows 2000, ...

  8. ArcGIS Server 缓存服务切图范围

    win10 + Server 10.4 +  ArcMap 10.4  ArcGIS Server 缓存服务分为创建服务后手动建立缓存和创建服务时同时自动建立缓存两种. 10.2帮助文档:http:/ ...

  9. Memcached缓存瓶颈分析

    Memcached缓存瓶颈分析 获取Memcached的统计信息 Shell: # echo "stats" | nc 127.0.0.1 11211 PHP: $mc = new ...

随机推荐

  1. jcifs windows 域账户单点登录(转)

    1.首先从http://jcifs.samba.org 这个站点下载 jcifs-1.3.2.jar包. 2.把这个包放到相应的lib文件下面. 3.对web.xml文件进行配置,添加如下内容 < ...

  2. ios 视图既显示阴影又有圆角实现

    //- (UIView *)createTimeBG //{ //    UIView *view = [[UIView alloc]init]; //    view.backgroundColor ...

  3. SQL注入之Sqli-labs系列第四十六关(ORDER BY注入)

    0X1查看页面 0x2源码 <?php include("../sql-connections/sql-connect.php"); $id=$_GET['sort']; i ...

  4. 2017年java面试题库【归类篇】

    一.Java基础 1.String类为什么是final的. 2.HashMap的源码,实现原理,底层结构. 3.说说你知道的几个Java集合类:list.set.queue.map实现类咯... 4. ...

  5. 【leetcode】492. Construct the Rectangle

    problem 492. Construct the Rectangle 参考 1. Leetcode_492. Construct the Rectangle; 完

  6. 线性求第k大

    快排变种. 快排每次只进行部分排序,进入左边或者右边或者当前mid就是答案. 据说期望值是O(n) 然后STL中的 nth_element也是用这个思想. #include <cstdio> ...

  7. java将字符串存入oracle的Blob中

    Blob内存放的是字节数组,需使用String的getBytes获得该字符串的字节数组(注意字符集编码),然后存入Blob. Oracle的Blob字段比较特殊,他比long字段的性能要好很多,可以用 ...

  8. webpack 学习之旅

    首先理解wepack的打包原理:一般单页面应用,你的页面都会引入一个类似bundle.js的文件,在react项目中,你会发现index.html中并没有引入css,那么css哪里去了?答案是它被打包 ...

  9. 手机连接fiddler之后,安装证书的方法

    1. 手机设置锁屏密码2. 手机连接fiddler测试网络3. 手机访问    电脑IP:fiddler设置的端口号4. 点击页面中的链接,下载并安装证书,随意命名即可 (还不清楚证书有啥用,先记录下 ...

  10. 认识Ajax

    1.简介 AJAX 相当于异步 JavaScript 和 XML,是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网 ...