高性能地图优化策略(二)

1    地图性能优化方法

1.1 服务器优化

只安装必要的选件

关闭界面美化选项

如在Windows操作系统,系统属性里,有一个性能选项(Performance Options),一般选择性能优先,而不是显示优先。如应用系统中不做三维图形显示,可将操作系统中的显示属性/Settings/Advanced/Troubleshoot中,硬件加速(Hardware acceleration)调到None

设后台服务优先

系统属性性能选项中,高级页面,调整Processor Scheduling为后台服务优先(Background services)。

关闭不必要的服务和端口

检查您操作系统中所有的服务和端口,对于一些用不到的服务和端口,可将其停止或关闭。

尽量将数据库服务器与WebGIS服务器分开

多数情况下,针对数据库服务器和WebGIS服务器的优化是有冲突的,而且若这两者在同一台设备上,也会产生资源争用的情形,WebGIS服务器对内存的消耗也是非常大。另外,有一点值得注意,最好不要将这两类服务器分到两个子网中,即中间最好不要有路由器。

关于杀毒软件

一些杀毒软件在运行查毒时,非常消耗资源,服务器尽量不要安装杀毒软件,在一些优化措施已实施的情况下,比如关掉不必要的服务和端口,病毒一般也不会感染服务器。在Windows Server 2003下若要安装杀毒软件,也尽量将查毒时间放在系统闲时;而在SolarisAIXLinux下,最好不要安装杀毒软件。

1.2 数据库优化

1.2.1 只安装必需的软件包

Oracle 11g为例(以下同),在安装Oracle过程中建议使用高级安装—>定制方式安装。因为如果默认安装之后,不会使用到的组件可能会自动启动一个服务,占用系统资源,所以在选择可用产品组件时建议根据实际需要选择必需的组件。

3-1 Oracle 11g 选择安装组件

1.2.2 建库只选必需的选件

在建立数据库时也要注意数据库组件的选择,为创建的数据库进行瘦身。比如要创建一个SuperMap SDX+ for Oralce 的数据源,那么Oracle Spatial的组件就不需要添加了。除非应用数据库就是Oracle Spatial的,那么它就是必需的。

1.2.3 分配合适的内存

对于Oracle 内存的分配并不是越大越好,首先要考虑这台服务器会运行哪些程序,是否其即作为数据库服务器,同时也作为Web服务器等等。这就要求服务器的内存除了满足Oracle运行之外,还要分配给其它程序。

如果服务器内存比较充裕,分配给Oracle一般1G-2G即可,如果服务器内存只有1G内存,那么建议Oracle不要超过60%

1.2.4 设置合理的参数

这部分的优化解决的主要矛盾是数据吞吐效率和用户并发效率。大部分初始化参数可以进行优化调整以提高数据库性能,用户可注意修改几个参数,在Oracle 11g 中以下几个参数的默认值都有了比较大的提升,采用默认也是可行的:

cpu_count为分配给Oracle数据库的CPU个数,默认为2,如果服务器是多核CPU,则可以把此值增大,在分配CPU时也要考虑服务器的用途,适当为操作系统其它程序预留CPU,服务器整体性能的提升才能更好的提高Oracle运行的速度。

db_file_multiblock_read_count影响Oracle在执行全表扫描时一次读取Block的数量,默认为128。用户可以根据自己的系统环境更改。此值受系统I/O最大能力的影响:Maxdb_file_multiblock_read_count=Max(系统I/O/db_block_size,一般可以改成32,甚至更大。

db_block_size 不应小于8192

Open_cursors 根据并发用户数决定,但一般不应小于300

Sessions:根据并发用户数决定。

Job_queue_processes不应小于100

通过以上的方法对数据库优化之后,在做数据入库或者数据库查询返回大量的数据结果的效率会有较大提升,这一点在Oracle 10g上比较明显,因为它的默认参数都比较低,必需修改后才能看到效果。

1.3 地图显示速度优化

地图显示速度的优化,原则就是在一定比例尺下,一定地理范围内只显示最适合显示的图层或对象。让地图显示的对象越少越好,同时兼顾系统对业务数据的特定要求和地图的美观。下面结合实践介绍几个优化的基本方法。

1.3.1 对象过滤显示

过滤对象尺寸

在很多大比例尺的数据,比如流域水系、土地利用当中,对象数量多,小而碎的数据也会比较多,这样的数据即看起来不美观,也会影响显示性能。这时合理设置对象过滤尺寸可以将这些小而碎的数据过滤掉,而且也不会对空间查询结果产生影响,因为这仅仅是显示上的处理。

过滤显示条件

同样是过滤的方式,只是方法是设置过滤条件,通过SQL语句来控制显示符合条件的对象。这里还可以灵活使用,通过开发可以实现不同比例尺,不同显示范围下显示符合不同条件的对象,即优化了地图显示性能,又实现了特定的业务逻辑。

文本过滤显示

在矢量数据中比较耗费资源的,文本算是一类。因为其每个文本对象结构相对复杂,除了记录空间位置,属性数据之外还记录了字体风格样式的信息。

这类数据显示时,建议当前地图窗口中同时显示的文本对象个数不要超过200个,大于这个数量级速度就会比较慢了。由于显示200个文本的地图已经严重影响了美观,所以这个界限已经比较高了。

另外为了处理文本压盖的问题,可以通过设置标签专题图文本风格的自动避让,以及设置地图的文本过滤属性,都可以解决这个问题。过滤掉的文本会在放大了比例,有足够空间范围显示的情况下显示出来。

1.3.2 图层过滤显示

设置的原则是,首先保证当前比例尺下该图层显示性能较低(通过肉眼观察或ShowDebug可以清楚判断)的图层放到更大比例尺下显示。例如:点、线数据过于密集;或者制作了标签专题图之后,标签基本被过滤掉;或者显示的对象太多,明显影响了刷新速度等等。这时就需要将此图层放到更大比例尺下显示。

其次就是尽可能的使地图每次缩放操作都有图层显示的变化。这样地图的层次感就显现出来了。

1.3.3 地图缓存

地图缓存我们可以分为两种,一种是将当前地图按照设置的比例尺和缓存范围生成一系列的缓存图片。在浏览此地图时可以直接读取缓存中的图片,从而提高地图显示的速度。系统提供了JPGPNG、位图、TIFFGIF5种格式,针对用户不同的需求进行选择。

这种方式主要应用于Web发布时使用,对于单纯浏览的应用来讲,也是最快的一种地图方式。

另一种缓存机制叫做用户缓存,这种缓存是针对某一个数据集的设置。一旦注册了某个数据集为用户缓存模式,那么在客户端第一次浏览该数据集的时候,从服务器查询获得的数据会在本地生成一些数据压缩包文件。这些文件的路径也是可以通过Deskpro或者Objects的配置文件设置的。

如果第一次浏览有点慢的话,第二次刷新这个图层的时候,数据无需从数据库查询计算、通过网络传输,而是直接从本地读取,速度会有很大提升。

1.3.4 建立索引

SuperMap 为了提高矢量数据的查询、访问、排序、浏览等操作,提供了多种文件索引,包括字段索引、四叉树索引、R树索引、动态索引和图库索引(原三级索引)。下表为 SuperMap 各引擎对文件索引的支持情况:

创建字段索引

字段索引是数据库系统或者其他计算机系统中提供键值快速定位的数据结构。字段索引提供了对特定键值的数据快速访问的能力。适用于数据较小的矢量数据,例如普通创建的矢量数据集。

SuperMap提供的了数据集字段索引功能,以方便对数据集建立或删除字段索引。该功能可以为数据集中的一个或者多个字段创建索引,有助于快速查找、浏览和排序数据。

实际应用中的数据有的是分幅的,会有一个属性字段记录该数据的分幅信息,那么建议可以使用这个字段创建字段索引,有助于快速查找和浏览数据。

创建空间索引

随着GIS的发展,GIS的数据量逐渐增大,使得空间数据的访问速度降低,而空间索引就是用来提高数据的空间查询和访问效率的数据结构。

地理信息系统中的空间索引是相对于字段索引而言的。由于空间数据特有的位置相关性,传统的字段索引不能满足空间数据快速定位的需求,因此需要空间索引的提供位置相关的数据的快速访问能力。

SuperMap SDX+ 提供的四种空间索引:四叉树索引、R树索引、动态索引和图库索引(原三级索引)。

空间索引管理:数据在导入导出,编辑修改后,空间索引可能会破坏,这时就需要对数据集重新计算,建立新的空间索引,以便于进行快速查寻和浏览。

创建图库索引(原三级索引)

SuperMap SDX + 中根据数据集的某一属性字段或根据给定的一个范围(图幅的长和宽),将空间对象进行分类,通过索引进行管理已分类的空间对象,以此提高查询检索速度。

在创建图库索引功能中提供了提供了两种创建图库索引的方式,字段索引范围索引

字段索引

即根据数据集的某一属性字段将空间对象进行分类,通过索引进行管理已分类的空间对象,以此提高查询检索速度。建议使用与位置信息相关的字段进行图库索引的创建,例如对于全国县级行政区域图,可以使用表示行政区域代码的字段进行图库索引的创建。

范围索引

即根据给定的一个范围(图幅的长和宽)将空间对象进行分类,通过索引进行管理已分类的空间对象,以此提高查询检索速度。对于按标准比例尺分幅存储(1:25万数据、1:10万数据、1:5万数据等)的数据合并到数据库中后生成的数据集,图库索引有着优异的效果,可以提供非常好的查询性能,与 SuperMap 提供的地图缓存功能搭配使用可以达到更好的地图浏览速度。默认采用数据集长宽各三十分之一的大小进行图库索引的创建。

图库索引目前仅支持的是数据库型数据源中的点、线、面、文本和 CAD 数据集。在使用范围索引时,我们要考虑如何确定图幅的范围。如果对数据集创建了范围索引,每次查询的数据结果都是分块下载到客户端的,如果范围过大,那么下载一块的数据量会比较大,性能范围没有得到提升。一般建议平均每块范围内的记录数在3000-5000之间,这样就可以计算一下,比如2000000条记录的数据2000000/5000=400(20*20),因此设置数据集长宽个二十分之一就可以了。

另外范围索引最好适用于数据分布比较平均的数据,比如道路、居民地等等。

1.3.5 创建影像金字塔

为减小影像的传输数据量和优化显示性能,有时需要为影像建立影像金字塔。

影像金字塔是栅格数据集的简化分辨率(reduced resolution)图像的集合。影像金字塔技术通过影像重采样方法,建立一系列不同分辨率的影像图层,每个图层分割存储,并建立相应的空间索引机制,从而提高缩放浏览影像时的显示速度。

如图所示的影像金字塔的一个例子,底部是影像的原始最高分辨率的表示,为512×512图像分辨率,越往上的影像的分辨率越小,分别为256×256128×128,顶部是影像金字塔的最低分辨率的图像64×64,因此这个影像金字塔共有4层,即4个等级的分辨率。显然影像的图像分辨率越高,影像金字塔的等级越多。对于图像分辨率为2a×2b的(a>b)影像,SuperMap中将会为其建立(b-6+1层的金字塔。

为影像建立了影像金字塔之后,以后每次浏览该影像时,系统都会获取其影像金字塔来显示数据,当您将影像放大或缩小时,系统会自动基于用户的显示比例尺选择最合适的金字塔等级来显示该影像。

为影像建立了影像金字塔可以显著地提高影像缩放显示过程中重画的速度,提高海量影像数据显示的性能,但是同时影像金字塔的建立会增加数据集的存储空间,即增大影像数据集所在数据源(.sdb)文件的大小,这是因为建立的影像金字塔实际上就是影像在不同分辨率下的图像的集合,这些不同分辨率下的图像都和数据一起存储在数据源文件中,从而增大了数据源文件的大小。而且栅格数据集数据量越大建立金字塔的时间越长,影像金字塔的存储空间也就越大,但是会为以后的影像浏览节约了更多的时间,所以对于海量影像数据,创建金字塔不失为一种优化效率的选择。

SuperMap SIT影像文件存储格式是集成了影像压缩及高效的影像金字塔技术的数据格式,因而可以超快速地显示影像数据,与影像数据大小基本无关,即使在很低配置的机器上也能非常流畅地对海量影像数据进行显示。

原文地址:https://www.cnblogs.com/reborter/p/1743850.html