一种基于 OracleSpatial的WebGIS实现方法
摘 要:分析了在WebGIS平台 MapXtreme的条件下,利用空间数据库管理系统OracleSpatial管理数据可能遇到的问题,并提出了解决的方法。描述了基于MapXtreme的WebGIS的4层体系结构,并分析了在这种结构下网站的扩展性策略等关键技术,最后简要介绍了一个基于OracleSpatial的运行实例。
关键词:WebGIS; Mapxtreme;Oraclespatial;扩展性
Abstract : This paper analyzes the principle and structure of the MapXtreme which is a representative Web GIS software platform, and analyzes the problems happened in the process managing data with OracleSpatial and provides the methods of resolvent .It describes a WebGIS architecture based on MapXtreme, and describes the scalability based on this architecture .At last, an actual running example is given.
Key words : WebGIS; MapXtreme; OracleSpatial; Scalability
Internet技术和地理信息系统技术(GIS)作为当代信息技术飞速发展的前沿,已经结合得非常紧密。如何把GIS和Internet结合起来,即采用B/S的计算模式,客户方不需要任何特殊的配置便可进行交互式地图操作以及方便的信息查询,是当前地理信息系统领域的一个研究热点。
传统的GIS系统,地图数据以文件的格式存放,地图数据与属性数据分开存放,但是基于文件格式的GIS数据管理方法不能实现并发控制,不支持多用户并发操作,对于海量数据容易引起混乱,并且空间数据和属性数据的分开管理,会带来数据的不一致性和操作效率等问题。因此如何利用空间数据库来实现空间数据和属性数据的一体化管理,充分利用目前大型商业数据库的优势,实现分布式结构,多用户等功能,在GIS领域已经引起了越来越多的重视和研究。
MapXtreme是MapInfo公司推出的WebGIS 解决方案,具有地图功能强大、容易扩充、开发简单等特点。本文提出并实现了一种用MapXtreme来开发WebGIS的机制,并对利用空间数据库管理系统OracleSpatial 管理GIS数据进行了探讨。
1 MapXtreme原理及特点
MapXtreme是MapInfo公司推出的基于Internet/Intranet的地图服务器。通过对GIS 软件MapInfo和MapX的功能集成,信息管理员只需要在Web服务器上安装MapXtreme,并对其进行编程和管理,用户即可通过Internet/Intranet利用Web浏览器访问 MapXtreme,并获得MapXtreme所提供的GIS功能,如地图的显示、缩放、漫游、访问地图上连接的信息,以及制作专题地图进行地理分析等。
MapXtreme系统主要由个3层次组成。顶层是Internet技术,采用TCP/IP、CGI、HTML等技术标准,保证了系统的标准性、开放性和先进性;底层是图形平台MapInfo Professional和基 于ActiveX 技术的MapX控件技术;中间是MapXtreme,作为服务器端的新一代地图应用服务运行模式,采用内置开发工具、进程调度器、分布应用模式等多种新技术。 MapXtreme基本不改变服务器端的原有的GIS系统函数,几乎承担了所有的操作分析,此运行模式有利于充分利用服务器端的资源,最大限度地发挥服务器的潜力,如 图1所示。
2 4层体系结构
我们采用4层体系结构(如图2),4层结构包括浏览器、Web服务器、应用服务器以及GIS数据服务器(Oracle-Spatail)。浏览器用于向服务器发送数据请求并显示所请求的数据,Web 服务器接收请求,并把应用服务器的处理结果返回给用户,应用服务器负责应用处理过程,数据服务器端只进行数据的管理工作。在基于MapXterme的工作方式下,所有的地图数据和应用程序都放在Server端,客户端只是提出请求,所有的响应都在 Server端完成,只需在Server端进行系统维护即可,客户端无须任何维护,大大降低了系统维护的工作量。实际操作时,应用服务器和Web服务器可以安装在同一个服 务器机器上。数据库服务器可以单独安装,也可以与应用服务器和Web服务器安装在 一起。
3 基于OracleSpatial的GIS数据管理
GIS数据分为空间数据和属性数据,二者的紧密结合形成对地物 的描述,对一类数据的操作必然会影响与之相关的另一类数据,如何在计算机中有效地存储和管理这两类数据是GIS 的基本问题,也是GIS中最底层和最基本的技术。
传统的GIS系统,地图数据以文件的格式存放,地图数据与属性数据分开存放,地图信息通过ID与属性信息挂接,这种处理方式结构简单,可以根据应用自行定制文件格式,对于小系统来说,用文件格式开销比较小。但文件的缺点是不能并发控制,数据几乎都不支持多用户并发操作,对于海量数据容易引起混乱;并且空间数据和属性数据的分开管理,会带来数据的不一致性和操作效率等问题。空间数据库型GIS采用空间数据库来实现空间数据和属性数据的一体化管理,这可以充分利用目前大型商业数据库的优势,容易实现分布式结构,多源数据库连接,多用户等功能,因此空间数据库是GIS领域的一个研究热点。
我们采用Oracle公司的空间数据库管理系统OracleSpatial来管理地图数据,利用OracleSpatial需要注意以下几个问题:
(1)地图数据的导入
现有的地图数据大多以.tab文 件的格式存放,首先需要把以文件格式存放的GIS数据导入服务器端的 OracleSpatial中,数据导入工具采用Mapinfo公司的数据转化工具Easyloader,导入操作可以在客户端执行也可以在服务器端执行。导入结束后,OracleSpatial会为每一个导入的.tab文件在数据库中新建一个同名的表格,表格的字段包含.tab文件中地图对象的所有属性字段和GEOM子段,GEOM的子段类型是SDO_GEOMETRY,它是 OracleSpatial定义的用来存放地图对象的空间结构;.tab文件中的每一个地图对象对应于表格中的一条记录,空间数据存放在GEOM子段中,属性数据存放在表格的对应字段中。
(2)地图对象样式的恢复
由于在将Mapinfo的文件格式的GIS数据上载到OracleSpatial空间数据库中时,OracleSpatial只将.tab文件中每一类空间对象(点、线、面)的第个对象的对象样式保存到MAPINFO_MAPCATALOG视图中(地图数据导入时自动建立),当用户再通过Mapinfo Professional将上载表下载到Mapinfo中显示时,Mapinfo只能将该表中的每一种对象(点、线、面)恢复成其第一个对象的样式,这引起了地图对象样式的丢失,如一个图层上既有铁路也有公路,这两种对象采用不同的线形分别表示,数据上传时在OracleSpatial中仅保留一种线形,当这个表重新下载显示时,图层中的铁路和公路就会是同一种线形。
利用Easyloader上载Mapinfo表之前,可以先在表中增加几个属性字段,将点、线、面的样式特性当作对象的属性值保存到表中,并连同表的其它属性一起上载到 Oracle数据库中。当用户通过程序将该表从OracleSpatial中下载到Mapinfo中后,再根据点、线、面的样式信息,利用程序将点、线、面的样式恢复出来,这就可以解决对象样式的丢失问题。
让EasyLoader自动将样式信息提取出来, EasyLoader程序支持带参数运行,用户通过Command Line方式带参数运行 Easyloader(EasyloaderEasyloader /Y),就可将点、线、面的样式自动提取到一个名为MI_SYMBOLOGY的字段中,并随Mapinfo表一起上载,如表1。MapXtreme的处理模块MapX具有分析这些样式字段的功能,能对字段MI_SYMBOLOGY进行分析,并把分析结构用于地图对象的显示。 RoadName MI_SYMBOLOGY Linewidth ...... 北京大道 Pen[2,2,16711680] 2 ..... 新华路 Pen[2,30,0] 2 ...... 南阳路 Pen[2,2,16711680] 2 .....
(3) 文本对象的显示
因为现在OracleSpatial还无法接收 Mapinfo的文本对象,所以用户将Mapinfo的文本对象图层上载到Oracle表中后,再下载到Mapinfo环境中时,所有的文本对象都会丢失。利用Easyloader上载Mapinfo 表之前,先在表中增加几个属性字段,将文本对象的信息(如文本对象的内容、文本 样式等)当作对象的属性值保存到表中,并连同表的其它属性一起上载到Oracle数据 库中,实现的方法和点、线、面的方式相同。当用户通过程序将该表从Oracle Spatial中下载到Mapinfo中后,再根据保存在表中的文本对象的信息,利用程序为每个记录再重新创建一个文本对象。
(4)地图数据的读取显示
利用 MapXtreme提供的接口连接并读取OracleSpatial中的GIS数据,OracleSpatial中每一个表格对应于MapInfo中一个实际的图层,MapXtreme的功能模块MapX本身提供处理表格中的空间数据的功能,可以把每一个表格中的GIS数据进行分析并显示为一个图层,把所有的图层叠加就可以形成一幅完整的地图。在显示的地图上可以进行缩放、漫游、访问地图上连接的信息,以及制作专题地图进行地理分析等相关的操作 ,连接OracleSpatial并生成图层的代码如下。 ... Set Info = CreateObject(mapx.layerinfo.5) Info.Type = 4 设置type为miLayerInfoTypeServer Info.AddParameter TOOLKIT,ORAINET 连接数据库 Info.AddParameterCONNECTSTRING,SRVR=OraDB;UID=SYSTEM;PWD=MANAGER& nbsp; Info.AddParameter CACHE,ON Info.AddParameter MBRSEARCH,ON 读取空间数据库 中图层ASIA上的数据 Info.AddParameter SELECT GEOLOC,COUNTRY,MI_ SYMBOLOGY FROM ASIA Info.AddParameter NAME,ASIA 生成图层名字 Session(cMapXObject).Layers.Add Info ...
4 扩展机制
在构建WebGIS应用之前,应事先考虑到网站的扩展问题。对MapXtreme来说,地图引擎在用户的每一个会话期间都要创建一个MapXServer对象实例,并保持其激活状态直至用户会话结束;每个MapXServer都会占用自己独立的处理空间(CPU 、内存硬件资源),如同时有几百甚至上千个用户同时访问,服务器将面临严峻的考验,严重时还将导致服务器崩溃;另外为每一个用户都维持一个激活的MapXServer实例是一种低效的做法,如何解决这个问题将直接关系到开发的系统是否具有实用价值,是否具有生存价值 。
可以采用两种工作机制来实现平衡以解决这个问题:横向扩展和纵向扩展。
(1)横向扩展。横向扩展指的是一种分布式配置方式,这种扩展方式,是通过增加服务器的数目来分担单台服务器的过重负载的。这种方式,需要在每台服务器上安装MapXtreme,适合于访问量非常大的系统,但是代价非常昂贵。
(2)纵向扩展。纵向扩展是通过MapXtreme的MapXBroke组件优化Web服务器来实现的。MapXBroker是作为一种系统服务运行于服务器系统上的,当它启动时就会创建一个MapXServer的共享池(称为预启动机制),当一个MapXtreme应用程序需要执行与地图操作相关的请求时,就向MapXBroker申请一个MapXServer对象实例;当含地图的主页动态生成以后,再把MapXServer实例释放给共享池,以便其它用户申请。这种共享机制使有限的资源可以支持多个用户并发请求;这种机制的另一个好处在于当应用程序申请MapXServer对象时,该对象已经存在于共享池中并运行着(预启动机制),因而比申请时再创建一个MapXServer对象要快得多,如图3。在实际的应用中,可以根据具体的情况采用横向扩展与纵向扩展相结合的方法。
5 OracleSpatial在城市电子信息查询系统中的实现
作者开发的城市电子信息查询系统,是一个基于Internet 的地理信息系统。系统采用B/S的结构模式,后台服务器端运行MapXtreme,采用OracleSpatial管理GIS数据,采用纵向扩展的方式解决多用户并以访问的问题。该系统已成功地实现了有关领导和部门通过Internet/Intranet快速方便的查询城市的住宅建设、城乡总局、线路走向等基础地理数据。基于MapXtreme运行的程序、图形数据库、属性数据库及其它组件集中存放在服务器端,客户端除了浏览器外不需要任何的插件。图4为系统运行的界面,系统实现了缩放、漫游、不同信息分层、地图对象的添加删除、保存地图文件、对象查找功能。
6 结束语
随着地理信息系统技术的逐步推广以有互联网应用的普及,通过Web运作发布地理信息已成为当前地理信息技术发展的一个重要方向。本文对于通过互联网实现具有空间特征的信息发布以及利用空间数据库管理系统OracleSpatial进行数据管理等一系列技术问题进行了探讨,并提出了相关问题的解决方法。但是,利用空间数据库管理空间数据速度比 较慢,如何提高空间数据的存取效率,还有待于进一步的研究