地图缓存使用指南

地图缓存使用指南,第1张

地图缓存是快速访问地图服务的有效方式。目前流行在线地图服务,如 Google Maps,MapBar,BingMaps 等,对浏览速度和并发性要求都比较高,均采用缓存地图的方式满足快速访问地图的需求。

什么是地图缓存?

作为一种改善地图浏览用户体验的优化策略,地图缓存实际上是包含了一系列比例尺一定地图范围内的地图切片文件。在服务端创建地图缓存之后,客户端的地图 *** 作,比如放大、缩小和平移,都会向服务端发送一个 URL 请求,此时,服务端按照请求返回预先生成的地图切片,从而达到降低服务器负担并快速显示地图,提升地图浏览速度。

为什么使用地图缓存?

使用地图缓存时,只需要付出一次生成缓存的代价,就可以提供给客户端地图显示以快速的响应速度。地图缓存是以一系列不同比例尺下地图图片形式提供的,因此不受普通地图显示上的约束,比如地图信息量的大小、地物的复杂程度、是否带有标注、所使用的地图符号等的限制。因为,一般情况下,地图渲染的细节越多,承载的信息量越丰富,同等环境下,绘制矢量地图就越慢,但使用了地图缓存,客户端在获得了同样显示效果的同时,等待时间却大大缩短。特别是对海量数据,使用缓存可以极大地提高浏览速度,加速地图响应时间,最终提升用户体验。

SuperMap产品针对海量数据,在保证客户端高效访问的前提下,提供了一套完备的二三维缓存体系。SuperMap iDesktop 8C 桌面产品支持生成影像缓存、地形缓存、矢量缓存、模型缓存、地图缓存,还可以对场景直接生成场景缓存。生成的缓存数据可以有多种方式在地图窗口或者场景窗口中加载,也可以部署到服务端进行发布,方便客户端进行浏览。

为了帮助用户深入了解SuperMap 的地图缓存技术、有效使用 SuperMap 产品生成和发布地图缓存等,本专题文档就地图缓存的相关内容进行阐述。

1. 地图缓存的目录结构

地图缓存根据缓存版本的不同,生成的缓存目录的层次结构有所不同。SuperMap iDesktop 7C 桌面应用程序目前支持六种不同版本的地图缓存。

地图缓存的目录结构主要采用 iServer6R,iServer 2.0和 IS .NET 三种缓存策略,按照不同比例尺级别进行分层,都是从指定范围的左上角为起点进行分块。其中2.0,2.1版本的地图缓存均采用 IS .NET 缓存策略,3.0,3.1版本的地图缓存均采用 iServer 2.0 缓存策略,4.0和5.0版本的缓存采用 iServer 6R 缓存策略。

下面就这三种缓存版本的目录结构做详细的介绍。

1.1. iServer 6R 缓存目录结构说明

iServer 6R 是针对 UGC(UniversalGIS Class)系列产品的缓存策略。UGC 系列产品包括桌面产品 SuperMap iDesktop 7C,组件式二次开发平台 SuperMap Objects Java/.NET 6R 以及服务器产品 SuperMapiServer 6R 系列产品。

iServer 6R 缓存策略生成的地图缓存目录共分为六个层次,如下图所示:

图:iServer 6R 缓存目录结构说明

第一层:缓存根目录,用来保存不同缓存文件。缓存根目录名称可以为任意名称。在生成缓存时,通过输入缓存名称来指定。

第二层:地图缓存目录。默认名称格式为:MapName_Width×Height。其中MapName

是地图名称,Width 和 Height 是16进制的图片宽高,例如,目录为世界地图_Day_100×100,表示地图缓存的图片大小为256像素×256像素。

第三层:不同比例尺级别缓存目录。分层目录名称为设置的比例尺大小。如15625000文件夹下保存的是比例尺为15625000时的所有地图切片文件。

第四层:不同空间区域行号缓存目录。目录名称以空间区域(缓存范围)行号命名。所谓空间区域指的是将地图按照网格分块算法将一幅地图分为多个块,每一个分块表示一个空间区域。每个空间区域的宽高都是缓存块的整数倍。区域内至少有一张图片,行号就是空间区域在指定范围内的行数,行号从上到下逐渐增大,用十进制表示。范围扩大时行号可以是负值。

第五层:不同空间区域列号缓存目录。目录名称以空间区域(缓存范围)列号命名。列号就是空间区域在指定范围内的列数,列号从左到右逐渐增大,用十进制表示。范围扩大时列号可以是负值。

第六层:缓存图片文件名称。其格式为:RowxCol_MapHashCode.postfix。其中 Row 表示缓存图片按缓存块划分的行号索引,Col 表示缓存图片按缓存分块划分的列号索引,Row 和 Col 都可以是负数。MapHashCode 表示当前比例尺下地图的16位 HashCode 值,postfix 是缓存图片文件的扩展名。如上图中的名称为 0000×0001_108F8B08FIX.png 的图片,0000为行号,0001为列号,108F8B08FIX 为16位的 HashCode,png 为图片的扩展名。

1.2. IS .NET 缓存目录结构说明

IS .NET 缓存策略是SuperMap 最早使用的缓存策略,也是通过分层分块生成切片文件(影像)的思路进行缓存构建,并且从坐标系、地图、图层风格以及数据范围等方面考虑了缓存更新问题。它主要是 SFC(SuperMap Foundation Class)系列产品采用的缓存策略。

IS .NET 缓存策略生成的二维地图缓存目录共分为五个层次,如下图所示:

第一层:缓存根目录,用来保存不同缓存文件。缓存根目录名称可以为任意名称。在生成缓存时,通过输入缓存名称指定。

第二层:地图缓存目录。默认名称格式为:MapName_Width×Height。其中 MapName 是地图名称,Width 和 Height 是16进制的图片宽高,例如,目录为世界地图_Day_100×100,表示地图缓存的图片大小为256像素×256像素。

第三层:不同比例尺级别缓存目录。分层目录名称为设置的比例尺大小。如15625000文件夹下保存的是比例尺为15625000时的地图切片文件。

第四层:图片索引目录。按照网格分块算法将某一比例尺下的地图切割成多个图幅,每一个图幅在整个地图中都有一个索引值对应,形为:X×Y。X,Y 分别表示图幅在地图分块队列中的列号和行号。

第五层:缓存图片文件名称。其格式为:centerIndex_MapHashCode.postfix,其中centerIndex 表示缓存图片的中心点索引,MapHashCode 表示当前比例尺下地图的 HashCode 值,postfix 是缓存图片文件的扩展名。如上图所示,名称为332×7361_108F8BFIX.png 的图片,(332,7361)表示图片中心点的索引值,108F8BFIX 为当前比例尺下地图的 HashCode 值,png 为图片的后缀名。

1.3. iServer 2.0 缓存目录结构说明

iServer 2.0 缓存策略与 IS .NET缓存策略相似,是 SuperMap iServer 2.0 产品的缓存策略。iServer 2.0 缓存策略生成的二维地图缓存目录共分为五个层次,如下图所示:

图:iServer 2.0缓存目录结构说明

第一层:缓存根目录,用来保存不同缓存文件。缓存根目录名称可以为任意名称。在生成缓存时,通过输入缓存名称指定。

第二层:地图缓存目录,文件夹名称格式为:MapName_Width×Height,其中 Width×Height 按照10进制计算,即目录名称为:地图名称_图片的实际宽×高。

第三层:不同比例尺级别缓存目录。分层目录名称为设置的比例尺大小。如15625000文件夹下保存的是比例尺为15625000时的地图切片文件。

第四层:缓存图片索引目录({Index_x})。将地图分块之后,对每一个图片分别建立索引号。对每一副地图,按照要生成的缓存图片大小生成 M×N 个图片,每一列为 Index_x,x 的值从 0 到 N-1,每一行为 Index_y,y 的值从 0 到 M-1。在这一层,目录名为每一列的索引名,即 Index_x,表示每一列图片缓存的目录。

第五层:缓存图片文件名称。其格式为:Index_y.postfix的值。如上图中选中的文件夹,文件夹5表示 X 索引号(Index_x)为5 ,图片名称15表示 Y 索引号(Index_y)为15,则此图片位于地图目录的第5行第15列。

2. 地图缓存存储类型

SuperMap 缓存有两种存储类型,即原始型与紧凑型。

2.1. 原始型

当缓存储存类型为原始型,切片文件以单独的图片文件格式存放在磁盘上,不对数据进行压缩,能够直接读取。地图缓存数据直观地表现为多个文件夹下的原始图片。

原始型存储方式具有以下特点:

l 可以直接读取,比较直观。

l 占用磁盘空间大,不太易于管理,拷贝和迁移不太方便。

l 对密级较高的数据,不能设置密码。

2.2. 紧凑型

当缓存储存类型为紧凑型时,对原始的切片文件采用一定的压缩和加密机制,在结构上采用一组文件替代原始的图片格式的缓存机制。此时,不同比例尺文件夹下的缓存数据将表现为一组文件,该组文件包括两个部分:索引文件(.sc)、一组数据文件(.sc00和*.lock)。如下图所示,为世界地图_Day 生成的紧凑型缓存文件。

其中,索引文件为 *.sc(SuperMapCache File)格式;数据文件为 *.scXX(SuperMap Caceh File Data)格式,这里的 XX 不是两个字母,是两个16进制数字(00~FF)。目前只支持两位16进制数,所以最多支持256个数据文件。数据文件的个数由缓存数据的大小决定,一个数据文件最大为2G。

与原始型相比,紧凑型存储方式具有以下优势:

3. 使用地图缓存的建议

为了更高效的生成地图缓存,可以从以下几个方面考虑:

3.1. 选择合适的比例尺系列

为了充分利用缓存数据,同时实现多级缩放,可以对地图设置多个比例尺。多设置一些比例尺级别,可以在浏览过程中比较顺畅,不会出现比较大的跳跃。在地图制作的过程中要考虑要素在不同的比例尺下是否需要显示。比如在1:100000的比例尺下,河流是线状的,在1:10000的比例尺下,可能需要讲河流显示为面状的。在小比例尺下,一些注记不需要显示,但随着比例尺的扩大,注记可能需要显示。这种情况下,需要考虑合适的比例尺级别了。

3.2. 缓存路径设置

如果生成的缓存要在 SuperMapiServer Java 6R 服务端发布,可以直接将 SuperMap iDesktop 7C 桌面缓存路径设置为 SueprMap iServer Java 6R 的出图路径下,即 %SuperMapiServer Java_HOME%webappsiserveroutputcache,否则缓存切片拷贝可能会花费比较长的时间。

3.3. 适当的制作地图

制作地图的过程中,可以考虑对线型或者文本对象使用反走样,对过小的对象进行过滤。

对地图中的过小对象使用过滤条件进行过滤,可以在不影响地图所承载的信息量的情况下,将提升地图浏览速度。

进行反走样后矢量地图中的线型和文本看起来更光滑,提高视觉感受,但会造成性能下降。因此在使用反走样时,需要浏览速度和性能之间寻找一种平衡,既要达到浏览效果最佳,也要保证浏览速度。

对比较复杂的地图,要避免对象节点过多,可以考虑进行光滑处理或者重采样。

3.4. 保持工作空间一致

工作空间中的地图参数决定了SuperMap iServer Java 使用的缓存文件中缓存图片的命名,因此需要保证用于制作缓存的工作空间中的地图和用于 SuperMap iServer Java 发布的工作空间中的地图一致。影响参数包括地图的风格、数据的连接情况、图层顺序、默认比例尺、地图范围等。因此制作完成缓存后,尽量不要对工作空间的地图进行修改,以保证发布的地图与用于制作缓存的地图一致。

同时需要保持地图中所有地图可用,所有图层对应的数据集合数据源在工作空间中都存在,不能有无对应数据源和数据集的空连接图层。对数据集中对象的编辑,如添加、删除、更新等,不会影响编辑区域以外的缓存图片(如果需要的话,只需更通过 SuperMap iServer 更新这部分区域的缓存即可)。

3.5. 合理设置地图缓存范围和索引范围

可以为频繁访问的地图区域生成缓存,以降低生成和存储缓存的成本。例如,在访问世界地图时,对于广大的无人区,可以不生成缓存。

用 SuperMap iDesktop7C 生成地图缓存时建议将索引范围设置为发布地图的整幅地图范围,以便与SuperMap iServer Java 缓存索引范围保持一致。在根据需求修改地图缓存的范围信息时,也需要保持索引范围是整幅地图范围。

缓存图片与出图设备无关的特性

利用 SuperMap iDesktop7C 制作地图缓存时,如果 SuperMap iDesktop 7C 所在的计算机与 SuperMap iServer Java 所在的计算机不是同一台机器,有可能由于设备显示地图分辨率不同,从而不同设备上的缓存不能很好地一起使用,例如拼接出现问题等。SuperMap iDesktop 7C 桌面支持配置地图缓存与设备显示分辨率无关。具体的 *** 作方法如下:

3.6. 在 SuperMap iDesktop7C 桌面端生成的地图缓存,如需在 SueprMap iServer Java 服务端发布,需要注意,生成紧凑型地图缓存时,不要对缓存进行加密,即不要设置密码,否则在服务端发布会有问题。

分类: 电脑/网络 >>互联网

问题描述:

谁听说过“桌面地图”?桌面地图跟网络地图有什么区别?

解析:

桌面计算机运行(浏览)的地图程序,简称“桌面地图”,通常需要本地计算机具有地图数据库(GIS数据),软件如同普通程序。

网络地图是依靠远程计算机(服务器)获得地图资源,通常本地计算机没有运行程序代码。比如,很多Java写的地图服务网站即为此类,注意,这里还分为位图数据和GIS数据两类,后者更为强大,但速度也要慢的多。

还有类似GooleEarth的客户端程序的地图,与网络地图类似,但运行速度快一些。

用API也可以。用别的软件包也可以。如果要用复杂的图形界面,用许多“控制”(按钮,滑块,Edit,树,色彩选择)那么用MFC比较方便,可以节省自己很大的工作量。控制台应用程序设计概念与视窗程序设计概念不同。老观念搁置起来,接收新概念。入门难一点,入门后就如鱼得水了。MFC函数很多,用到哪,可以查到哪,不用的不去管它。东西太多,不要学了再用,而是边用边学,用哪学哪,不用的不学。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12031556.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存