2.1. 地图切片原理

什么是地图切片?切片是网格中类似于拼贴图片的集合。切片数据是通过对矢量或图像数据进行预处理并使用高效的缓存机制(如金字塔)形成的缓存图像集。它是以级别、行、列的方式组织起来的,可以快速加载到网页中。因此,切片地图加载是根据客户端请求的地图范围和级别,通过计算行数和列数,得到对应级别(即服务器预切的图像)下的网格的切片,并在客户端收集这些切片形成地图,如图2.21所示。

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

地图切片:将预先生成的方法存储在服务器端,然后根据用户提交的不同请求将对应的地图切片发送给客户端的过程。它是一个多分辨率的分层模型,从切片金字塔的底部到顶部,分辨率越来越低,但地理范围保持不变。

地图缓存:也被称为地图切片,它是一个目录,包含不同比例的整个地图范围的地图切片,即缓存的地图服务是一种可以使用静态图像快速提供地图的服务。

以下是地图切片中的几个重要概念的介绍。

2.1.1. 原理

若干概念:

在地图切片中,有三个重要的概念:1.切片原点;2.切片分辨率(比例);3.初始切片范围。以下是对这三个概念的简要介绍。

地图切片逻辑示意图

地图切片逻辑示意图

1.切片原点

通常有两种类型的切片原点:1.左上角;2.左下角。大多数切片算法使用左上角作为切片的原点,如Sky Map、ArcGIS Server等。切片原点定义了我的第一个256*256切片的位置。

2.切片分辨率(比例)

切片分辨率和比例一一对应。比例尺指的是地图上单位所代表的实际距离。分辨率表示由屏幕上的一个像素表示的实际距离,因此当确定一个像素时,相应的距离也被确定。

切片分辨率(比例)会影响其中一张256-256图像在该分辨率(比例)下的实际坐标。

3.初始化片的范围

初始切片范围指的是切片图像的大小,图像是在此分辨率下256*256个切片的数量。

2.1.2. 地图切片技术

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

要获取切片,可以查看上一节 GetMap 中所示的示例。

2.1.3. 地图切片软件工具

地图切片的概念出现后,人们开发了许多地图切片的软件工具。一方面,原有的地理信息系统软件增加了地图切片功能;另一方面,也开发了一些独立的地图切片工具。

在Python端,早些时候使用的是TileCache,但该工具的最后一个版本(tilecache-2.11)是在2010年10月发布的,此后就停产了。TileCache是Metacarta在BSD许可下发布的符合WMS-C(About)的服务的实现。(和TileCacheConfig)TileCache起源于FOSS4G 2006会议上的一项决议,这是后来的OGC建议,即WMS Tabling客户端建议。所谓的TileCache是因为普通的WMS服务器在收到请求后需要读取数据并生成图片,效率太低。对于那些不变的地图服务,可在WMS的前端封装一个TMS(切片地图服务)。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,目前的开发仍然非常活跃。

2.1.4. 地图切片工具

当用户浏览系统地图时,MapServer根据MapFile文件实时解析、绘制和剪切图像,并将图像返回给客户端。当本地数据量较小时,响应时间可以接受,但当本地数据量较大且用户访问数量较大时,响应时间将难以忍受。本课题将使用开源的切片缓存技术来实现地图切片缓存,并使用缓存机制来提高系统的响应效率。

地图切片的思想来自于层次细节模型,它可以将整个图像分割成大量相同分辨率的小图像。当用户查看图像时,一般一次只操作少量的切片,服务器可以发送相应的切片来满足用户的需求。如此一来,在减少网络数据量、降低带宽的同时,利用AJAX技术让切片在服务器端异步下载,可以大大减少系统响应时间,提升用户体验。

地图切片按金字塔结构(四叉树)按比例分组组织和存储。浏览级别每增加一次,就会使用四张分辨率较高的图像,而不是一张分辨率较低的图像。

金字塔模型中的每个地图切片都有一个唯一的ID号。使用编号的索引,结合用户操作地图所需的分辨率,可以确定需要哪个编号的切片。

Tiecache是MetaCarta Labs开发的地图切片缓冲区,用于缓存地图。只有当请求的地图不在切片缓存文件中时,它才会与服务交互来请求地图(李振华,刘鹏,王震,高成霞,2009),通过OpenLayers来使地图显示更快。Tilecache支持多种OGC服务标准和多台服务器,支持多种请求格式和方法。

Tilecache缓存机制

Tilecache缓存机制

Tilecache缓存机制

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

MapProxy是由Python开发的地图切片工具,使用方便,生产环境稳定。