(控制理论与控制工程专业论文)基于组件的internet地理信息系统研究与实现.pdf_第1页
(控制理论与控制工程专业论文)基于组件的internet地理信息系统研究与实现.pdf_第2页
(控制理论与控制工程专业论文)基于组件的internet地理信息系统研究与实现.pdf_第3页
(控制理论与控制工程专业论文)基于组件的internet地理信息系统研究与实现.pdf_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于组件的 i n t e r n e t 地理信息系统研究与实现 摘 要 ( i n t e r n e t 目 前 已 发 展 成 为 跨 越 全 球 的 信 息 交 互 媒 介 , 它 的 迅 速 发 展 改 变 了 传 统 的数据访问、数据共享和数据分发的方式,在地理信息系统中,它甚至改变了信息 的表现和分析手段。目 前,基于 i n t e r n e t的地理信息系统 ( g e o g r a p h i c s y s t e m, g i s )正随着 i n t e r n e t 和 w ww相关技术的发展而迅速发展着. i n f o r m a t i o n 本文在参照 i n t e r n e t发展较早的数据库等应用的基础上,研究并总结了现行 i n t e r n e t地理信息系统 ( i n t e r n e t gi s )的体系结构 以及实现技术。i n t e r n e t gi s有两 种体系结构:基于服务端扩展和基于客户端扩展。基于服务端扩展的 i n t e r n e t g i s 可采用 c gi ,混合 c g i 或应用编程接 口等实现技术:基于客户端扩展的 i n t e r n e t g i s 可采用p l u g - i n , a c t i v e x或 j a v a a p p l e t 等技术。 在此基础上,本文针对现行 i n t e r n e t gi s存在的问题 以及 i n t e r n e t数据传输速 率低等问题 ,提出一个 i n t e r n e t g i s新的方案。它采用客户端扩展技术 ac t iv e x, 以扩展浏览器功能,在本地实现任意开窗、放大、缩小及漫游等地理信息功能,以 充分利用本地的计算资源:在 i n t e r n e t上传输矢量 图形数据,而不是图像 ,从而减 少了数据传输量以解决数据传输速率低的问题;采用关系数据库统一管理空间数据 和属性数据 ,以解决分离管理带来的数据不一致性问题,并发挥关系数据库管理系 统的强大数据处理能力。 组件技术是一种新兴的软件开发方法,它能极大地提高软件的开0率以乃 增加代码可重用性, 现 i n t e r n e t gi s时, 组件技术正引发软件 开发领域的一场革命 采用组件技术,为此, 范 所 以 本 文 在 开 发 实 本文在组件技术方面也进行 了一些探索。 本文在 i n t e r n e t g i s的体系结构、实现技术以及利用组件技术设计开发方面进 行了有益的探索,实现了一个能提供 g i s常用功能的 i n t e r n e t g i s ,用户可以利用 普通浏览器,在特定的 ht ml 网页中浏览和操作存储在远端 g i s数据库中的地 图 数 据 和 关 联 信 息 。 经 过 进 一 步 的 实 用 化 研 究 后 , 该 系 统 将 会 有 较 好 的 应 用 前 景 。 丫 关键字;地理信息系统、g i s , i n t e r n e t 、组件、a c t i v e x 、c o m, o l f r e s e a r c h a n d i m p l e m e n t a t i o n o f i n t e r n e t g i s u s i n g c o m p o n e n t t e c h n o l o g y a b s t r a c t i n t e r n e t h a s b e c o m e a g l o b a l c o m m u n i c a t i o n m e d i a . i t h a s b e e n c h a n g i n g t h e w a y o f d a t a a c c e s s , d a t a s h a r i n g a n d d a t a d i s s e m i n a t i o n . i t i s e v e n c h a n g i n g t h e m e a n s o f a n a l y s i s a n d v i s u a l i z a t i o n i n gi s ( g e o g r a p h ic i n f o r ma t i o n s y s t e m) . t o d a y , i n t e r n e t - b a s e d gi s i s r a p i d l y e v o l v e d wi t h t h e d e v e l o p m e n t o f i n t e r n e t a n d we b t e c h n o l o g i e s . i n t h i s p a p e r , w e a n a ly z e t h e a r c h i t e c t u r e a n d t e c h n o lo g y o f i n t e r n e t gi s , t h e y c a n b e d i v i d e d i n t o t wo c a t e g o r i e s : s e r v e r - s i d e e x t e n s i o n a p p l i c a t i o n a n d c l i e n t - s i d e e x t e n s i o n a p p l i c a t i o n . s e r v e r - s i d e e x t e n s i o n a p p l i c a t i o n u s e s c gi , mi x e d c gi a n d a p p l i c a t i o n p r o g r a mm i n g i n t e r f a c e ( ap i ) t e c h n o l o g i e s , a n d p l u g - i n , ac t i v e x a n d j a v a ap p l e t c a n b e u s e d i n cl i e n t - s i d e e x t e n s i o n a p p l i c a t i o n b a s e d o n t h e s e a n a l y s i s , w e d e s i g n a n d d e v e l o p a n i n t e r n e t gi s , w h i c h u s e s t h e a c t i v e x t e c h n o l o g y t o e x t e n d t h e b r o w s e r s f u n c t i o n s i n o r d e r t o d i s p l a y t h e ma p . c o n s i d e r i n g t h e l o w s p e e d o f i n t e r n e t , i n t e r n e t t h a t c a n r e d u c e t h e we t r a n s mi t t h e v e c t o r t y p e o f d a t a i n s t e a d o f i ma g e f i l e o n a mo u n t o f t r a n s mi s s i o n . we s t o r e b o t h t h e s e s p a t i a l d a t a a n d t h e i r a t t r i b u t e d a t a i n o n e r e l a t i o n a l d a t a b a s e i n o r d e r t o u t i l i z e t h e p o we r o f d b ms t h e c o m p o n e n t t e c h n o l o g y i s a n e w m e t h o d o f d e v e l o p i n g s o f t w a r e , w h i c h w i l l i m p r o v e t h e e f f i c i e n c y o f s o f t w a r e d e v e l o p i n g a n d m a k e t h e s o f t w a r e r e u s a b l e . s o w e l l u s e t h e c o mp o n e n t t e c h n o l o g y t o b u i l d o u r i n t e r n e t g i s . i n t h i s p a p e r , w e m a k e a s t u d y o f i n t e rn e t g i s s a r c h i t e c t u r e a n d t e c h n o l o g i e s , t h e n w e u s e c o m p o n e n t t e c h n o lo g y t o b u i l d a n i n t e rne t g i s . i t p r o v i d e s s o me f u n c t i o n s , w h i c h t h e t r a d it io n a l d e s k t o p g i s s o ft w a r e w il l h a v e . a n d w e c a n b r o w s e t h e m a p a n d a s s o c i a t e d i n f o r m a t i o n i n o u r i n t e rne t b r o ws e r b y in s e r ti n g i t i n t h e b r o w s e r . k e y w o r d : g e o g r a p h i c i n f o r m a t i o n s y s t e m , g i s , i n t e r n e t , a c t i v e x , c o m , o l e 引 言 引言 地理信息系统 ( g e o g r a p h i c i n f o r m a t i o n s y s t e m, g i s )是一种处理空n数据 ( s p a t i a l d a t a )和相关非空间数据 ( a s p a t i a l d a t a )的数据库系统。它除具有普通 数据库系统的研究内容外,还包括空间数据的输入、存储、检索以及空间运算、空 间分析等方面的研究内容川。它的应用范围非常广泛,现在,基于 g i s的研究成果 在交通、通信、国防、地质勘探、环保等许多领域都得到了广泛的应用和发展。 i n t e r n e t目前己发展成为跨越全球的信息交互媒介,它的迅速发展改变了传统 的数据访问、 数据共享和数据分发的方式, 这对传统的资讯方式产生了巨大的影响, 在包括g i s在内的许多领域,它甚至改变了 信息的表现和分析手段,对人们传统的 信息制作、获取和利用方式产生了很大的冲击【 。 i n t e r n e t与地理信息系统技术的结合为 g i s数据和信息的获取、共享、发布提 供了新的方法。i n t e r n e t 地理信息系统 ( 称为 i n t e r n e t g i s )是近年来地理信息系统 发展的方向之一( z ) 。虽然基于 i n t e r n e t的 g i s已经取得了一些成果,但与目前用户 的需 求相比, 目前的系统还仅仅处于初级阶段, 存在很多不足。 所以尽快开展 i n t e r n e t g i s 的研究具有非常重要的实际应用价值. 但 i n t e r n e t 有一个很大的缺点,就是传输速率较低。尤其在实时响应要求较高 的大容量数据传送的 g i s应用领域,这个问题更为突出0 1 。解决这个问题,理论上 有两个方面,一方面是提高网络的传输速率,这有待于网络设备、线路的改善和新 一代 i n t e r n e t 通信协议的研究发展:另一方面就是从应用软件着手,合理设计软件 结构,提高软件的执行效率。这正是本文重点讨论的一个问题。虽然目前己有一些 商品化的 i n t e r n e t g i s软件出现, 但其中大多数是厂商们为了尽快占领市场而在原 g i s软件的基础上,加上一些 i n t e r n e t处理技术实现的,它们利用原有的地理信息 系 统, 处 理客户 浏览 器端 请求, 然后 把处 理结 果转换 成g i f 等图 形 格式文 件, 返还 给客户端浏览器 3 1 。这种方法从本质上讲并不适合 i n t e r n e t 环境。所以本文在分析 现有 gi s技术和 i n t e r n e t技术基础上,提出一种基于矢量结构的、适于 i n t e r n e t 环 境的 i n t e r n e t g i s -n k w e b g i s方案。它在网络上传输的是矢量数据,而不是 g i f 文件,矢量数据比相同的栅格数据量要小得多,所以该系统比目前一些基于栅格的 i n t e r n e t g i s 效率有明显提高口 地理信息系统相对来说是一个比较复杂的、需要一定地理专业知识的特殊的 软件系统。长期 以来 ,开发一个地理信息系统应用软件 ,基本上是这么一个过程: 首先,选择一个合适的地理信息开发平台;然后利用该平台提供的编程语言,进行 二次开发。 而这些开发平台提供的二次开发语言往往是比较特殊的( 例如, a r c / i n f o 采用 a m l ) ,不属于主流开发语言,大多数只能算二流语言 .这些开发语言提供 自 己 独有的庞大的函数、命令库,这样一来,应用程序开发人员既要熟悉业务,又要 熟悉特定的开发平台语言,从而进一步增加了地理信息系统的复杂度,延长了应用 引 言 系统开发周期4 1 。许多部门想应用地理信息系统,却苦于没有一支合适的开发队伍 而望而却步,所以这种开发模式,人大限制了地理信息系统在更广范围内的应用。 解决这一问题的有利武器是组件思想和组件技术。 目前 ,在软件 开发领域,一场新的革命正在悄悄兴起 ,这是由日趋成熟的组 件技术引发的 4 1 。几年以 前,当微软公司首先使用 o l e的时候,其初衷是为了增强 软件的互操作性。然而在使用过程中,人们逐渐认识到这一技术背后的实质性内容 和它在软件开发中所扮演的重要角色。组件技术以前所未有的方式提高软件产业的 生 产效 率, 这 一点己 逐步 成为 软件 开发 人员的 共识。 传 统的c l i e n t / s e r v e r 结构、 群件 、中间件等大型软件系统的构成形式,都将在组件的基础上重新构造。组件技 术使近二十年来兴起的面向对象技术进入到成熟的实用化阶段4 。在组件技术的概 念模式下,软件系统可 以被视为相互协同工作的对象集合,其中每个对象都会提供 特定的服务,发 出特定的消息,并且以标准形式公布 出来,以便其他对象了解和调 用。 组件间的 接口 通过一 种与平台 无关的语言 i d l ( i n t e r f a c e d e f i n e l a n g u a g e ) 来定义,而且是二进制兼容的,使用者可以直接调用执行模块来获得对象提供的服 务 。早期的类库,提供的是源代码级 的重用 ,只适用于比较小规模 的开发形式 ; 而 组件则是二进制代码级的重用,封装得更加彻底 ,更易于使用,并且不限于 c + + 之 类的语言 ,可以在各种开发语言和开发环境中使用。 、 这样,组件 技术给g i s 带来了全新的开发方式 4 1 。系统平台提供商把g i s 的功 能适当抽象,以组件形式供应用程序开发人员使用。而应用开发人员可以利用 自己 熟悉的主流语言来开发应用系统。利用组件架构地理信息系统将比传统开发方式更 容易,开发人员也无需掌握更多的地理信息方面的知识。这样一来,一大批传统m i s 开发人员也可以转 到地理信息系统的开发上来 ,极大地促进了地理信息系统的应 用 。 正因为基于组件的系统有这些优点, 所以, 本文在设计实现 自己的 工 n t e r n e t g i s 一 n k w e b g i s时,采用组件思想和组件技术。首先实现一些具有基本功能的组件, 然后在这些组件的基础上,构造完成 i n t e r n e t g i s应用 。当然 ,要让这些组件相互 通信、 协调运行,需要遵循一个规范。 微软的c o m ( c o m p o n e n t o b j e c t mo d e l )提 供 了一个这样的标准方法。遵循 c o m 标准的组件可以被组合起来以形成应用程序。 所 以我们的组件技术是采用 c om规范的。 本文在 i n t e r n e t g i s的体系结构、运行机制以及利用组件技术设计和实现方面 进行了一些研究。在深入分析和研究现有技术的基础上,根据 i n t e r n e t 环境的特殊 性, 提出自己的一个 i n t e r n e t g i s方案,对一些关键问题提出相应的解决方法,并 进行实际设计和实现。该方案有以下几个特点: . 采用客户端扩展技术 a c t i v e x ,扩展浏览器功能,充分利用本地的计算资 源 ,在本地实现任意开窗、放大、缩小及漫游等地理信息功能,而不象基 于服务端扩展的系统每次操作都从服务器重取操作结果,这样减轻了服务 器负载,也减少了网上数据传输量。 . 基于矢量图形结构,在 i n t e r n e t 上传输矢量图形数据,而不是图像,从而 大大减少了数据传输量以解决数据传输速率低的问题; 引言 .采用关系数据库统一管理空间数据和属性数据 ,以解决分离管理带来的数 据不一致性等 问题,并充分发挥关系数据库管理系统强大的数据管理 能 力 : . 利用 c o m / a c t iv e x组件技术实现,便于进行二次开发和根据需要定制应 用系统 以及便于系统的维护和扩展。 为此,本文按如下方式组织: . 第一章详细讨论了组件对象思想和组件对象模型 ( c o m) ,组件对象思想 是设计自己的i n t e r n e t g i s一n k w e b g i s 过程中需遵守的设计思想,c o m 技术是设计、实现该系统用到的关键技术。所以第一章在此方面的讨论将 比较深入。 .第二章简单介绍了地理信 息系统概念及常用数据结构和处理技术。 . 第三章分析并讨论了 i n t e r n e t g i s与一般 g i s相比的特殊性,并分析了 i n t e r n e t g i s的体系结构和运行机制,在此基础上,提出了自己的i n t e r n e t g i s 解决方案。 .第四章进行 n k w e b g i s的设计,根据面向对象思想和组件思想, 提出了 系统的结构。 . 第五章进行 n k w e b g i s的详细设计,讨论了各部分的实现过程及用到的 一 些 技术 。 . 第六章讨论了 i n t e r n e t g i s面临的主要问题一速度问题并提出自己的一些 解决思路和方法。 .第七章对系统进行一些总结,并提 出进一步的发展方向. 第 1章组件及组件对象模型 ( c om) 第 1 章组件及组件对象模型 ( c om) 让我们先从讨论组件及组件对象模型开始。因为它是我们基于组件的 i n t e r n e t g i s的技术基础。 本章首先介绍组件、组件对象模型的基本概念,然后分析 c o m 内部实现机制, 最后介绍基于 c o m 的 自动化技术和 ac t i v e x技术。 9 1 .1 组件 软件重用一直是业界追求的 目标,人们一直希望能够 向搭积木一样随意 “ 装 配”应用程序,组件 ( 或称组件对象) 就充当了积木的角色。所谓组件,实际上就 是预定义好 的、能完成一定功能的服务或接口2 6 建立在组件基础上的应用程序有许多优点: .应用程序可以随时间的流逝而发展进化 ,只要升级适当的组件 即可,而 不会影响其它部分。 .客户可以根据需要对应用程序进行定制 。用组件架构应用程序从本质上 讲 ,就是一种定制过程,选择一些有用的组件 ,然后把它们装配起来。 .组件架构应用程序最引人注 目的优点是可 以进 行快速应用程序开发。开 发人员可以从某个组件库中取 出所需的组件并将其快速地组装到一起 以 构造所需的应用程序,如同搭积木一样。这种用标准的部件构造应用程 序 的做法 ,很 r c 时间以来一直软件工程师的一个梦想,如今 ,这种梦想 随c o m / a c t i v e x技术的发展而正逐步地变为现实。 但问题是,组件如何与应用程序、如何与其它组件共存并相互通信和交互, 这就 需要制 定一个规 范 ,让 这些组件 按统一 的标准方 式工作 。组件 对象 模型 ( c o m p o n e n t o b j e c t m o d e l . c o m)就是这样的一个规范。 肠 1 . 2 组件对象模型 ( c o m) 1 .2 . 1 c o m 基本概念 c om 是组件对象之间相互接口的规范,它是一个二进制规范,与源代码无关 2 6 1 。所以凡是遵循 c om 接 口规范的对象彼此之间能相互通信和交互,即使这些对 象由不同的厂商、不同的语言、不同的 wi n d o w s版本甚至在不同的机器上编写和 建立 。 c o m 本质上仍是客户/ 服务器模式。客户 通常是应用程序)请求创建 co m 第 i章组 件 及 组 件 对 象 模 型( c om ) 对象并通过 c om 对象的接 口操纵 c o m 对象。而服务器则根据客户的请求创建并 管理 c om对象。客户和服务器这两种角色并不是绝对的。 c o m组件具有以下特点: . c o m组件是动态链接的, c o m使用 d l l 将组件动态链接起来。 . c o m组件必须是封装的。 . c o m组件是完全与语言无关的。 . c o m组件以二进制的形式发布。 . c o m组件可以在不妨碍老客户的情况下被升级。 .c om 组件可以透明地在 网络上重新分配位置。 .c om 组件按照一种标准的方式来宣布它们的存在。使用 c o m 的发布方 案 ,客户可以动态地找到它所需的组件。 . c o m组件是通过接口来与客户通信的。 . 2 . 2 c om 接 口 c o m 组件对象与一般意义上的对象既相似也有区别。一般意义上的对象是一 种把数据和操纵数据 的方法封装在一起的数据类型和实例,而 c o m 组件对象使用 接 口、 ( i n t e r f a c e )而不是方法来描述 自己并提供服务。所谓接口,其精确定义是 “ 基 于对象的一组语义上相关的功能” 2 6 1 。它实际上是一个纯虚类,真正实现接口的 是接口 对象 ( i n t e r f a c e o b j e c t ) 。一个c o m组件对象可以只有一个或几个接口,也 可 以有许多接口。 在 c o m 中,接 口就是一切12 2 1 。对于客户来说,一个组件就是一个接口集。客 户只能通过接口:水能同 c o m 组件打交道。从整体上讲,客户对于一个组件可以说 是知之甚少的。在某些情况下,客户甚至不必知道一个组件所提供的所有接 口。接 口实际上是面向对象编程思想的一种体现,它隐藏了 c om 组件实现服务的细节。 c o m 组件可以完全独立与访 问它的客户,只要接 口本身不变。如果实在需要更新 一个接口,可以重新定义一个新的接 口,对于使用老接口的客户来说,代码得到最 大程度的保护。 客户同组件的交互都是通过一个接口完成的。在客户查询组件的其它接口时, 也是通过此接 口完成的。这个接 口就是 i u n k n o wn . ( u n k n o w n接 口的定义如下: i n ter fa ce i u nk no wn vi rt ual vir t ual vir t ual h res ul t ul o ng 口 lom g s t d c a l l q u e r y i n t e r f a c e( c o n s t工 i d s t d c a l l a d d r e f( ) s t d c a l l r e l e a s e u_ 。 己 : i ; 在 i u n k n o w n中定义了一个名为 q u e r y t n t e r f a c e的函数。客户可 以调用 q u e r y i n t e r f a c e 来决定组件是否支持某个特定的接口。 由于所有的 c om 都继承了 i u n k n o wn ,梅个接 口的虚拟函数表 ( v t b i )中的 前二个函数都是q u e r y l n t e r f a c e , a d d r e f 和r e l e a s e( 如图1 - 1 ) 。这使得所有的c o m 接 口可以被当成 l u n k n o wn接 口来处理。若某个接 口的 v t b l 中的前三个函数不是这 三 个 ,那 么 它将 不 是一 个 com 接 口。 由于所 有接 口都 是 从 l un k n o wn 衅承 的 , 因 第 1 章组件及组件对象模型 ( co m) 此所有的接口 都支持 q u e r y l n t e r f a c e 。因此,组件的任何一个接口都可以被客户用 来获取它所支持的其它接 口。由于所有的接 口指针同时也将是 i un k n o w n指针,客 户并不需要单独维护一个代表组件的指针,它所关心的将仅仅是接 口的指针 。 客户 i x .i, - 一一一、it ve9 i1 -* 1 ca pix vtbl t querylnterface -)iaddrefreleasefx 口 图 1 - 1 : 所有的 c o m接口都是从 i u n k n o w n 继承的,因此,在其 v t b l 中 前三项都是q u e ry l n t e r f a c e . a d d r e f 和r e l e a s e 在创建一个组件时,客户可以使用 c r e a t e i n s t a n c e而不必再使用 n e w操作符, 该 函数 可 以 建 立 一 个 组 件 并 返 回 一个i u n k n o wn 指 针 。 然 后 客 户 可 以用 q u e r y l n t e r f a c e 来获取其它接口。 1 . 2 . 3 查询接 口 i u n k n o w n中包含一个名为 q u e r y l n t e r f a c e的成员函数,客户可以 通过此函数 来查询某个组件是否支持某个特定的接口。若支持, q u e r y l n t e r f a c e将返回一个指 向此接口的指针;否则返回值将是一个错误代码。然后客户可以 接着查询其它接口 或将组件卸载。 假设客户有一个指向 i u n k n o w n的指针 p i ,它想知道组件是否支持接口 i x , 若支持,它将调用 i x接口实现的函数 f x 。代码如下: v o i d u s e f x( i u n k n o w n * p i ) / / d e f i n e a p o i n t e r f o r t h e i n t e r f a c e i x* pi x = nul l; / / a s k f o r i n t e r f a c e i x i d e n t i f i e d b y h r e s u l t h r = p i - q u e r y l n t e r f a c e ( 工 工 d i id i x i x, (v o i d - ) s p i x) ; / / c h e c k r e t u r n v a l u e. i f ( s u c c e e d e d ( h r ) ) / / c a l l i n t e r f a c e i x s f u n c t i o n f x p i x- f x( ) ; q u e r y l n t e r f a c e的实现实际上是比较简单的。它所需完成的只不过是根据某个 第 1章组件及组件对象模型 ( co m) 给定的 i i d 返回指向相应接 口的指针。若组件支持客户指定的接 口,那么应返回 s - o k以及相应的指针。若不支持,返回值应是e n o i n t e r f a c e并将相应的指针 返回值置成 nu l l . 1 .2 . 4 引用计数 ( u n k n o w n的另外两个成员函数 a d d r e f 和 r e l e a s e的作用是给客户提供一种 让他指示何时处理完一个接口的手段. ad d r e f 和 r e l e a s e 实现的是一种名为引用计 数的内存管理技术c o m 组件维护一个称作是引用计数的数值。当客户从组件取 得一个接 口时,此引用计数值将增 l ;当客户使用完某个接 口后,组件的引用计数 值将减 1 ;当引用计数值为 0时,组件即可将 自己从囚存中删一坎、 1 .2 . 5 组件的创建 我们已经对组件有 了个大概 的 了 解 ,那么组件是怎么创建的呢?所有的组 件都是用类厂 ( c i a s s f a c t o r y )创建的类厂也是一个组件,类厂组件的唯一功能 就是创建其它组件, 更确切地说, 某个特定的类厂将创建只同某个特定的 cl s i d 类 标志符)相应的组件 。客户可以通过类厂所支持的接 口来对类厂创建组件的过程加 以控制。创建组件的标滩接口 是 ( c i a s s f a c t o r y 下面我们来看看客户如何通过 一 个 类厂创建所需的组件 。如图 1 - 2 : 客户 a m c og ctc lasso bjecc _ 甲卜 c om 库 创 建 类 厂 返 回 c o一一ctc lasso bjectt_ n (c ia ssf ac tory 甲 p lc l a s s f a c to r y 调 用 ,c ia ssf a cto ry :c re a te ln stan c e_ 卜 弋 . a 0 0 ip h l ix 调 用 ,x :二 p i x 卜 : 卜 : 雀 9 3 8j i 4 图 1 - 2 :使用 c o m库函数和类厂创建组件的过程 在该 图中列 出了组件创建过程中涉及到的土要角色首先是客户,他通过调 用 c o g e t c l a s s o b j e c t来启动组件 的创建过程其 次是 c o m 库 ,它实现了 c o ci e t c l a s s o b j e c t函数第三 个角色是包含组 件的 d l l ,其 中实现 了被 c o g e t c l a s s o b j e c t 调用的 d i i g e t c la s s o b j e c t 函数。 d i i g e t c l a s s o b j e c t 的任务就是创 建客户所请求的类厂当然,它创建类厂的方式完全是由开发人员决定的,因此这 第 1章组件及组件对象模型 ( co m) 一点 是需要向 客户隐 藏起来的 在创 建好类厂 后, 客 户将使 用 i c i a s s f a c t o r y接口 来创建相应的组件。 i c 1 a s s f a c t o r y : :c r e a t e i n s t a n c 。如何创建组件也是由开发人员决 定的。i c i a s s f a c t o r y将把这个过程封装起来以便类厂能够使用关于组件的内部知识 来创建它。最后,客户可以调用接口函数。 1 . 2 .6 g u i d 、注册表及其它细节 正如汽车 的牌照号码是标识汽车一样,我们所讨论的 g ui d 是标识组件和接 口的.为了保证分布在世界各地不同的开发人 员所定义的接口标识符不冲突, g u i d 提供了一种解决方案,它能保证接口标识符是唯一的。利用特定的工具软件,能得 到一个 1 2 8 b i t 的唯一的串,例如: 1 1 5 5 9 b 9 2 0 - 0 6 2 3 - l i d 3 - ao e 8 - 0 0 4 0 0 5 4 d 8 4 3 e ) 每次运行该软件,都将得到一个不同的gu i d. g ui d 除了能作为接口的唯一标识外,还可以作为组件的唯一标识。在 c om 中用以标识组件的 g u i d 被称为类标识符。为了将类标识符同接口标识符区别开 来 ,与类标识符相应 的类型为 c l s i d,与接 口标识符相应 的类型为 i i i)。为了便于 记忆, 有时程序员给某个c l s i d指定一个易记名字, 称为p r o g i d , 从而可以用p r o g i d 来标识 组件, 但没有 办法 来保证 p r o g i d是唯 一的,因 此 名字冲 突将是 一个 潜在的 问题 。 在 wi n d o w s 中,注册表是wi n d o w s 操作系统的一个正式的共享系统数据库。 组件可以用 c l s i d作为索引在 wi n d o ws的注册表中发布包含它们的 dl l文件名 称。而客户也可以利用注册表搜索它们所需的组件 。 1 . 2 .7 分布式组件对象模型 ( d c o m 在 c o m 功能中的一个最重要的新性能是分布式组件对象模型 ( t h e d i s t r i b u t e d c o m p o n e n t o b j e c t mo d e l , d c o m ) . d c o m允许c o m对象通过相关的网络查找另 一个对象并与之交互,这些网络可以是局域网、企业 i n t r a n e t或 i n t e r n e t等。用户 可以在 win d o w s n t 4 . 。中获取 d c o m,它特别适用于开发企业的信息管理系统、 专用的we b 等。d c o m扩展了c o m性能以允许c o m对象与远程机中的对象交互 式使用此对象。基于网络方面的安全考虑,d c o m 自身包含有较高的安全处理功 育 e -ga 芬 1 . 3自动化 由上一节我们知道,c o m 客户和组件之间的通信是通过 c o m 接口完成的。 在这一节中,将介绍客户控制组件的另外一种方法,即自动化 ( a u t o m a t i o n ,以前 称作 o l e 自动化) 。自动化使得使用解释性语言和宏语言访问 c o m 组件更容易, 第 t章组件及组件对象模型 ( co m) 同时用这些语言编写组件也将更容易。自动化关注 的是运行时的类型检查,这一点 是以速度的牺牲 为代价的。 自动化不是独立于c o m的,而是建立在c o m基础上的1 2 2 1 。一个自 动化服务 器实际上就是一个实现了 i d i s p a t c h接口的 c o m 组件。而一个自动化控制器则是 一个通过 i d i s p a t c h接口同自 动化服务器进行通信的 c o m 客户。自 动化控制器不 会直接调用自动化服务器实现的那些函数,而是通过 i d i s p a t c h接口中的成员函数 实现对服务器中函数的间接调用。另一方面 ,通过 c o m 接口提供的任何服务都可 以通过 i d i s p a t c h 接口来提供。 下面让我们看看。通过 i d i s p a t c h进行通信与通过 c o m 接口 进行通信有什么 区别 。 1 .3 . 1 i d is p a t c h 接口 i d i s p a t c h为客户和组件提供t另外一种通信方式。有了 i d i s p a t c h 接口之后, c o m 组件就可以通过一个标准的接口提供它所支持的服务, 而无需提供多个特定 于服务的接 口。 简单的讲,i d i s p a t c h将接收一个函数的名称并执行它。i d i s p a t c h中最令人感 兴趣的两个函数是 g e t l d s o f n a me s和 i n v o k e . ge t i d s ofna me s将读取一个函数的 名称并返回其调度 i d,或称 di s p i d. d i s p i d 是一个长整数,它标志一个函数 。 为执行某个函数 ,自动化控制器把 d i s p i d传给 i n v o k e成员函数。i n v o k 。可以将 d i s p i d作为函数指针数组的索引,这一点同常规 c o m 接口是相似的。但自 动化 服务器并不需要按此方式实现 i n v o k e 。一个简单的自动化服务器可以根据 d i s p i d 用一个 c a s e语句执行不同的代码。i n v o k e的一个实现所实现的函数集被称作是一 个调度接口,自 动化服务器和控制器可以通过它进行交互,但调度接口 可以不是一 个 c o m 接口。如图 1 - 3 . i di s p a t c h* p i d i s p a t c h di s p a t c h 接口 调度接口 d i s p i d 名称 p v t 6 1卜卜 若线条与窗口相交,则必须求出交点坐标,截断线条, 仅显示窗口内的部分。 2 .3 . 4 拼接与分割 在对空间数据管理时,按图幅存储的数据不能进行大区域的信息分析,需要 把相邻图幅拼接成大型数据库 ;或是数据覆盖区域太大,不利于输出,也需要把大 数据库分割成分析或输出的小区域。这就是图幅的拼接与分割。 图幅的拼接总是在相邻两图之间进行。要将相邻两图幅之间的数据集中起来 , 就要求相同实体的线段或弧的坐标数据相互衔接,也要求 同一实体的属性码相同, 因此必须进行图幅数据边缘匹配处理。 图幅分割实际上就是对整幅图层的多个相邻窗 口处理 ,其算法原理与开窗运 算 相 同。 2 .3 . 5 空间数据的检索与索引 在对空 问信息进行各种管理操作过程 中需要经常提取和检索空间数据,如 : 根据 图形检索其相应的属性信息;按照属性特征检索对应 的空间实体:或者依据空 间实体的相互关系检索其它实体等。 g i s数据库是一个庞大的数据库。要完成上述内容的检索,对空间数据进行存 取是一件很费机时的工作。为 了提高空间信息检索效率,应建立 良好的索引机制。 可以按空间实体的名称或一连串的实体元素 ( 坐标)来建立空间索引。然而,空间 索引应当针对位置或空间块,而不是对某个具体的目标提供存取路径 。 第 3章i n t e r n e t 地理信息系统 第 3 章i n t e r n e t 地理信息系统 圣 3 . 1 i n t e r n e t g i s产生与发展 i n t e r n e t 地理信息系统 ( i n t e r n e t g i s )是在 i n t e r n e t 技术发展和地理信息共享 的要求下发展起来的。在 工 n t e r n e t发展的早期 ,一些研究机构就利用网络信息查询 软件 g 叩h e r 在 i n t e r n e t 上按照文本和关键词进行地理信息数据的查询和检索,并 在权限允许的范围内下载数据文件以实现地理数据的共享。在这种方式下,地理信 息与其它数据一样,都 以文件形式存在 ,并不具有特殊之处。wa i s 软件利用数字 图书馆协议 z 3 9 . 5 0在元数据的基础上管理信息,由于地理信息的元数据与其它类 型的元数据具有明显的区别,地理信息的特点开始体现出来。在这种模式下,地理 信息仍表现为传统通用数据库的文本形式。 www在超文本传输协议 h t t p的基础 上、可以处理文本、图像、声音等多媒体数据。地理信息在 www 上是以图像方 式存在的,用户只能进 行浏览或按属性查询。这三种利用 i n t e r n e t进行地理信息查 询检索和下载的模式可以实现地理信息的共享,但不具有地图动态显示和空间分析 功能 ( 7 ) 传统的单机 g i s软件或基于主机/ 终端的 g i s软件在 8 0年代后期以后逐渐向 局域网的客户/ 服务器 的软件模式转变 ,随着越来越多的局域网接入 i n t e r n e t , g i s 软件在客户/ 服务器体系机构的基础上开始支持因特网的浏览器/ 服务器模式。主要 商业 gi s 软件先后推出了 i n t e r n t解决方案 ,基于 i n t e r n e t的网络地理信息系统 ( i n t e r n e t g i s)开始出现。同时原有基于局域网的 gi s也逐渐向 i n t r a n e t g i s( 或 称企业内部 g i s )转变 ,在统一的技术和应用模式 下,i n t e r n e t g i s和 i n t r a n e t g i s 较传统的g i s 系统在可用性和易用性上都有较大的提高。利用因特网提供的接入机 制,使得只要接入因特网就可以使用 g i s , i n t e r n e t gi s 提供一致的用户界面,降 低了g i s学习和使用的复杂性;同时用浏览器全面取代了桌面系统,大大降低了整 个系统

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论