切图工具优化的几点总结
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/
1.背景
自影像金字塔技术产生并被OGC作为WMTS规范起,各大互联网公司以及GIS商业软件均利用WMTS服务来进行地图的浏览和共享服务。所谓影像金字塔技术,即将原始影像按一定规则生成的由细到粗不同分辨率的影像集。金字塔的底部是图像的高分辨率表示,也就是原始图像,而顶部是低分辨率的近似。最底层的分辨率最高,并且数据量最大,随着层数的增加,其分辨率逐渐降低,数据量也按比例减少。
基于商业或开源软件虽然可以实现影像金字塔的建立,但是当面对频繁更新的全球尺度影像时,基于影像发布人工切图的工作流程进行实施,无疑是一个巨大的工作量。针对这个现实问题,对影像切图优化做了一系列改进,这里做一个总结。
2. 自动化切图流程设计
流程描述:在影像产品生产后基于FTP上传工具进行上传。服务端实时监控新产品的存入,当检测到新数据存放时则进行自动化切图。切图参数根据项目实际需求进行预设。当金字塔建立完毕,数据会被自动拷贝至所设置的存放地,实现产品存储的高可扩。产品的元数据包括产品的时间、类型、范围、波段、存放地址等均会自动入库以便于影像管理。地理服务端基于影像金字塔自动进行服务发布共享。整个金字塔建立和发布流程无需人工干预。
3. 基于内存切分平滑采样
自动化流程中最核心的一步即是影像金子塔建立。其效率、稳定性、切片重采样效果直接影响到平台的性能。多数商业软件的影像金字塔建立存在耗时过长、操作繁琐、切片模糊、切片边缘锯齿等问题。方案针对这类问题,在目前内存越来越便宜,GPU成本不断降低的背景下,设计了一种基于内存切分平滑采样的金字塔技术。
内存切分技术:将影像一次读入内存,在内存中运用切分算法将影像流进行切块,最后分块写入外盘中。方案的瓶颈主要存在于内存的大小以及数据的读取和输出。其效率基本与文件的复制拷贝一致,是一种可以飞速提升效率的方案。
平滑重采样技术:由于影像是一种栅格数据,当地图级别足够大时则会出现马赛克现象。仔细观察不少商业软件进行的切图均会出现这类问题。方案中在进行切图时会自动检测切片边界像元,使相邻切片之间的像元间进行三次卷积重采样,实现边界过渡数据之间的融合平滑,减少锯齿现象。
4. 金字塔切片算法设计
金字塔核心思想及将一张完整的影像按照重采样和切分的思想进行数据缓存,当前端展示时根据展示范围和分辨率将对应的切片获取进行拼接展示。所以金字塔切片算法的核心即在切片原点、切片大小、切片分辨率三个方面。
假设切图原点为(X0,Y0),切图大小为tilesize,切图分辨率为resolution。
其流程描述为:依据resolution,将地图进行重采样至该分辨率。而此时瓦片的实际地理大小为tilegeosize=(tilesize*resolution),依据tilegeosize将此时重采样后的地图进行切分。每个切片的命名规则为切片的左上角坐标与切图原点和瓦片地理长度之间的运算,即
col = floor((x0 - x)/( tileSize*resolution))
row = floor((y0 - y)/( tileSize*resolution))
5. 前端展示切片拼接算法设计
前端切片展示是切片算法的逆向,即屏幕坐标与地理坐标之间的转换、地理坐标与瓦片行列号之间的转换。同时为了解决前端地图平移时瓦片请求频发触发问题,还需进行超出屏幕可视范围的瓦片预存取方案。其示意图如下:
-----欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/
如果您觉得本文确实帮助了您,可以微信扫一扫,进行小额的打赏和鼓励,谢谢 ^_^