地图切片原理

何为瓦片?瓦片即网格中有多个类似瓦片的图片集。瓦片数据是将矢量或影像数据进行预处理,采用高效的缓存机制(如金字塔)形成的缓存图片集,采用“级、行、列”方式进行组织,可在网页中快速加载。因此,瓦片地图加载是根据客户端请求的地图范围和级别,通过计算行列号获取对应级别下网格的瓦片(即服务器预裁剪的图片),由这些瓦片集在客户端形成一张地图,如图2.21所示。

矢量地图和瓦片地图各具特点和优势,两者可以结合应用。矢量地图实时生成,可以对地图数据进行在线编辑、查询分析,具有空间关系,能够支持网络分析、空间分析等应用。瓦片地图由于是预裁剪的缓存图片集,网络加载速度较快、效果好,常作为地图底图。

地图切片:采用预生成的方法存放在服务器端,然后根据用户提交的不同请求,把相应的地图瓦片发送给客户端的过程,它是一种多分辨率层次模型,从瓦片金字塔底层到顶层,分辨率越来越低,但表示的地理范围不变。

地图缓存:又称地图瓦片,是一个包含了不同比例尺下整个地图范围的地图切片的目录,即一个缓存的地图服务就是能够利用静态图片来快速地提供地图的服务。

这里对地图切片中的几个重要的概念做一个介绍。

原理

几个概念:

在地图切片中,有三个比较重要的概念:1、切片原点;2、切片分辨率(比例尺);3、初始切片范围。下面就这三个概念做一个简单的介绍。

地图切片原理图

1、切片原点

切片原点一般有两种:1、左上角;2、左下角。大部分切片的算法是采用左上角作为切片原点的,例如天地图、Arcgis Server等等。切片原点定义了我的第一个 256*256的切片的位置。

2、切片分辨率(比例尺)

切片分辨率和比例尺是一一对应的。比例尺指的是我的图上一个单位代表实际多少距离,而分辨率代表屏幕上一个像素代表实际多少距离,因此,当定了一个之后,对应的另一个也确定了。

切片分辨率(比例尺)影响的是在该分辨率(比例尺)下,我的一个256*256的图片的实际坐标是多少。

3、初始化切片范围

初始化切片范围是指我是按照多大的图幅进行切片的,影像的是我在这个分辨率下总共能切多少个256*256的切片。

地图切片技术

了解了地图切片的原理,我们会发现只要传递给地图服务器相关参数(原点、分辨率),通过 GetMap 就可以获取切片了。当然,具体技术实现中,还要做一些计算、遍历等操作。

获取切片的方法,可以参见前面 GetMap 中说明的例子。

地图切片软件工具

在地图切片的概念出现后,很多地图切片的软件工具被开发出来 。一方面,原来的 GIS 软件添加了地图切片的功能;另一方面,也有一些独立的地图切片工具被开发出来 。

在 Python 方面,较早得到应用的是 TileCache ,但是这个工具的最后版本( tilecache-2.11 )发布于 2010 年10月份,后来已经不再开发。TileCache是一个兼容 WMS-C(about)服务的实现,该服务由 Metacarta 根据 BSD 许可发布。(以及,TileCacheConfig ) TileCache源自FOSS4G 2006大会上的一个决议,即后来OGC的一个推荐标准WMS Tiling Client Recommendation。所谓TileCache就是由于普通的WMS服务器在接收请求后要读取数据、生成图片,效率过低。那么对于那些一成不变的 地图服务,可以在WMS前端封装一个TMS(Tiled Map Service)。TileCache首先缓存一些WMS地图图片,提供一个伪WMS,仅在适当的时候和后台的WMS服务器交互。这个标准的实现是由OpenLayers的后台MetaCarta提供的,名字就叫做TileCache。TileCache以 Python实现,可以通过 cgi 方式部署和运行在 Apache 和 IIS 以及 Python 的 WSGI 上。

TileCache提供了一个基于 Python的WMS-C/TMS 服务,具有可插拔的缓存机制和渲染后端。在最简单的用例中,TileCache 只需要对磁盘的写访问权、运行 Python CGI脚本的能力以及要缓存的WMS。有了这些资源,您可以为任何WMS服务器创建自己的本地基于磁盘的缓存,并在任何支持 WMS-C 的客户机(如 OpenLayers)或任何支持TMS的客户机(如 OpenLayers 和 WorldKit)中使用该结果。

MapProxy 是在 TileCache 之后使用 Python 语言开发的另外一个地图切片工具,其完善程度要比 TileCache 大的多,另外目前的开发依旧很活跃。

地图切片的工具

用户浏览系统地图时,MapServer实时根据MapFile文件解析绘制并切割生成影像返回客户端显示。在小规模的本地数据量时响应时间可以接受,但是当本地数据量很大并且有大量用户访问时,其响应时间将难以忍受。本课题将利用开源的tilecache技术实现地图瓦片的缓存,利用缓存机制提高系统响应效率。

地图瓦片思想来自层次细节模型,可以将整幅影像切分成大量分辨率相同的小幅影像。用户查看影像时,一般一次仅对少量瓦片进行操作,服务器放送相应的瓦片即可满足用户需求。这样,在减少网络数据量减轻带宽的同时,再利用Ajax技术使瓦片自行在服务器异步下载,可大大减少系统响应时间,改善用户体验。

地图瓦片采用金字塔结构(四叉树)按比例进行分组组织和存储。每提高一个浏览级别,就是用四张较高分辨率的影像代替较低分辨率的1张影像。

金字塔模型中每个瓦片被赋予唯一的ID号,利用编号索引,结合用户操作地图所需要的分辨率,能够确定需要哪一编号的瓦片。

tilecache是一个地图瓦片缓冲器,由MetaCarta Labs开发,用来缓存地图的软件,只有当请求地图不在tilecache缓冲文件中,才会与服务交互请求地图(李振华, 刘鹏, 王真, & 高承夏, 2009),配合OpenLayers使地图显示更快。Tilecache支持多种OGC服务标准和多种服务器,并且支持多种请求格式和方式。

tilecache缓存机制

tilecache缓存机制

MapCache 是一个实现平铺缓存以加快对WMS层的访问的服务器。主要目标是快速且易于部署,同时提供基本功能(以及更多!)地图切片缓存解决方案。

MapProxy是由 Python 开发的地图切片工具。其简单易用,用于生产环境也很稳定。