ArcGIS For Server10.3版本新型紧促切片缓存(.bundle)文件读取及合并
前言
… ArcGIS10.3版本发布以后,Esri推出了新的紧凑型切片缓存格式,与之前.bundle+.bundlex文件组合相比,新的格式将所有信息整合到一个.bundle文件中,增强了用户的访问体验。
一、.bundle文件名
…bundle文件的文件名与其中所包含的切片有关,例如R0000C0000、R1c280C10080、R38680C20180、不难看出R和C分别作为行和列的标识,后跟的数字为16进制数,代表该切片中第一张图片的行号与列号,以R1c280C10080为例,换算成10进制为R:115328,C:65664,故该切片中的切片的行列号为:(R:115328,C:65664),(R:115328,C:65665)…(R:115456,C:65791),(R:115456,C:65792),共计128*128张,在索引中的排列方式为第115328行的第65664-65792列,第115329行的65664-65792列,以此类推。
二、读取.bundle
…Esri官方在2016年就在Github上将由松散切片合成紧凑型切片缓存的方法开源了:https://github.com/Esri/raster-tiles-compactcache
…本文根据将由该项目中的代码区推导读取.bundle文件的方法
直接说结论:
.bundle文件由3部分组成:①64个字节的头文件+②128 * 128 * 8个字节的索引③单个PNG切片的字节流
以下代码是Esri项目中创建.bundle文件的代码
BSZ2 = 128 * 128
IDXSZ = BSZ2 * 8
def init_bundle(fname):
'''Create an empty V2 bundle file'''
fd = open(fname,"wb")
# Empty bundle file header, lots of magic numbers
header = struct.pack("<4I3Q6I",
3, # Version
BSZ2, # numRecords
0, # maxRecord Size
5, # Offset Size