![3d2746a28b6ff6f6a02bf6ebe02c9552.gif](https://img8.php1.cn/3cdc5/12c27/978/986103453a52fd4c.gif)
摘要
制图过程中遇到图形显示很慢的情况,在 MapGIS中有没相应的优化处理策略呢?本文针对常见的显示速度问题,提供在MapGIS 中相应的处理操作方法。需要提及的是,一些能够提高地图显示速度的功能,往性与美观效果不能同时兼具,用户可根据体情况灵活选择。
01
图形缓存
在客户端缓存图形信息可以避免系统频繁地访问服务器提取相关信息从而一定程度上提高系统的速度和性能。所以, MapGIS 10 缺省情况下,在客户端环境设置 —— 配置信息一项中默认选择“缓冲图形信息”。图形缓存信息是以图层的GUID命名的文件夹,存放在Temp临时目录中。
![ec09962324ecece556d63b704efde716.png](https://img8.php1.cn/3cdc5/12c27/978/96ee5ddf31256469.jpeg)
客户端环境配置
在此界面上同时可设置客户端缓存的相关参数:客户端缓存规模和客户端缓存模式。
客户端缓存模式:客户端缓存可以有不同的配置模式,用户需要根据数据安全性及系统 性能的要求进行权衡。无客户端存的模式提供较低的系统性能,但却有较高的安全性, 适合于成块的频率不高的读写操作。无限制客户端缓存模式使客户端对数据的操作完全缓存在客户端,适合数据量小但性能要求十分高的场合。有限制客户端缓存模式采用定 额的缓存分配策略,在系统缓存资源不足时,通过淘汰部分页面,实现空间的复用,适 合大量数据的缓存,并有较好的性能。
客户端缓存规模:缓存规模是当客户端采用有限制客户端缓存模式的情况下,对缓存池 内存用量进行配置。每一个客户端实例都有自己的全局缓存池,缓存按页进行分配,一 页包含8K的内存空间,增加缓存页数值可以在一定程度上提高系统的速度和性能。但 所有客户端缓存页之和不能超过当前可用的物理内存页数。
02
建立索引
为便于空间目标的定位及各种空间数据操作,提高矢量数据的查询、访问、排序、浏览等操作,MapGIS提供了多种索引方式,包括字段索引和空间索引,如:矩形范围索引、四叉树索引、R树索引、图幅索引等。
字段索引是数据库系统或者其他计算机系统中提供键值快速定位的数据结构。字段索引提供了对特定键值的数据快速访问的能力。
空间索引是指依据空间对象的位置和形状或空间对象之间的某种空间关系按一定的顺序排列的一种数据结构,其中包含空间对象的概要信息,如对象的标识、外接矩形及指向空 间对象实体的指针。作为一种辅助性的空间数据结构,空间索引介于空间操作算法和空间对象之间,它通过筛选作用,大量与特定空间操作无关的空间对象被排除,从而提高空间操作的速度和效率。
土地利用的实际应用中,为提高服务器上(如:Oracle、SQLServer)大数据的读写和分 析速度,一般为其创建的索引类型为“图幅索引”。以下就以“图幅索引”为例说明创建索 引的一些基本依据。
![c6f6f648d9ab9f15ce8084dc526a2fb6.png](https://img8.php1.cn/3cdc5/12c27/978/210b4b82a10c7749.png)
创建图幅索引
存在图幅号:当前选择数据的图元实体已分配图幅号的情况,如地图集中的入库数据,可选择此创建类型;
仅存在分幅数据:当前选择数据的图元实体没有记录其对应图幅号的属性字段,但存在 接图表的情况,可选择此创建类型;
自动分幅:需要自动分幅的情况,提供“指定分幅比例”及“指定分幅矩形”两种方式 供选择。
在建立图幅索引时应尽量避免图幅划分过于稀疏(如分幅数量过少)及图幅划分过于密集(跨越图幅的实体数过多)的情况&#xff1b;理想的分幅数量&#xff1a;>20&&<1000&#xff1b;合适的实体数量&#xff1a; 一般图幅2000 个/幅&#xff0c;跨图幅实体率<20%。系统会综合当前可用内存的条件来动态变化缓 存大小&#xff0c;但受限于最高缓存的设置参数(系统默认为500M)&#xff1b;
当然&#xff0c;在条件充分的情况下用户也可修改最高缓存参数以达到资源的合理使用&#xff0c;具体操 作如下&#xff1a;MapGIS安装路径下的program文件夹中找到“CacheConfig.ini”文件并打开→修改“CacheDBSize”的值即修改了最高缓存参数(默认单位为M)。
在创建索引对话框中&#xff0c;勾选“使用缓存”可以进一步提升系统运行速度。在访问数据库 数据时&#xff0c;设置了缓存可以将数据信息存入本地库中&#xff0c;再次访问该数据时&#xff0c;可以直接从本地中 取得&#xff0c;速度相对会提升。
如果已创建图幅索引并使用缓存仍无法达到理想的显示效果&#xff0c;此时用户可考虑设置批取内存大小参数。批取数据即一次将多条数据读取至内存中&#xff0c;设置的内存越大&#xff0c;一次缓存中读 取的数据越多&#xff0c;速度会越快。对于不同的操作环境&#xff0c;用户可设置不同的批取内存大小&#xff0c;如&#xff1a;对于非并发环境&#xff0c;用户可将批取内存设置大些&#xff0c;一批取到的数据越多&#xff0c;速度也越快&#xff1b;对于并 发环境下&#xff0c;可以将批取内存设置小些&#xff0c;降低读取速度以保证运行的正确性。
使用“同步缓存配置信息”工具进行缓存配置。运行MapGIS 安装目录\program 下SyncCacheConfig.exe&#xff0c;弹出“同步缓存信息配置”对话框。先点击“获取”按钮&#xff0c;读取本地 的缓存路径及缓存大小信息&#xff1b;勾选“采用较大批取内存”&#xff0c;即使用大批取内存(内存大小为50M)&#xff1b;若不勾选&#xff0c;则使用小批取内存(内存大小为5M)。
![a54488ad20d09ccc75031f43b72dd226.png](https://img8.php1.cn/3cdc5/12c27/978/eb6c9ad99ddb1c0d.png)
同步缓存配置信息
03
对象过滤
当我们拿到一个大数据量的数据&#xff0c;里面有多个类型的地物分布。若当前只对某个或某些 而不是全部的地物感兴趣&#xff0c;整图查看时&#xff0c;数据量大刷图很慢&#xff0c;图元类型区分查看混乱时会希 望只提取出感兴趣的地物类型或是某个范围。在MapGIS 10 的图层属性显示项中提供了过滤设置&#xff0c;包括“属性过滤”和“条件过滤”。
属性过滤&#xff1a;设置SQL查询条件&#xff0c;只显示满足筛选条件的图元和属性记录&#xff1b;
属性过滤效果图 ![c0262d40cf682136494ae32f183bd0a8.png](https://img8.php1.cn/3cdc5/12c27/978/e7ff37863a74545e.jpeg)
![c0262d40cf682136494ae32f183bd0a8.png](https://img8.php1.cn/3cdc5/12c27/978/e7ff37863a74545e.jpeg)
范围过滤&#xff1a;设置矩形范围&#xff0c;显示与矩形范围相交及在矩形范围内的图元和属性记录&#xff1b;
范围过滤效果图(红色框为设定的过滤矩形范围)
04
符号过滤显示
为线对象配上符号显示、区中填充符号&#xff0c;在一定程度增加了资源的占用。当地图图层符 号显示在小于某个比例尺的范围内符号显示不清晰或是和无符号显示无差别时&#xff0c;就可以设定此图层属性→显示的“非符号绘制最大显示比率”为当前比例尺显示时的显示比率。
05
图层(动态注记)过滤
常见的地形数据&#xff0c;包含14层数据&#xff1a;境界与政区、水系、居民地、铁路、道路等。地形 数据展示时若在全局缩放范围中都同时显示这14层数据&#xff0c;这样做的结果是图形不美观、显示速度慢、传达信息不明确。实际操作一般会对各个图层设定显示比范围&#xff0c;随着地图的放大由概略到详细逐级增加显示图层。
在MapGIS10中&#xff0c;图层显示范围由显示比率来控制。显示比率(用γ表示)和当前显示 数据范围(用Extent表示)的基本关系是&#xff1a;γ&#61;地图视图像素范围/Extent。地图视图固定不 变&#xff0c;随着地图的放大&#xff0c;显示比率增大。下图所示为显示比率设置界面&#xff1a;
![ef2065b17c9b68f66bd2838643c43f4d.png](https://img8.php1.cn/3cdc5/12c27/978/b8cf3efaa1c866d4.png)
设置显示比率
MapGIS10的显示比率还可控制对图层动态注记的显示。动态注记并没有存储在某个临 时的hdf文件中&#xff0c;而是根据当前地图视图中显示的图元&#xff0c;实时计算绘制(查询图元对应显示字段的值→计算绘制位置→绘制注记)。对图层设置显示动态注记&#xff0c;相当于绘制了2层数据&#xff0c; 相较只显示该图层时必然会增加绘制的时间&#xff0c;进而影响显示速度。
对于图元数较多的图层&#xff0c;复位状态显示动态注记&#xff0c;会出现注记因不能完全标注而避让不 显示或是注记过小、过密达不到读图的要求&#xff0c;因此一般不会在复位状态下显示。此时可以通过设置动态注记显示比率范围使得动态注记达到某个显示比时才显示。
![37a3d167b008fe5da90f07aee33e1d79.png](https://img8.php1.cn/3cdc5/12c27/978/c5348da445abdd00.jpeg)
动态注记显示比率设置
若在某个显示比率下&#xff0c;动态注记符合读图要求但是显示速度不能达到要求时&#xff0c;建议将动态注记另存为注记类。使用静态注记&#xff0c;可以避免每次移动或更新地图视图后动态注记实时计 算绘制造成的绘制时间消耗&#xff0c;在一定程度上提高显示速度。
![ebb8d3a2005e5409c4dbf74307658814.png](https://img8.php1.cn/3cdc5/12c27/978/20c02d9227046a6f.jpeg)
另存为注记类
06
创建金字塔
为减小影像的传输数据量和优化显示性能&#xff0c;有时需要为影像建立影像金字塔。
影像金字塔是一种典型的分层数据结构形式&#xff0c;在同一空间参照下&#xff0c;根据用户需要通过影像重采样方法&#xff0c;以不同分辨率进行存储与显示&#xff0c;形成分辨率由粗到细、数据量由小到大的金 字塔结构。不同分辨率的影像图层分割存储&#xff0c;并建立相应的空间索引机制&#xff0c;从而提高缩放浏览影像时的显示速度。
为影像建立了影像金字塔之后&#xff0c;以后每次浏览该影像时&#xff0c;系统都会获取其影像金字塔来显示数据&#xff0c;当您将影像放大或缩小时&#xff0c;系统会自动基于用户的显示比例尺选择最合适的金字塔等级来显示该影像。
如下图所示&#xff0c;为影像金字塔结构的简单示例图&#xff0c;底部是影像的原始最高分辨率的表示&#xff0c;为256×256图像分辨率&#xff0c;越往上的影像的分辨率越小&#xff0c;分别为128×128、64×64&#xff0c;顶部是影 像金字塔的最低分辨率的图像32×32&#xff0c;因此这个影像金字塔共有4层&#xff0c;即4个等级的分辨率。显然影像的行列值(或是数据量)越大&#xff0c;影像金字塔的等级越多。
![1e2541fffd7a8df420509c60fdaef1c1.png](https://img8.php1.cn/3cdc5/12c27/978/9ac26f055981d0b9.jpeg)
影像创建金字塔示例
07
地图缓存
地图缓存是一种用于改善地图浏览用户体验的优化策略。服务器端创建了地图缓存之 后&#xff0c;客户端用户的每一次地图浏览&#xff0c;比如平移、放大、缩小地图&#xff0c;都会向服务器端发送一个URL请求&#xff0c;此时&#xff0c;服务器端按照匹配的条件&#xff0c;将已缓存的图片返回到客户端。通常将服务器 端在发布地图服务之前&#xff0c;已经创建的地图缓存称为预缓存。
只需要付出一次缓存的代价&#xff0c;就可以快速的响应提供给客户端地图显示。地图缓存是以 一系列不同比例尺下地图图片(jpg/gif/png)形式提供的&#xff0c;因此不受矢量地图显示上的约束&#xff0c;比如地图信息量的大小、地物的复杂程度、是否带有标注、所使用的地图符号等限制。因为&#xff0c; 一般情况下&#xff0c;地图渲染的细节越多&#xff0c;承载的信息量越丰富&#xff0c;同等环境下&#xff0c;绘制矢量地图就越慢&#xff0c;但使用了地图缓存&#xff0c;客户端在获得了同样分辨率显示效果的同时&#xff0c;等待时间却大大缩短&#xff0c; 增强了用户的体验&#xff0c;满足系统对快速地图响应的要求。
本文为原创&#xff0c;转载请注明出处
![f7f2b945354ed182abd1e0827538119a.png](https://img8.php1.cn/3cdc5/12c27/978/bd3099b0e5e00b57.jpeg)