分布式WebGIS构件化的研究和实现

更新时间:2024-07-04 17:07:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

分布式WebGIS构件化的研究和实现

整理时间 [2005-07-12] 阅读次数 [7625]

作者:李慕华 来源:网络

文字大小:【大】【中】【小】

摘 要

地理信息系统(Geographical Information System,简称GIS)以数字化的形式反映人类社会赖以生存的地球空间的现势和变迁的各种空间数据以及描述这些空间数据特征的属性,支持空间数据及其属性数据的输入/输出、存储、显示以及进行地理空间信息的查询、综合分析和辅助决策。随着分布式网络技术的发展、数字地球概念的提出,传统的GIS向着信息共享的网络GIS发展。WebGIS是GIS与网络的有机结合,它使GIS的应用领域扩展到社会的方方面面,成为了大众化的信息工具。

构件化的WebGIS,以一组具有某种标准通信接口允许跨语言应用的构件提供GIS 功能,可以被封装成能实现与具体任务最紧密相关的功能模块,方便地进行组装和嵌入,有效地支持GIS在网络上的应用和二次开发。这是WebGIS的一大发展趋势。本文将结合网络用户对于GIS的基本需求,从理论上研究和探讨分布式环境下WebGIS的构件化,设计并用C++语言和COM/DCOM技术实现了一个构件化的WebGIS系统。

关键词:构件化,分布式,WebGIS,COM/DCOM 目 录 摘 要... 2 目 录... 3 第一章 引言... 5 一、WebGIS起源... 5 二、WebGIS的目标... 6 1. 大众普及化... 6 2. 数据分布... 6 3. 资源共享... 6

4. 互操作性... 7 三、 WebGIS现状... 7

四、我们的工作──环境背景及要解决的问题... 9 第二章 分布式WebGIS构件化研究... 10 一、 构件的概念... 10 1.构件 10 2.CORBA.. 11 3.COM/DCOM... 11 4.GIS构件... 11 二、构件化的意义... 12 三、构件化系统建模... 13 1.体系结构... 13

2.地理空间数据模型... 14 3.构件层次划分... 16 4.构件功能划分... 17

四、改进系统性能的技术要点... 22 1.空间索引.... 22 2.缓存技术.... 22

第三章 系统设计与实现... 24 一、地图数据访问对象类... 24 (一) GxConnection 连接对象... 24 (二) GxLayer 图层对象... 26

(三) GxGeometryIndex 几何索引对象... 29

(四) GxFieldDef 字段定义对象... 29 (五) GxFieldDefs 字段定义集合对象... 29 (六) GxLegendLib 图例库对象... 30 (七) GxDisplaySetting 显示配置对象... 31 (八) GxDisplaySettingItem 配置项对象... 32 (九) GxReferenceSystem 参照系对象... 33 (十) GxEntity 实体对象... 34 (十一) GxGeometry 几何对象(基类) 35 (十二) GxPoint 点对象... 37 (十三) GxPoints 点簇对象... 37 (十四) GxLine 线对象... 38 (十五) GxLines 线簇对象... 40 (十六) GxPolygon 多边形对象... 40 (十七) GxAnnotation 标注对象... 41 (十八) GxImage 图像对象... 42

(十九) GxGeometries 复杂几何对象... 43 二、地图可视化对象类.... 44 (一) GxMapView 地图显示构件... 44 (二) GxMap 地图对象... 46

(三) GxMapLayer 显示图层对象... 47 三、实用功能对象类... 48

(一) GxError 错误处理对象... 48 (二) GxSet 集合对象... 48

(三) GxArray 数组对象... 49 (四) GxEnumeration 枚举对象... 50 (五) GxSelection 被选集对象... 50 (六) GxUtility 功能函数对象... 51 第四章 总结... 54 参考文献... 55 致 谢... 57

第一章 引言

地理信息系统(Geographical Information System,GIS)的任务是采集、存储、管理、分析和显示地球空间信息。它是以数字化的形式反映人类社会赖以生存的地球空间的现势和变迁的各种空间数据以及描述这些空间数据特征的属性,以模型化的方法来模拟地球空间对象的行为,在计算机软、硬件的支持下,以特定的格式支持输入/输出、存贮、显示以及进行地理空间信息查询、综合分析、辅助决策的有效工具。 一、WebGIS起源

自1963年加拿大地理信息系统(CGIS)诞生以来,经过多年来的发展,传统的GIS技术已经成熟。GIS正广泛应用于城市规划、设施管理、资源、环境、能源、农业、水利、交通、国防、人口、灾害防护以至人民生活的各个方面,发挥着重要的作用。

信息高速公路的提出,信息技术以及Internet的飞速发展与广泛应用,人们对分布式应用研究以及共享信息和知识需求不断增长,从而对GIS的研究也发生了根本变化。1998年美国副总统戈尔提出了“数字地球”的概念,它的核心是全球的信息化,它是对真实地球及其相关现象的统一性的数字化重视和认识。可以说数字地球是也一个GIS系统,因为它包容了全球与地理有关的信息。数字地球以Internet技术为起点,建立一个连通全球的信息网络,提供数字地球籍以存在的空间。因此实现“数字地球”离不开网络化GIS的支持。

人们在社会生活中不断提出对空间信息的新的更高的需求。越来越多的用户依赖于互联网获取外界信息。在国际互联网上使用浏览器进行信息查询,实际上就是向Web服务器端请求数据。不同于常见的文本、图像、声音和视频等信息,对于一些比较专业的数据,通用的Web服务器和浏览器一般不会提供支持。随着国际互联网的普及和GIS在各个领域越来越广泛的应用,人们希望通过国际互联网也能进行GIS信息的查询。而国际互联网的迅猛发展和广泛应用,使得它必将成为GIS软件的运行环境,基于Web的GIS应用已越来越成为广大GIS用户新的迫切的需求。

WebGIS是GIS与国际互联网的有机结合,是GIS在广域网环境下的一种应用,最终目标是实现空间信息的网络化。GIS通过国际互联网在功能上得到了延伸,真正成为一种大众使用的信息工具。从国际互

联网的任意一个节点,人们可以浏览网上的各种分布式的、具有超媒体特性的地理空间数据及属性数据,进行地理空间分析、查询,以支持智能辅助决策。通过对空间信息网络化和超媒体技术的集成,WebGIS提供给用户的信息不仅仅是矢量化的空间信息,还有遥感影像、动态视频、文字说明等多种信息。 与传统的GIS比较,WebGIS有以下优势:

? 不同于基于单机或局域网的传统GIS,WebGIS适用于广域网,拥有更多的应用群体。因此极大地扩展了GIS的应用范围,使得GIS真正成为一种大众使用的信息工具。

? 不同于集中式的传统GIS平台,WebGIS是分布式的。用户可以使用广域网上任意一台服务器的GIS服务,从而使GIS的概念扩大到社会化和全球化。

? 网络GIS采用大型的分布式空间数据仓库(或具有类似功能的ORDB),存贮和管理大数据量的空间信息,并有能力在大量用户同时通过网络对其进行访问时能快速响应。 二、WebGIS的目标 1. 大众普及化

随着网络的迅速普及,越来越多的人依赖网络获取信息、处理事务。GIS应当抓住网络这一日益发展的“第四媒体”,扩大它的应用领域。将GIS软件与Web服务器集成,通过普通浏览器,用户可以在任何地方操纵网络GIS,享用地理空间信息服务,从而将GIS扩展成为公众服务系统;同时可以拓宽地图出版渠道,降低数据散发成本。象数字地图的出现,使得人们得以抛弃传统的印刷地图,可以在网络上简便地查询地点和路线。 2. 数据分布

随着网络的发展和GIS用户的增多,地理信息资源也分布在不同的领域,归不同的用户管理。地理信息资源是一个庞大繁复的数据源,如果集中在一个站点是不太现实的。因此,系统要适应这种分布式数据的环境,能够使得GIS用户通过网络不但能够访问分散在不同站点的数据和数据处理服务,同时还能维持系统的一致性以及平衡这种访问的网络负载。 3. 资源共享

GIS应用范围在进一步扩大,为实现地球资源和信息的共享,GIS需要不断“开放”,建立面向用户的、资源共享的开放式GIS。这里主要是指地理及其属性数据的开放性。WebGIS应该支持用户通过网络实时获取不同应用系统中的地理信息,避免冗余数据存储,实现地理空间数据的共享。 4. 互操作性

互操作性是指不同的GIS软件部件或软件系统能够由于异构数据和异构处理环境所带来的分布式地球资源存取障碍而进行相互操作。GIS软件的互操作是通过规范而获得的,即GIS软件开发者通过遵从一系列通用的规则开发各自的软件来获得互操作性。在系统的设计中,我们可以参照OpenGIS有关构件方面的规范,从而使得构件具有规范化的接口。当建立了各种构件的标准接口以后,它们就可以相互操作。一些公用的构件可以被收集起来以建立构建库,以促进NSII (National Spatial Information Infrastructure) 与数字地球的建设。 三、 WebGIS现状

从90年代开始,人们对GIS的网络开发和应用做了很多有意义的探讨并提出了很多实现模型。综合起

来,WebGIS的实现可以分为基本的三类方式:

1〕文件共享方式。这是最早的网络GIS实现技术,主要通过提供文件共享和目录映射来提供网络访问能力,在局域网下比较适合。现在的系统已经很少采用这种方式。

2〕CGI 方式。采用Client/Server体系结构。客户端基本不含GIS功能,只是Web浏览器,通过公共网关接口CGI(Common Gateway Interface)来动态访问服务器方GIS数据和功能;服务器根据请求启动服务器端的GIS应用程序,处理用户的请求,然后将处理结果作为HTML页面发送回客户端。几乎所有的GIS处理功能都是在服务器端完成。我们一般称之为侧重服务器端的WebGIS。

3〕插件方式。与CGI方式不同,这是一种侧重客户方的策略,它将服务器上的部分GIS功能移到客户端,这部分功能被设计成能与网络浏览器交换信息的专门GIS软件,称为GIS插件。这种GIS插件不但可以增加网络浏览器处理地理空间数据的能力,而且还可以减少网络GIS服务器的信息流量。 在侧重服务器端的WebGIS中,由于处理集中在服务器端,当客户端用户增加时系统负载迅速递增,从而导致系统性能下降;同时,在服务器端很难提供高效的诸如空间分析等的地理信息的交互。因此侧重在客户方实现GIS功能,在WebGIS实现中是比较有效可行的一种策略。这也是我们研究系统构件化的主要原因。当然,在客户方和服务器方的GIS功能处理上,如果负载比重过于悬殊会影响系统的整体效率,因此必须很好地设计系统,在数据处理与传输上做一定的权衡。

由于WebGIS 的重要性和它所提供的巨大商业机会,世界各大GIS 厂商纷纷推出自己的WebGIS产品。现在全球有很多网站可以提供用户交互访问远程GIS服务的能力。这些系统通过本地机运行远程主机上的GIS软件。GIS和WWW是正在迅速发展的技术,它们使得GIS软件开发人员“能够设计出主要面向专家级的应用,或使之接近专业人员甚至是普通大众” 【16】。一些著名的商业GIS软件包,诸如ESRI的Arc/Info和ArcView,是通过运行他们自己的Web服务器。许多在线系统是为特定的任务度身定做的,这或许也是大多数基于Web系统的发展之路。

目前,较为成熟的国外WebGIS厂家及其产品主要有【12】【13】【14】【15】: 厂商 产品名称 支持数据格式 服务器 AutoDesk MapGuide 向量 Win NT Bentley

Microstation GeoGraphics 向量 ESRI

IMS for ArcView & MapObjects 向量、栅格 Win NT MapInfo ProServer 向量

Win NT/Windows

Intergraph GeoMedia Web Map 向量、栅格 Windows NT / UNIX Genasys

Spatial WebBroker 向量、栅格 UNIX

APPIAN Interactive Corp. APPIAN \ 向量 UNIX ObjectFX Spatial Net 向量、栅格

Win NT, SUN Solaris, HP-UX

Universal Systems Ltd. CARIS Internet Server 向量、栅格 UNIX

这些WebGIS产品在一定程度上给出了地理信息的网络共享解决方案,它们都是基于客户/服务器模式,在服务器端有功能强大的桌面GIS;对客户端有一定特殊要求,如IMS、MapInfo Proserver等采用纯图像,而MapGuide、GeoMedia Web Map等采用图形图像。

此外,国内在对WebGIS的研究中比较有影响的包括武汉测绘科技大学的GeoStar吉奥之星、北大青鸟天通信息工程公司的Geo-Union WebGIS Enterprise以及CityStar、MapGIS等。 四、我们的工作──环境背景及要解决的问题

国际互联网正在改变着数据访问和发布的方式。处理互联网上空间数据和地理信息的WebGIS正随着互联网与Web技术的变化而迅速发展。由于大数据量的传输,互联网上及计算机本地总线数据传输速率的

极大差异,WebGIS存在着数据传输性能低的最大缺陷,而在传统的桌面GIS中通常不存在这样的问题。这主要是因为WebGIS需要耗费较长的时间进行AvctiveX构件或JAVA applets的初始化下载,和地图数据的传输。尤其在进行传输大型矢量地图数据时,这个问题尤其值得考虑。 通常,WebGIS的低性能可以通过两种方式得以解决:

1〕增加互联网连接的速度,这主要是计算机网络硬件的支持;

2〕研究如何设计有效的程序,提高系统性能。这是GIS研究开发人员的主要任务。

随着分布式对象技术的成熟,一种新的WebGIS实现技术——基于构件的WebGIS出现了,这种技术使得真正的高性能的网络GIS成为可能。构件为开发提供了一种新的开发模式,比现有的面向对象的或传统的基于模块的开发技术更为高效、灵活、功能强大。比方说,它使得开发人员通过组合和重用由不同个人和团体独立开发的二进制“模块”,极大地简化和加快开发工作。构件是语言无关和硬件无关的,而且可以在网络上运作。通过采用空间缓存和空间索引等技术,可以有效地解决地理数据的检索和传输效率问题。同时这种技术也为二次开发提供了更灵活的选择。本文将就基于Internet/WWW计算环境下WebGIS系统的构件化做理论和实践上的探索,建立实用的WebGIS对象构件系统。

第二章 分布式WebGIS构件化研究 一、 构件的概念

从90年代开始,出现了主要运行于UNIX上的CORBA(Common Object Request Broker Architecture)和主要运行于Windows/Win NT上的COM/DCOM,这些是构件的基础技术。 1.构件

简单地说,构件技术是一种二进制标准【1】,即EXE和DLL程序标准。它使得其它的DLL或EXE程序能够操纵、共享和访问由某个EXE或DLL程序(即构件)所提供的方法和数据【5】。 构件技术极大地推动了软件业的发展,这是因为: 2 这个技术使得构件的开发和使用完全独立。

2 这个技术提供了一种必要的机制,使得一个构件可以在它自己的过程中,透明地访问和操纵其它过程的方法和数据。这也给予我们一种强大和灵活的开发手段来使构件无缝地协同工作。

2 这个技术提供了其它灵活的方式来开发和定制我们的应用或构件。在这里构件技术体现了面向对象的设计思想,具有独立性、封装性,隐蔽实现的细节,支持互操作的规范化界面;具有关联性、继承性、聚合性和类库机制,以支持复用。例如通过使用包含/聚合或类库,外部开发者可以从已有的二进制构件基础上创建新的构件。这个派生出来的构件不仅从外部的DLL或EXE程序中继承了所有的方法,而且可以改变或定制每一个方法和扩展功能以满足新构件的特殊要求。通常应用程序的开发者不会从底部开发他们的构件。许多应用程序是从现存的二进制构件派生出来的,然后再扩展或修改功能。并且因为一个应用系统可以被看作是由不同开发者开发的独立构件组成的集合,我们可以简单地通过挑选所需的构件来代替或更新现有的构件,来满足一定的需求。

2 构件是双向和语言无关的,这意味着我们可以使用不同的语言来开发构件。而构件也可以被不同的语言来使用,例如C++,JAVA,PASCAL,C和BASIC等语言。开发者可以共享用不同语言开发的所有二进制模块。同时,构件可以在不同机器不同操作系统上透明地运行(支持网络和硬件无关)。软件构件必须遵从二进制的外部的标准,但是它们的内部实现完全没有限制。它们可以使用过程语言,也可以使用面向对象的语言和构架。 2.CORBA

CORBA是由对象管理集团(The Object Management Group)提出的一个分布式环境下跨平台、跨语言的对象管理规范【9】。CORBA最关键的有三个部分——对象界面、对象实现和对象请求代理。对象界面用一种通用的界面定义语言描述了对象所要完成的功能以及对象的属性,对象实现则采用某种方法某种语言实现对象界面所定义的对象,同一个对象界面可以有不同的对象实现方法。对象请求代理则在对象请求和对象实现之间架起了一座桥梁。用户对对象的请求是用对象界面的方式来描述的,然后再向对象请求代理提出对象请求,对象请求代理根据用户的对象请求从对象实现中选取一个合适的对象实现供用户使用。对于用户来说,它根本不知道对象实现到底是在网络的哪个位置上,也不知道调用的是哪个对象实现。 3.COM/DCOM

DCOM,作为微软的分布式计算策略,是在开放性软件DEC远程过程调用协议的基础上开发的。DCOM是微软的构件对象模型COM的一个扩增版,而COM是ActiveX的基础技术【10】。COM和DCOM最大的不同在于COM构件是运行在单机上,而DCOM构件则是分布在网络上。尽管DCOM 在非Windows平台上也可以使用,但会受到很多限制,因此它更适用于Windows环境。

同CORBA一样,DCOM也是采用面向对象的方法,所有应用都被看作是一个对象。在DCOM环境下,客户应用与COM构件的通信只需通过包含指向该对象可用函数的指针的接口。在COM和DCOM中,接口是关键,构件是接口的具体实现,一个构件可以被支持相同接口的另一个构件透明地删除和替换。DCOM允许你使用现存构件,这可通过在应用界面中插入指向该组件的指针来实现。每一个构件必须在本地机上进行注册,以便客户能通过注册表上的构件唯一标识找到该构件。DCOM允许现存的客户机和服务器应用通过在主机上注册和配置分布到网络上。 4.GIS构件

我们可以认为GIS构件是以EXE或DLL形式出现的二进制可重用软件块,它通过向用户提供预先定义的接口,来封装各种功能明确的GIS服务,使得用户无需从底层的基本功能做起,而以一种强大和灵活的开发手段来使构件无缝地协同工作在自己的应用程序中,并且可以利用构件的能力来提供标准服务之外的简便的扩展和创新以及强壮的构件版本支持。它具有以下特性:

2 透明性:即黑盒方法。GIS构件的使用者和开发者相互独立;使用者无需关心构件的具体实现技术和版本更新,而只需访问构件所提供的接口。这样就减少了系统更新对二次开发者所带来的影响,只要接口保持不变,内部怎么实现都可以。其实这一点也正是软件工作者自编程模块化以来一直所倡导的。

2 可组合性:构件之间的通讯和绑定相似,从而能够无缝地组合起来形成更大的构件。根据开发层次的不同,我们应该提供不同要求的开发人员所需的构件层次。而在系统设计中,最主要的是提供一些可以进行再组合的基础构件(GIS核心对象类),在它们之上可以搭建更高层次的应用构件。 2 可重用性:构件可以嵌入到其它应用开发程序中使用。例如GIS构件可以嵌入到Web主页,从

而使Web页具有GIS功能,进行地图显示、空间分析、查询等操作。二次开发人员也可以充分利用Visual C++、Visual Basic、Delphi、FoxPro、PowerBuilder等语言环境的可视化功能,使用GIS构件来开发面向不同应用领域的GIS应用系统。 二、构件化的意义

目前众多地理信息系统研究开发厂家的产品主要注重于地图的绘制和管理,而对GIS的二次开发支持却不多。一些厂家对用户提供了用于地图操作和查询的APIs,但这些APIs的调用往往过于纷繁复杂,不太符合目前广大用户面向对象程序设计的习惯,而且要求开发人员对系统的数据结构和组织情况比较了解,因此对开发人员的素质要求较高。

这样WebGIS构件化就应需求而提到了日程上来。构件化的WebGIS,其形式和结构与传统的GIS有很大的不同。

1. 构件化的GIS可以无缝地集成到开发环境中,提供精炼美观的显示和操作功能。利用GIS构件,GIS最终用户和软件集成商只要利用适当的构件就可快速生产出所需要的应用系统。相对较为专业、有针对性的GIS功能以构件的形式组装、发布,并被集成到具体的系统中去。

2. 构件化的GIS可以嵌入到Web主页,实现Internet/Intranet网络GIS应用系统。另外,构件化的GIS还可以嵌入到任何开发环境中,并充分利用这些语言环境的可视化功能。

3. 构件化GIS降低了系统的复杂性,可以加快开发进度,另一方面也可以降低成本,增加可维护性。 4. 构件化GIS还可以方便地与各种应用系统,如办公软件、图形软件、CAD软件等进行连接和嵌入,方便不同系统之间的互操作。

5. 构件化的GIS,其功能组件可以被封装成能实现与具体任务最紧密相关的功能模块。因而小巧、灵活,可以方便地进行组装和嵌入,在一些非专业GIS系统中,如一般的MIS系统中,也可以很方便的利用GIS构件实现数据的可视化或地图的显示等任务。 三、构件化系统建模 1. 体系结构

从系统构成的角度看,整个系统可以分为GIS应用层、GIS构件层、GIS服务层和GIS存储层四个部分。其基本的系统结构图如下图所示: GIS应用层

GIS构件层

GIS存储层

GIS服务器 网络 缓存

基于构件的GIS体系结构

GIS应用层是指由二次开发人员利用GIS构件开发的,面向某些特殊应用领域用户的应用程序,它可以是基于桌面或网络环境而开发的。

GIS构件层对用户提供GIS功能的接口,但是屏蔽了其实现细节。GIS构件层作为用户与GIS服务器之间的沟通桥梁,一方面要为用户提供功能明确、便于重用的接口构件,一方面又要与服务器实施有效快速的通信及数据传输,并过滤平台异构性。 对于构件层的设计要求具有: 2 层次化:系统结构层次清晰。

2 功能化:系统各构件具有明确而独立的功能。

2 可视化:地理信息数据具有良好的用户可视化界面,简单直观,易于操纵。

2 高效化:利用有效的策略进行数据检索和传输,提高系统的效率(如利用空间索引和缓存技术)。 2 均衡化:Client/Server端负载均衡,在数据传输与运算上有一个权衡。

GIS存储层和GIS服务器部分是系统中最底层的组成部分。存储层实现GIS数据的存储和管理。GIS服务器通过访问GIS存储层的数据,向GIS构件层提供的服务包括: 2 数据访问服务 2 空间数据索引 2 基本空间关系查询 2 事务处理 2 数据共享

WebGIS的一个重要应用,就是利用微软的ActiveX技术,实现支持Web的GIS。下图为GIS在Web上的一个应用模型。 GIS在Web上的应用模型 Internet 浏览器

GIS构件

空间数据库 其它关系数据库 数据源

Web Pages GIS 构件 Web 服务器 GIS 服务器 DCOM HTTP ODBC 用 户

用户通过浏览器使用Web上的GIS应用。此时浏览器可以通过两种方式从数据源获得地理数据并进行空间分析:直接方式和间接方式。

所谓直接方式,是指浏览器通过直接使用GIS构件,利用构件的功能,通过网络,由GIS服务器访问空间数据库,获得所需的数据信息;然后利用构件的空间分析功能完成用户提交的任务,其结果由浏览器显示出来。

而间接方式,是指用户的要求提交到具有GIS功能WebGIS服务器。该服务器利用构件搭建而成,因此可以利用构件访问GIS服务器获得空间数据库中的地理数据,并完成相应的数据操作,最后将任务结果生成动态页面返回给客户端的浏览器。

无论是通过哪种方式,GIS构件层都在中间起了不可欠缺的枢纽作用。 2. 地理空间数据模型

建立地理数据模型的目的是为了以一种结构化、数字化的格式表示显示世界的地理,它允许用户创建、编辑、操作、显示、分析和输出数据。信息或数据的大多数类型包括某类地理元素允许该信息的图形表

示。GIS可以帮助人们组织与地理位置有关的信息,并从这些信息中得到新发现;它使得人们以一种新的方式可视化其它系统所无法看到的关系、模式和趋向。

地理空间实体有两个最基本的特征,那就是空间要素和属性要素。空间要素指的是地理空间实体的几何形态及其与其它地理空间实体的空间关系,属性要素则指的是地理空间实体的社会意义。由于地理空间实体具有复杂性和多样性的特点,对其分类要同时兼顾其空间要素和属性要素两个特征,因此,可以将地理空间实体划分为零维实体、一维实体、二维实体以及复杂实体等四类20多种。

在GIS中有许多表示地理信息的方法,例如有基于图层或是基于特征的。在基于图层的方法中,空间数据被表示成一系列的主题地图、命名图层,用来表示一些给定的主题(诸如道路,建筑,地铁,等高线以及边界等等)。

一个图层是一定空间范围内具有相同属性要素的同类地理空间实体的有机集合。说图层是地理空间实体的有机集合,指的是图层并不是这些地理空间实体的简单堆砌,而是在某种特殊应用领域下地理空间实体的组合,并且相互之间有着密切的联系。我们称这种同类地理空间实体所具有相同属性要素为专题,可见,图层具有两个基本要素——专题和空间范围。

图层是地理空间实体的包容器,是地理空间数据组织的基本单位。地理空间数据的分布性可以通过图层的分布来体现。另外,为了面向更广泛的应用领域,图层还可以按照空间范围或专题进行组合,形成新的地图。

基于图层的方法有以下优点: 1〕查询过程和空间分析简单 2〕有效管理数据的分开传送

随着面向对象技术和对象关系数据库技术的发展,数据库的数据表达能力大大增强了。当前流行的数据库系统几乎都提供长二进制域段,以支持复杂的数据类型。因此,我们可以利用数据库存储地理空间实体并建设空间空间数据库。

除了图层和图层实体的基本信息之外,我们还需要知道与图层相关的显示的各种用户信息,诸如地图组成、所用参照系、图层显示配置等等。根据地理空间数据的组织,我们在数据库中存储的地理空间数据包括图层、图层实体以及与图层相关的参照系、地图组成、显示配置、显示配置项和图例库等。在系统中,我们把封装这些基本地理信息数据并在其上提供方法的对象称为GIS核心对象。这是因为这些对象是整个GIS系统的基石,它们所反映的是GIS的基本数据,提供与数据源的信息交互;同时它们对高层屏蔽了数据库的异构性,提供统一的接口,便于高层组织更为丰富的GIS功能。 3. 构件层次划分

从软件的角度来看,一个构件可以有不同的大小,从一个基本的C++类,到一个能独立完成特定功能的应用构件,并且可以分属不同的层次。基于COM/DCOM机制,根据系统总体设计方案和框架模型,我们可以设计一个分层的GIS对象构件模型,并且按该模型结构开发和实现应用层和服务层的各种GIS功能构件。 数据库

GIS 核 心 对 象 构 件

GIS 服务对象构件

GIS领域应用对象构件

应用程序、浏览器?

GIS构件层的层次划分 服务层 应用层 COM/ DCOM

(1)服务层

服务层又划分为GIS核心对象构件和GIS服务对象构件两个子层。

GIS核心对象构件层负责与数据库的接口,对高层对象构件和应用屏蔽了数据库的异构性,使高层对象构件模型建立在相同的GIS核心对象构件模型之上。

GIS服务对象构件层利用GIS核心对象构件层提供的服务,向更高层提供各种GIS服务,包括项目管理服务、专题与属性管理服务、地理数据管理服务、数据目录服务、地理数据检索与访问服务、地理数据变换与处理服务、地理数据分析与查询服务、图例符号库管理服务、地图显示输出服务等。 (2)应用层

应用层中也有一个对象构件层,它是GIS领域应用对象构件层。建立这个层次很有必要,在应用系统建设中,许多领域相关的成型的对象、功能、服务都可以纳入到GIS领域应用对象构件层中,提高应用软件的重用性。

利用服务层的各种GIS对象构件和GIS领域应用对象构件提供的服务,可以为建立具体的应用提供服务。 通过把应用层与服务层分离,提高应用程序的通用性和可移植性。 4. 构件功能划分

构件化的WebGIS使得应用程序开发员、数据发布者和空间数据库引擎开发商可以往他们的Windows95和Windows NT应用程序中增加动态的、数据驱动的地图。使用该系统应该能够:

2 对多幅地图图层进行漫游和缩放等操作 2 空间分析和查询操作 2 使用ORDB数据库和SQL查询 2 跟踪实时事件(GPS) 2 支持不同地理系统的数据格式 2 使网站具有空间特性

根据需求,我们可以将GIS构件功能划分成:可视化及交互构件、基本空间查询及空间分析构件和面向领域的任务构件。它们分为服务层和应用层两个层次,隐含了空间数据的管理与访问、空间索引、空间缓存等基本技术。

此外可以利用构件构造面向领域的GIS应用系统,包括GIS应用服务器的建设,基于Web的空间信息浏览、可视化、查询以及面向领域的服务构造等。我们可以根据应用领域的特定模型,方便地搭建面向领域的GIS构件,并且随时可以加入到GIS应用构件库中,进而提供给其他用户使用,从而使得系统具有良好的可重用性。

具体来说,GIS构件层中主要的对象构件可以分为六类,这六类对象在系统中的位置和相互之间的关系可以通过下图来表示: 数据源1

地图数据访问对象

地图可视化对象

地图编辑对象

应用工具对象 数据源2 数据源n ?... 应用层 服务层

空间分析对象

GIS服务器

1) 地图数据访问对象类

所谓地图数据访问对象,是指地理相关信息存放在ORDB数据库中的对象,通过该类对象可以对数据库中的相应数据进行增删改查的操作。它们包括提供目录浏览功能(浏览地图、图层、视图层、图例库的名称分类等)的浏览器访问对象,提供访问数据的连接对象和各种地理数据访问对象。这些对象是GIS核心构件对象。

根据地图数据访问类的功能,我们可以将它们分为以下几种对象: 2 连接对象GxConnection 2 图层对象GxLayer

n 几何索引对象GxGeometryIndex n 域段定义对象GxFieldDefs u 域段定义项对象GxFieldDef 2 实体对象GxEntity n GxLine GxPoint

GxPolygon

GxAnnotation GxPoints

GxGeometries

GxGeometry GxImage

GxLines

几何对象GxGeometry(基类) u 点GxPoint u 点簇GxPoints u 线GxLine u 线簇GxLines u 多边形GxPolygon u 标注GxAnnotation u 图像GxImage

u 复杂几何对象GxGeometries 2 参照系对象GxReferenceSystem n 地理坐标系GxGeodeticCoordinate n 投影系GxProjection

2 显示配置方案对象GxDisplaySetting n 显示配置方案项对象GxDisplaySettingItem 2 图例库对象GxLegendLib 2 查询结果对象

n 查询记录对象GxRecordSet u 记录域段集GxFields l 记录域段GxField

地图数据访问对象类之间的关系可以用下图来表示表示:

GxGeometry

(from 几何对象)

<>

GxDisplaySettingItem GxEntity 0..1 0..1 GxMap

GxReferenceSystem

GxLegendLib

GxDisplaySetting

配置方案-图例库 1 0..* 方案-项 GxLayer

图层-参照系 0..1 0..n 0..n 0..*

图层-实体

GxConnection 0..* 管理 0..* 管理 0..* 管理 0..* 管理 0..* 管理

图层-配置方案 0..1 0..* 0..* 0..* 0..1 0..1 0..* 0..* 0..*

0..* 1

2) 地图可视化对象类

这个对象类用来提供显示地图的构件。可以通过该对象类来设置地图各图层的显示属性,包括地图显示比例尺、地图显示范围、图层的可视性、可选性和可编辑性等。同时地图显示构件可以与其他构件组合以提供不同的附加可视化功能,如:地图缩放、漫游、信息查询、选择、最短路径显示,地图分析显示,实体标记显示等等。此外它还包括动态图层的显示(GPS跟踪)、可选的多投影系显示,地图打印输出等。具体分为一下四类对象: 2 地图显示构件GxMapView 2 地图对象GxMap

2 显示图层对象GxMapLayer 2 动态图层对象GxTrackingLayer 它们之间的关系可以用下图来表示表示: GxMapLayer

GxMapView 0..* 1 GxMap

(from 地图数据访问对象) 0..2 0..*

GxTrackingLayer 0-1

每个地图显示构件GxMapView中可以显示两幅地图:背景图和动态图。背景图一般指显示过程中数据基本不变动,只作为参考显示的地图;而动态图则指在显示过程中需要改变内容的地图。每个地图可

以由多个显示图层组成;特殊的,它还可以有一个动态图层以适应GPS跟踪显示的需求。 3) 地图编辑工具类

我们在使用地图的过程中,尤其是在地图录入中需要输入和编辑点、线、面等多种几何图形,在地图显示中需要有鼠标缩放、漫游等功能。因此需要系统提供一些编辑工具。地图编辑工具可以集成在统一环境下;也可以是分离的工具对象,功能彼此独立。在这里我们将不同功能做成独立的对象,是为了更好地进行灵活的重用。因为在一些应用中,需要其中的部分图形编辑功能,而不是全部功能。更何况我们可以在应用工具类中,根据需要利用这些地图编辑工具再搭建一个完全的集成地图编辑环境。 地图编辑工具类对象根据功能的不同,可以分为一下几种: 2 编辑工具管理对象GxTools 2 鼠标工具对象

n 范围缩小工具GtZoomOut n 范围扩大工具GtZoomIn n 拾取工具GtPick n 漫游工具GtPalm 2 几何对象输入

n 点输入工具GtInputPoint n 简单线输入工具GtInputLine n 复杂线输入工具 GtInputPolyLine n 多边形输入工具GtInputPolygon n 椭圆形输入工具GtInputEllipse n 矩形输入工具GtInputRect 2 几何对象编辑

n 点编辑工具GtEditPoint n 简单线编辑工具GtEditLine n 复杂线编辑工具GtEditPolyLine

n 多边形编辑工具GtEditPolygon n 椭圆形编辑工具GtEditEllipse n 矩形编辑工具GtEditRect 4) 地图空间分析工具类

在GIS中有一类很大的应用是对地理因素做空间分析,用于辅助决策。我们可以提炼出一些常用的地图空间分析应用,做成工具类供用户使用。例如地址匹配、拓扑分析等等。具体可以分为: 2 地址匹配GaAddressMatching

2 网络分析(连通性,最短路径)GaConnectivity、GaShortestPath 2 缓冲区分析GaBuffer 2 地图叠加分析GaOverlay 2 多边形生成GaPolyGen

2 地图一致性检查(重合,相交,重叠)GaConsistCheck 5) 实用功能对象类

有时当用户使用系统发生错误时,希望系统能够提供一种手段用于查询错误信息,这也是一个系统具有友好的用户界面的要求。因此我们应该在系统设计中,增加一个错误处理机制。另外,对于一些常用但在用户应用中不易实现的数组、集合等类型的对象模板,也应该在系统中得到支持。具体可分为: 2 错误处理对象GxError 2 集合对象GxSet 2 数组对象GxArray 2 枚举对象GxEnumeration 2 被选集对象GxSelection 2 功能函数对象GxUtility 6) 应用工具类

在GIS服务构件基础上,可以开发各种基于浏览器的可视化应用构件。基本的可以包括:

2 可视化连接(连接信息的编辑、访问及该连接所管理的各种地图数据访问对象的可视化界面) 2 可视化数据管理(各数据访问对象属性的可视化编辑与访问) 1. 地图属性可视化 2. 图层属性可视化 3. 显示配置属性可视化 4. 地图配置属性可视化 5. 参照系属性可视化

2 地图编辑(图层内实体几何信息和属性信息的编辑,这是搭建一个地图编辑的集成环境,将地图编辑对象类进行组合使用) 2 图例编辑 2 图例库浏览 2 地图整饰与打印

2 不同格式地图导入导出(本系统数据与其它系统不同格式数据的转换) 2 属性数据导

此外,具体应用领域的用户可以根据其领域需求,度身定做自己的GIS应用构件。 四、改进系统性能的技术要点

前面已经提到WebGIS面临的主要问题是如何提高系统性能,主要表现在大数据量的网络传输效率。人们在这个问题上做了许多研究,并提出了许多解决方案。例如对于大数据地图的显示,我们可以采取分层传输分层显示数据的方法,根据人们视觉特点,先显示粗粒度的轮廓图,再逐层显示具体细节。而在具体应用到的技术上,空间索引和缓存技术尤其值得一提。 1.空间索引

空间数据库中空间实体的表达形式复杂,数据量大,各种空间操作不仅计算量巨大,而且多具有面向邻域的特点。针对空间实体的这些特点,我们可以在各种空间操作之前对操作地理实体作初步的筛选,减少参加空间操作的空间实体数量,从而缩短计算时间,提高整个系统的性能。

在空间数据库设计中,为了提高数据存取和管理的效率,一般都要为空间数据库建立索引,不同的空间数据索引结构和索引管理技术,直接影响系统的性能。空间数据的复杂性决定了其索引结构的复杂性。在WebGIS中,我们采用了两种简单而又实用的空间索引技术:层次网格空间索引和三叉树网格空间索引。这两个空间索引技术除了应用于空间数据管理和访问之外,还融会到各种空间查询、空间分析算法和地图显示算法中去。不仅可以提高空间数据的存取访问效率,同时也可以提高空间查询和空间分析的

效率以及地图在客户端的显示速度。 2.缓存技术

缓存技术是改进系统性能的重要技术。在基于ORDB的Web GIS系统中,影响数据存取效率的环节主要有两个:一是数据库的存取效率,特别是采用ORDB存储空间数据的效率;另一个则是网络的传输效率。我们可以采取不同的策略来解决这两种问题。 (1)一级缓存:数据库缓存。

ORDB存取空间数据的主要效率瓶颈是数据库的存取效率,为了解决这个问题,我们可以在服务器上利用内存和磁盘资源建立全局性的数据库缓存,将经常使用的数据库数据存储在内存和磁盘中,加速数据库的访问效率,提高服务器的数据库访问性能。 (2)二级和三级缓存:网络缓存

当网络的带宽很窄的时候,本地和远程数据访问就存在着数据存取效率的巨大差异。特别是大型广域网,如Internet,存在着严重的带宽瓶颈,普通用户的可用带宽通常只有几K或几十K,这大大限制了空间数据在分布式环境中的存取和传输。我们可以通过发掘客户端和网络资源,用客户端硬件资源为代价,换取WebGIS的性能,从而在一定程度上解决分布式计算环境中的存取效率问题。网络共享缓存由于使用共享资源,可以实现海量缓存,大大加快了缓存命中率,提高访问效率,也节省了客户工作站的缓存空间,可以大大缓解本机磁盘数据存取与网络数据存取、高速局域网与带宽紧张的广域主干网之间的速度矛盾。

第三章 系统设计与实现

在当前国内的GIS用户中,应用系统主要依赖于Windows平台;而COM/DCOM机制是微软公司的产品,与微软的系列开发软件衔接好,运行较为稳定。针对这种情况,我们采用微软的COM/DCOM机制来实现WebGIS构件。对于每个构件对象,我们必须明确它的功能,定义它对外的接口(包括属性和方法)。在这一章中,我将主要就地图数据访问对象类及地图可视化对象类的设计和实现作一个较为详细的阐述。各部分的具体设计请参见【16】。 一、地图数据访问对象类

(一) GxConnection 连接对象

连接对象是用户访问数据源的一个途径。它应该具有连接管理和数据管理两大功能,具体又可细分为: 2 建立或断开与数据源的连接;

2 管理地图对象(包括增删改查地图数据); 2 管理图层对象(包括增删改查图层数据); 2 管理参照系对象(包括增删改查参照系数据); 2 管理显示配置对象(包括增删改查显示配置数据);

2 管理图例库对象(包括增删改查图例库数据); 2 事务支持机制; 2 SQL查询

因此可以定义连接对象的接口: 定义 说明 属性

String HostName

要连接的服务器所在的主机名,可以是IP地址,或是主机域名地址。该属性在连接状态下只读。

String DataSourceName

要连接的服务器所提供的数据源的名称。在连接状态下只读。

String UserName

用户名。在连接状态下只读。

String Password

用户口令。在连接状态下只读。

Boolean AutoCommit 是否自动提交修改的数据。

Boolean IsConnected

只读属性。是否处于连接状态。只有在处于连接状态时,与连接相关的方法才能调用。 方法 连接方法

Boolean Connect ()

通过主机名、数据源名称、用户名和用户口令等属性值建立与服务器的连接

Disconnect () 断开连接。 事务处理

Boolean Commit ()

向服务器的提交对图层数据的修改,用于维护图层与图层之间的一致性。

Boolean RollBack ()

取消从上一次提交以来的对图层数据的修改。

Boolean ExecSQL (Variant SQL) 在数据源执行一组SQL语句 地图管理

Boolean AddMap (GxMap Map) 把新的地图加入到数据库中

GxLayer OpenMap (String MapName) 通过地图名打开一个地图。

Boolean RemoveMap (String MapName) 把指定的地图从数据库中删除。

GxEnumeration EnumMap (String NameExpression) 查找名称匹配的地图名 图层管理

Boolean AddLayer (GxLayer Layer) 把新的图层加入到数据库

GxLayer OpenLayer (String LayerName) 通过图层名打开一个图层。

Boolean RemoveLayer (String LayerName) 把指定的图层从数据库中删除。

GxEnumeration EnumLayer (String NameExpression) 查找名称匹配的图层名

图例库管理

Boolean AddLegendLib (GxLegendLib LegendLib) 往数据库加入一个新的图例库

GxLegendLib OpenLegendLib (String LegendLibName) 根据图例库的名字打开一个图例库

Boolean RemoveLegendLib (String LegendLibName) 根据图例库的名字从数据库删除一个图例库

GxEumeration EnumLegendLib (String NameExpression) 查找名称匹配的所有图例库名

参照系管理

Boolean AddReferenceSystem (GxReferenceSystem ReferenceSystem ) 往服务器上加入一个参照系

GxReferenceSystem OpenReferenceSystem (String ReferenceName) 根据名字打开一个参照系

Boolean RemoveReferenceSystem (String ReferenceName) 删除系统中的一个参照系

GxEumeration EnumReferenceSystem (String NameExpression) 按名字匹配列举所有参照系名

显示配置管理

Boolean AddDisplaySetting (GxDisplaySetting DisplaySetting) 向服务器添加一个显示配置方案

GxDisplaySetting OpenDisplaySetting (String DisplaySettingName) 打开一个显示配置方案

Boolean RemoveDisplaySetting (String DisplaySettingName) 从服务器上删除一个显示配置

GxEnumeration EnumDisplaySetting (String NameExpression) 按名字匹配列举所有显示配置名

(二) GxLayer 图层对象

图层对象描述了图层信息(一组描述性信息,空间索引信息,实体表的用户字段定义集),它管理着图层中的多个实体。其具体功能应该包括: 2 图层描述信息的编辑 2 空间索引信息的编辑

2 实体表的用户字段定义集的编辑 2 实体的增删

2 刷新与更新图层数据 2 查询图层中的实体

根据图层与数据源的关联,可以把图层分为三类共五种状态:

2 游离状态:图层不从属于任何一个连接。按是否被编辑又可分两种子状态,Unlink 和 Unlink & Modified;

2 连接状态:图层从属于某个连接。按是否被编辑又可分两种子状态,Link 和 Link & Modified;

2 不可用状态:数据源的图层数据被破坏,导致服务器无法返回有效数据。此时需要运行数据库修复程序修复图层。

因此可以定义图层对象的接口: 定义 说明 属性 Long ID

图层ID,图层的唯一标志

GxConnection Connection 图层对象从属的连接对象

String Name

图层名,是访问数据源存储的图层的用户标识。

String Description

存储用户对图层的描述信息。

String Category 图层分类信息

String EntityTable

图层对应的实体表在数据源存储的表名。图层处于游离状态下此属性可读写,图层处于连接状态下此属性只读。

String EntitySchema

实体表的模式名, 说明该表由哪个用户所有

String ReferenceSystem 图层使用的参照系的名称。

String DisplaySetting 图层使用的显示配置的名称。

String DisplaySettingField

显示配置字段名。在显示图层的一个实体时,地图显示对象根据该属性查找实体表中相应字段的值,然后在显示配置中匹配到一个配置项,从而确定显示该实体所应采用的图例,和如何显示其标注(如字体,大小,颜色)。

String AnnotationField

标注字段名。在显示图层的一个实体时,地图显示对象根据该属性查找实体表中相应字段的值,然后以之为实体标注内容。

Double MapScale 图层的比例尺

Long GeomotryType

用于说明该图层所能包含的几何实体的类型。诸如点、线、面等。 方法 图层信息

Boolean IsConnected () 判断该图层是否处于连接状态

Boolean IsModified () 判断该图层是否被修改过。

GxRect GetExtent () 取得图层的范围

SetExtent (GxRect Extent) 设置图层的范围

GxFieldDefs GetFieldDefs ()

取得图层对应的实体表的用户字段定义集合。

SetFieldDefs (GxFieldDefs FieldDefs) 设置该图层对应的实体表的字段定义集合。

GxGeometryIndex GetGeometryIndex () 获得图层的空间索引信息。

SetGeometryIndex (GeometryIndex GxGeometryIndex) 设置图层的空间索引信息。

Boolean Refresh ()

与服务端通信,获取该图层的最新的描述信息及空间索引信息,清除过期的实体,保证图层中的信息与数据源的数据的一致性。

Boolean Update ()

在连接状态下,把当前对图层信息,图层中实体的所有修改一并提交到数据源中。在游离状态下,只提交对图层描述信息和空间索引信息的修改。提交后修改结果会生效,如重新构造空间索引。

CancleUpdate ()

取消自上次Update以来对图层描述信息,空间索引信息,和实体的修改。 实体管理

GxEntity CreateEntity ()

创建一个从属于本图层的一个新实体对象。

RemoveEntity (Long EntityID) 根据实体ID删除实体。

RemoveAllEntity () 删除图层的所有实体。

GxEntity GetEntity (Long EntityID) 根据实体号得到相应的实体对象。

GxSelection SearchEntity (Object Geometry, Long Relation, Double MinDis, String WhereCondition)

查找图层中满足空间查询条件(相等、相交、相离、包含等空间关系) 和SQL查询条件的实体。

GxSelection SearchAllEntity () 查找图层所有的实体。

(三) GxGeometryIndex 几何索引对象

在空间数据库设计中,为了提高数据存取和管理的效率,一般都要为空间数据库建立索引。集合索引对象就是用来记录一定图幅范围内的实体划分空间索引时所需要的参数。 定义 说明 属性 Long Row 空间索引行数 Long Col

空间索引列数 方法

SetBound (GxRect Rect) 设置空间索引的图幅范围。

GxRect GetBound () 取得空间索引的图幅范围。

(四) GxFieldDef 字段定义对象

对于图层中的实体,除了地理几何信息之外,还包括属性信息即空间实体的社会意义。对于每类实体,人们对它们的关心都有所不同。应用的不同导致属性数据的格式意义有所不同,从而使得数据库中的属性域段会随之而不同。为了增加系统的灵活性,有必要提供一种途径,使得用户可以定义自己的域段。字段定义对象正是为了记录这样一个域段定义的内容而设计的。 定义 说明 属性

String Name 字段名

Short Type

字段类型(数据库支持的数据类型)

Long Size

字符串类型的域段的长度

Boolean Nullable 域段是否可以为空。

Boolean Unique 域段值是否唯一。 方法

Copy (GxFieldDef FieldDef) 复制FieldDef的内容到当前对象。

(五) GxFieldDefs 字段定义集合对象

字段定义集合对象用于管理一组字段定义对象。在上提供对字段定义的增删改查。

定义 说明 属性 Long Count

包含的字段定义的个数。(只读) 方法

Add (GxFieldDef FieldDef) 在集合最后加上一个新字段定义。

InsertAt (Long Index, GxFieldDef FieldDef) 在第Index位置插入FieldDef

RemoveAt (Long Index) 删除第Index个元素。

RemoveAll ()

删除数组中所有的元素

SetAt (Long Index, GxFieldDef FieldDef) 设置第Index个字段定义的值

GxFieldDef GetAt (Long Index) 第Index个字段定义。

(六) GxLegendLib 图例库对象

图例库访问对象用来管理库中的图例。任何一个大于0的整数都是一个有效的图例号,如果图例号在图例库中存在,它对应一个用户配定的图例;如果不存在,它对应缺省图例。 因此可以定义图例库对象的接口: 定义 说明 属性 Long ID

图例库ID,图例库的唯一标志

Long LegendCount 图例库中图例的个数 方法

图例管理

Long AddLegend (GxLegend Legend)

把新的图例加到图例库中,并分配一个新的图例ID。

Long RemoveLegend (Long Index) 删除一个图例

CGxLegend GetLegend (Long Index) 根据Index 获得一个图例

Long UpdateLegend (Long Index, CGxLegend Legend) 根据Index 更新一个图例 Clear () 删除所有的图例 查询管理

Long SearchIndexByID (Long ID) 根据图例的ID查找图例的序号。

Long GetLegendID (Long Index) 根据图例的Index查找图例的ID。

图例库管理

Boolean Update ()

把当前对图例库的修改更新到数据库上去。

Boolean Refresh ()

从数据库上获取最新的图例库信息

(七) GxDisplaySetting 显示配置对象

显示配置对象用来记录如何显示图层实体的配置方案,包括画实体采用哪种图例(还要有图例库的协助)如何显示图例;实体的标注采用何种字体、颜色等。

它可以有两种状态。处于连接状态时,连接信息有效,它是数据源显示配置在内存中的一个副本,通过Update,Refresh方法可以提交修改或从数据源获得最新的版本。处于游离状态时,连接信息无效,作为显示配置的临时存储。而显示配置信息则一直有效。 因此可以定义显示配置对象的接口: 定义 说明

属性 Long ID

显示配置ID,显示配置的唯一标志

GxConnection Connection 显示配置从属的连接对象

String Name

显示配置名,是访问数据源存储的显示配置的用户标识。

String Description

用户对显示配置的描述信息。

String Category 显示配置分类信息

String ItemTable

显示配置对应的配置项表在数据源存储的表名。显示配置处于游离状态下此属性可读写,显示配置处于连接状态下此属性只读。

String SchemaName

显示配置对应的实体表在数据源存储的模式名。说明该表由哪个用户拥有。显示配置处于游离状态下此属性可读写,显示配置处于连接状态下此属性只读。

Long Count

当前显示配置共有多少个配置项。

Long MatchType

显示配置匹配类型,分单值匹配和区间匹配两种。

Long FieldType

显示配置匹配用户字段的类型。

Long FieldSize 显示配置字段的大小。

String LegendLib

显示配置关联的图例库的名称,在连接状态下,可通过此属性访问从属的连接得到图例库。显示配置可以不对应任何图例库。

Double SettingScale

显示配置比例尺。用于控制图例,标注的放缩。

方法 信息管理

Boolean IsConnected () 该显示配置是否处于连接状态

Boolean IsModified () 该显示配置是否被修改过。

Boolean Refresh ()

刷新显示配置,使之与数据源保持一致。

Boolean Update ()

在连接状态下,把当前对显示配置信息,以及其中所有配置项的所有修改一并提交到数据源中。

Copy (GxDisplaySetting DisplaySetting) 复制DisplaySetting的数据到当前显示配置对象

GxDisplaySetting Clone ()

克隆当前显示配置的信息完全副本。

显示配置项管理

AddItem (GxDisplaySettingItem NewItem) 把新的配置项加到显示配置中。

InsertItem (Long Index, GxDisplaySettingItem NewItem) 把新的配置项插入到显示配置中。

RemoveItem (Long Index)

按索引号删除显示配置的一个配置项

RemoveAllItem ()

删除显示配置的所有配置项。

UpdateItem (Long Index, GxDisplaySettingItem DisplaySettingItem) 按索引号更新显示配置的配置项

GxDisplaySettingItem GetItem (Long Index) 按索引号获得显示配置的一个配置项

Long FindByName (String Name)

根据显示配置项的名称查找显示配置项的索引号。

Long FindByValue (Variant Value)

根据一个实体显示配置字段的值在显示配置中匹配,查找相应的配置项的索引号。

(八) GxDisplaySettingItem 配置项对象

配置项对象管理在地图显示中对具有共性实体的显示配置。它包括匹配信息和配置信息。在显示时,根据显示配置方案中指定的匹配域段和匹配值,通过与配置项的匹配信息匹配,找到实体对应的配置项,然后再利用其中的信息显示实体。 因此可以定义配置项对象的接口: 定义 说明 属性

String Name 显示配置项名称

Variant MinValue 匹配信息最小值

Variant MaxValue 匹配信息最大值

Boolean MinClosed

配置项匹配范围是否左关闭

Boolean MaxClosed

配置项匹配范围是否右关闭

Long LegendID 配置项图例ID

Double LegendWidth

在SettingScale下显示图例时,图例的宽度。

Double LegendHeight

在SettingScale下显示图例时,图例的高度。

Double LegendEscapement

显示图例时,图例相对于X轴正向逆时针旋转的角度

Long LegendFrontColor 显示图例时使用的前景色。

Long LegendBackColor 显示图例时使用的背景色。

String AnnoFaceName 标注字体名称。

Double AnnoWidth

在SettingScale下显示标注时,标注的宽度。

Double AnnoHeight

在SettingScale下显示标注时,标注的高度。

Long AnnoColor

显示标注时使用的颜色。

Long AnnoBold 标注的粗体设置信息

Boolean AnnoItalic 标注是否斜体显示

Boolean AnnoUnderLine 标注是否使用下划线显示 方法

Copy (GxDisplaySettingItem DisplaySettingItem) 复制DisplaySettingItem的所有信息到当前对象中。

(九) GxReferenceSystem 参照系对象

参照系用来描述客观世界中事物与系统中实体对象的空间信息映射关系。在系统中一个图层与一个参照系关联,参照系记录了图层中的空间数据的是如何从原始数据转化而来的,用户可以通过参照系来实现空间数据的坐标变换。

参照系有两种状态。处于连接状态时,连接信息有效,它是数据源参照系在内存中的一个副本,通过Update、Refresh方法可以提交修改或从数据源获得最新的版本。处于游离状态时,连接信息无效,作为参照系的临时存储。而参照系信息则一直有效。 因此可以定义参照系对象的接口: 定义 说明

属性 Long ID

参照系ID,参照系的唯一标志。

GxConnection Connection

参照系从属的连接对象,表明该参照系是通过哪个连接打开的。

String Name 参照系名

String Description 用户对参照系的描述信息。

String Category 参照系分类信息

String Schema 参照系的模式名 方法

Boolean IsConnected () 该参照系是否处于连接状态

Boolean IsModified () 该参照系是否被修改过。

Boolean Refresh ()

刷新参照系,使之与数据源保持一致。

Boolean Update ()

在连接状态下,把当前对参照系信息提交到数据源中。

Copy (GxReferenceSystem RefSys) 复制RefSys的数据到当前参照系对象

GxReferenceSystem Clone () 克隆一个参照系

Object Transform (Object Geometry, GxReferenceSystem RefSys) 几何对象从一个参照系到另一个参照系的坐标转化。

(十) GxEntity 实体对象

一个实体通常从属于一个图层。一个实体对象应该包括几何信息和用户信息两部分。每个图层有一个实体表,存储从属于该图层的实体。 因此可以定义配置项对象的接口: 定义 说明 属性 Long ID 实体的唯一标识

GxLayer Layer 实体所在的图层对象 方法

Boolean IsModified () 实体是否处于被修改状态。

Variant GetField (String FieldName)

获得实体指定用户字段(按字段名)的值,可以是任意类型。

SetField (String FieldName, Variant Value) 对实体的指定用户字段赋值。

GxGeometry GetGeometry () 得到实体的几何对象

SetGeometry (GxGeometry Geometry) 设置实体的几何对象。

Boolean Update ()

把当前对实体信息的修改更新到图层上。

Boolean Refresh () 获得当前实体的最新数据。

(十一) GxGeometry 几何对象(基类)

几何对象是现实世界中的事物(空间实体)在GIS中的抽象。由于客观事物中存在着一些共性,我们可以得到它们共有的一些属性和方法,在系统中通过几何对象来描述这些共性。当然客观事物也存在差异,于是我们就设计了一组几何对象的派生类来描述这些差异。

此外,几何对象的关系及运算是空间分析的基础,因此我们应该提供几何对象之间的关系和运算接口,

包括相等、接触、包含、被包含、相交、重叠等关系和求交、求余、联合等运算。 因此可以定义几何对象的接口: 定义 说明 属性 Long Type

几何类型,可以是点、线、多边形、点簇、线簇、复杂几何体、图像、标注等类型。

Double MinDis

在进行空间关系和几何关系等运算时会有一些小误差,可以用精度值来实现对误差大小的控制 方法

Object Clone () 克隆一个几何对象

Boolean IsEmpty () 判断几何对象是否为空

GxRect GetExtent () 获得几何对象的范围

Double GetAzimuth (Object Geometry) 获得当前几何对象相对参数Geometry的方位角

GxPoint GetCenter () 获得几何对象的中心点。

空间关系及其运算

Boolean Equal (Object Geometry) 判断当前几何对象与Geometry是否相等

Boolean Intersect (Object Geometry)

当前几何对象与Geometry是否相交(广义相交)

本文来源:https://www.bwwdw.com/article/z5l.html

Top