地图下载2之天超图瓦片格式
接上一篇《地图下载1之天地图瓦片解析》,我们已经知道了天地图的瓦片格式,现在来分析一下超图中瓦片的存储结构。
其实,在GIS领域,只有像ESRI这样强大公司的SHP文件等能通用外,很多数据、格式等都不通用,都"各自为政",为此在数据交换、共享时带来很多不便。
前方有坑
我们来到超图的地图缓存目录,可以看到WMTS瓦片的结构,根目录(img)下的"JP_256_"表示 格式及分辨率;"1-16"表示 级别,"10438x51979.jpg"表示 行x列,而81、406表示什么意思呢?
方式一: 由于SuperMap的资源太少,遇到问题先去官方帮助找答案,而官方的解释未指明其计算方法:
"第四层:不同空间区域行号缓存目录。目录名称以空间区域(缓存范围)行号命名。所谓空间区域指的是将地图按照网格分块算法将一幅地图分为多个块,每一个分块表示一个空间区域。每个空间区域的宽高都是缓存块的整数倍。区域内至少有一张图片,行号就是空间区域在指定范围内的行数,行号从上到下逐渐增大,用十进制表示。范围扩大时行号可以是负值。
第五层:不同空间区域列号缓存目录。目录名称以空间区域(缓存范围)列号命名。列号就是空间区域在指定范围内的列数,列号从左到右逐渐增大,用十进制表示。范围扩大时列号可以是负值。"
方式二:我直接向超图技术人员咨询,最后得到了一个电话号码:400-8900-866,也算一种收获!
方式三:在问答社区提问,希望有好心人或官方技术人员解答一下:http://qa.supermap.com/38415,十多天后,收到了没用的答案,说这是内部算法,建议用平台软件来切片(如果平台能高效完成我的任务,我也不必费尽周折)。
超图不如ESRI是有原因的,为什么不能抱着开放的态度,让大家来使用它,大家使用率越高,反而对其有好处。这又不是什么高深算法和关键技术!
求人不如求己
无奈,只得自己来反编译、读懂它的计算方法,其实很简单,行列号的计算公式如下:
int row = (x < 0) ? (x / 128 - 1) : (x / 128);
int col = (y < 0) ? (y / 128 - 1) : (y / 128);
其中,row级别目录下的行文件夹名称,col表示行目录下的列文件夹名称, x表示瓦片的行号,y表示瓦片的列号。(可根据下载范围、分辨率计算出瓦片的起始、结束行列号,计算方法可参考下一讲)
注意:在C#中,"/"号现在整形运算是取整,浮点运算时为除法运算,上面的公式表示向下取整。
这样,就可以根据图片的名称来计算存储的位置,即结构目录就清楚了。如下:
…\JP_256_\1\0\0:
…\JP_256_\2\0\0:
…\JP_256_\3\0\0:
作者:我也是个傻瓜
出处:http://www.cnblogs.com/liweis/
签名:成熟是一种明亮而不刺眼的光辉。