mapx中文培训教程.docx
《mapx中文培训教程.docx》由会员分享,可在线阅读,更多相关《mapx中文培训教程.docx(40页珍藏版)》请在冰点文库上搜索。
mapx中文培训教程
第一章
GIS开发方式选择
地理信息系统根据其内容可分为两大基本类型:
一是应用型地理信息系统,以某一专业、领域或工作为主要内容,包括专题地理信息系统和区域综合地理信息系统;二是工具型地理信息系统,也就是GIS工具软件包,如ARC/INFO等,具有空间数据输入、存储、处理、分析和输出等GIS基本功能。
随着地理信息系统应用领域的扩展,应用型GIS的开发工作日显重要。
如何针对不同的应用目标,高效地开发出既合乎需要又具有方便美观丰富的界面形式的地理信息系统,是GIS开发者非常关心的问题。
本课题的目标是在“世行项目管理”中实现地图功能,正是应用型GIS的开发。
在开发初期,最主要的工作就是要确定下来实现方式。
应用型GIS开发有多种方式可供选择。
一、应用型GIS开发的三种实现方式
独立开发
指不依赖于任何GIS工具软件,从空间数据的采集、编辑到数据的处理分析及结果输出,所有的算法都由开发者独立设计,然后选用某种程序设计语言,如VisualC++、Delphi等,在一定的操作系统平台上编程实现。
这种方式的好处在于无须依赖任何商业GIS工具软件,减少了开发成本,但一方面对于大多数开发者来说,能力、时间、财力方面的限制使其开发出来的产品很难在功能上与商业化GIS工具软件相比,而且在购买GIS工具软件上省下的钱可能还抵不上开发者在开发过程中绞尽脑汁所花的代价。
单纯二次开发
指完全借助于GIS工具软件提供的开发语言进行应用系统开发。
GIS工具软件大多提供了可供用户进行二次开发的宏语言,如ESRI的ArcView提供了Avenue语言,MapInfo公司研制的MapInfoProfessional提供了MapBasic语言等等。
用户可以利用这些宏语言,以原GIS工具软件为开发平台,开发出自己的针对不同应用对象的应用程序。
这种方式省时省心,但进行二次开发的宏语言,作为编程语言只能算是二流,功能极弱,用它们来开发应用程序仍然不尽如人意。
集成二次开发
集成二次开发是指利用专业的GIS工具软件,如ArcView、MapInfo等,实现GIS的基本功能,以通用软件开发工具尤其是可视化开发工具,如Delphi、VisualC++、VisualBasic、PowerBuilder等为开发平台,进行二者的集成开发。
集成二次开发目前主要有两种方式:
ØOLE/DDE
采用OLEAutomation技术或利用DDE技术,用软件开发工具开发前台可执行应用程序,以OLE自动化方式或DDE方式启动GIS工具软件在后台执行,利用回调技术动态获取其返回信息,实现应用程序中的地理信息处理功能;
ØGIS控件
利用GIS工具软件生产厂家提供的建立在OCX技术基础上的GIS功能控件,如ESRI的MapObjects、MapInfo公司的MapX等,在Delphi等编程工具编制的应用程序中,直接将GIS功能嵌入其中,实现地理信息系统的各种功能。
二、三种实现方式的分析与比较
由于独立开发难度太大,单纯二次开发受GIS工具提供的编程语言的限制差强人意,因此结合GIS工具软件与当今可视化开发语言的集成二次开发方式就成为GIS应用开发的主流。
它的优点是既可以充分利用GIS工具软件对空间数据库的管理、分析功能,又可以利用其它可视化开发语言具有的高效、方便等编程优点,集二者之所长,不仅能大大提高应用系统的开发效率,而且使用可视化软件开发工具开发出来的应用程序具有更好的外观效果,更强大的数据库功能,而且可靠性好、易于移植、便于维护。
尤其是使用OCX技术利用GIS功能组件进行集成开发,更能表现出这些优势。
由于上述优点,集成二次开发正成为应用GIS开发的主流方向。
这种方法唯一的缺点是前期投入比较大,需要同时购买GIS工具软件和可视化编程软件,但“工欲善其事,必先利其器”,这种投资值得。
目前许多软件公司都开发了很多ActiveX控件,合理选择和运用现成的控件,减少了开发者的编程工作量,使开发者避开某些应用的具体编程,直接调用控件,实现这些具体应用,不仅可以缩短程序开发周期,使编程过程更简洁,用户界面更友好,可以使程序更加灵活、简便。
与利用OLEAutomation技术作为服务器的MapInfo相比,利用控件开发速度快,占用资源少,而且易实现许多底层的编程和开发功能。
第二章组件式GIS与MapX
三、组件技术
组件技术的兴起
目前,在软件开发领域,一场新的革命正在悄悄兴起,这是由日趋成熟的组件技术引发的。
几年以前,当微软公司首先使用OLE的时候,其初衷是为了增强软件的互操作性。
然而在使用过程中,人们逐渐认识到这一技术背后的实质性内容和它在软件开发中所扮演的重要角色。
组件技术以前所未有的方式提高了软件产业的生产效率,这一点已逐步成为软件开发人员的共识。
传统的C/S结构、群件、中间件等大型软件系统的构成形式,都将在组件的基础上重新构造。
组件技术使近二十年来兴起的面向对象技术进入到成熟的实用化阶段。
在组件技术的概念模式下,软件系统可以被视为相互协同工作的对象集合,其中每个对象都会提供特定的服务,发出特定的消息,并且以标准形式公布出来,以便其他对象了解和调用。
组件间的接口通过一种与平台无关的语言IDL(InterfaceDefineLanguage)来定义,而且是二进制兼容的,使用者可以直接调用执行模块来获得对象提供的服务。
早期的类库,提供的是原代码级的重用,只适用于比较小规模的开发形式;而组件则封装得更加彻底,更易于使用,并且不限于C++之类的语言,可以在各种开发语言和开发环境中使用。
由于组件技术的出现,软件产业的形式也随之发生了很大的变化。
大量组件生产商涌现出来,并推出各具特色的组件产品;软件集成商则利用适当的组件快速生产出用户需要的某些应用系统;大而全的通用产品逐步减少;很多相对较为专业,但用途广泛的软件,如GIS、语音识别系统等,都以组件的形式组装和扩散到一般的软件产品中。
COM与DCOM
COM是组件式对象模型(ComponentObjectModel)的英文缩写,是组件之间相互接口的规范,是OLE(ObjectLinking&Embedding)和ActiveX共同的基础,其作用是使各种软件构件和应用软件能够用一种统一的标准方式进行交互。
COM不是一种面向对象的语言,而是一种与源代码无关的二进制标准。
COM所建立的是一个软件模块与另一个软件模块之间的链接,当这种链接建立之后,模块之间就可以通过称之为“接口”的机制来进行通信。
COM标准增加了保障系统和组件完整的安全机制,并扩展到分布式环境。
COM本质上仍然是客户/服务器模式。
客户(通常是应用程序)请求创建COM对象并通过COM对象的接口操纵COM对象。
服务器根据客户的请求创建并管理COM对象。
客户和服务器这两种角色并不是绝对的。
基于分布式环境下的COM被称作DCOM(DistributeCOM,分布式构件对象模型)。
DCOM是ActiveX的基础,它实现了COM对象与远程计算机上的另一个对象之间直接进行交互。
DCOM规范定义了分散对象创建和对象间通信的机制,规范本身并不依赖于任何特定的编程语言和操作系统,但目前该标准只在MicrosoftWindows平台实现,这就意味着其它的操作系统平台(如UNIX)目前还不支持ActiveX。
DCOM的实现采用了DCOM库的形式,当DCOM客户对象需要DCOM服务器对象的服务时,DCOM库负责生成DCOM服务器对象并在客户对象和服务器对象之间建立初始连接,一旦返回服务器对象指针,DCOM库就不再参与客户对象与服务器对象之间的工作,两个对象之间可以自由地进行通信。
DCOM接口实际上时逻辑上和语义上相关联的函数集。
服务器对象通过DCOM接口为客户对象提供服务,客户对象不需了解服务器对象的内部数据表示。
接口可以看成两个软件构件之间的一种协议,协议表明服务器对象为客户对象提供一种且仅此一种服务。
接口采用全局唯一标识符(GUID)来保证服务的唯一性。
通常的DCOM构件提供多种服务,那么服务器对象为每一种服务实现一个接口。
当客户对象指针指向相应的服务器对象时,它就激活服务器对象接口的相应函数。
具体过程是:
客户对象通过DCOM对象必须支持的IunKnown接口获得其它接口的指针。
客户对象也许并不知道服务器对象的每个接口,但这并不妨碍客户对象对服务器对象的使用,它只用它知道的接口。
当客户对象用完服务器对象的服务时,它会通知服务器对象,服务器对象就释放它所占有的内存。
DCOM的好处是县而易见的。
由于接口的定义和功能保持不变,DCOM构件开发者可以改变接口功能、为对象增加新功能、用更好的对象来代替原有对象,而建立在构件基础上的应用程序几乎不用修改,大大提高了代码的重用性。
ActiveX与ActiveX控件
(1)、ActiveX
ActiveX是微软公司的构件技术标准,实际上是对象嵌入与炼接(OLE)的新版本,使OLE接口加强了对数据和特性的管理,效率更高,而且更加便于进行Internet互操作。
作为针对Internet应用开发的技术,ActiveX被广泛应用于WEB服务器以及客户端的各个方面。
同时,ActiveX技术也被用于方便地创建普通的桌面应用程序。
ActiveX既包含服务器端技术,也包含客户端技术。
其主要内容是:
ØActiveX控制(ActiveXControl):
用于向WEB页面、MicrosoftWord等支持ActiveX的容器(Container)中插入COM对象;
ØActiveX文档(ActiveXDocument):
用于在WebBrowser或者其它支持ActiveX的容器中浏览复合文档(非HTML文档),例如MicrosoftWord文档、MicrosoftExcel文档或者用户自定义的文档等;
ØActiveX脚本描述(ActiveXScripting):
用于从客户端或者服务器端操纵ActiveX控制和Java程序、传递数据以及协调它们之间的操作等;
ØActiveX服务器框架(ActiveXServerFramework):
提供了一系列针对Web服务器应用程序设计各个方面的函数及其封装类,诸如服务器过滤器、HTML数据流控制等;
Ø在InternetExplorer中内置Java虚拟机(JavaVirtualMachine),从而使JavaApplet能够在InternetExplorer上运行,并可以与ActiveX控制通过脚本描述语言进行通信。
(2)、ActiveX控件
ActiveX控件是充分利用OLE和ActiveX技术的自定义控件,是基于与应用程序无关的思想而设计的,其目标是提供一种面向对象、与操作系统无关、与机器平台无关、可以在应用程序之间互相访问对象地机制。
ActiveX控件是建立在COM标准上的独立的软件元件,提供给用户应用接口,发送相应的事件,开发者则可以截取这些事件,执行相应的功能。
ActiveX控件开发端和使用端是完全独立的,可以用Delphi、VB等各种语言来开发,又可以用于不同语言、不同开发平台、不同的系统环境中。
ActiveX控件与VBX不同,VBX的标准是建立在16位段式结构的基础上,并不适用于32位环境。
ActiveX控件可以在32位环境下提供与VBX相类似的功能。
一个或多个ActiveX控件会保存在一个动态链接库中,但它是一种特殊的动态链接库,其扩展名不是DLL而是OCX。
从本质上讲,ActiveX控件是一个ActiveX服务器,它能提供所有的OLE功能和服务,包括可视化编辑、拖放和OLEAutomation。
与所有的ActiveX服务器一样,要使用ActiveX控件,必须先对ActiveX控件进行注册,应用程序通过注册后得到的类ID号找到控件的数据源进行访问。
ActiveX控件可以由VB、VC、Delphi等开发工具生成OCX文件时自动进行注册,也可以手工注册,其实质都是通过运行应用程序Regsvr32.exe来实现。
Regsvr32.exe一般在操作系统的系统文件目录下,如Windows85/98的\windows\system目录、WindowsNT的\winnt\system32目录。
在Regsvr32.exe应用程序的命令行中输入ActiveX控件的网络共享路径。
网络路径的形式为\\机器名\共享目录名\文件名。
假如,服务器名为mainserver,目录名为controls,控件名为MapX,则注册命令为:
Regsvr32\\mainserver\controls\mapx.ocx
(3)、ActiveX与ActiveX控件的区别
ActiveX技术是OLE技术在Internet上的重定义,而ActiveX控件则是OLE控件在Internet上的扩展。
ActiveX不等同于ActiveX构件,从上面的介绍可知,ActiveX是一个很宽的技术家族的标识,而ActiveX构件只是那个家族的一个特定技术。
四、组件技术与GIS的发展
引言
组件式软件技术已经成为当今软件技术的潮流之一,为了适应这种技术潮流,GIS软件象其他软件一样,已经或正在发生着革命性的变化,即由过去厂家提供了全部系统或者具有二次开发功能的软件,过渡到提供组件由用户自己再开发的方向上来。
无疑,组件式GIS技术将给整个GIS技术体系和应用模式带来巨大影响。
GIS技术的发展,在软件模式上经历了功能模块、包式软件、核心式软件,从而发展到组件式GIS和WebGIS的过程。
传统GIS虽然在功能上已经比较成熟,但是由于这些系统多是基于十多年前的软件技术开发的,属于独立封闭的系统。
同时,GIS软件变得日益庞大,用户难以掌握,费用昂贵,阻碍了GIS的普及和应用。
组件式GIS的出现为传统GIS面临的多种问题提供了全新的解决思路。
组件式GIS的基本思想是把GIS的各大功能模块划分为几个控件,每个控件完成不同的功能。
各个GIS控件之间,以及GIS控件与其它非GIS控件之间,可以方便地通过可视化的软件开发工具集成起来,形成最终的GIS应用。
控件如同一堆各式各样的积木,他们分别实现不同的功能(包括GIS和非GIS功能),根据需要把实现各种功能的“积木”搭建起来,就构成应用系统。
组件式GIS系统的特点
把GIS的功能适当抽象,以组件形式供开发者使用,将会带来许多传统GIS工具无法比拟的优点。
(4)、小巧灵活、价格便宜
由于传统GIS结构的封闭性,往往使得软件本身变得越来越庞大,不同系统的交互性差,系统的开发难度大。
在组件模型下,各组件都集中地实现与自己最紧密相关的系统功能,用户可以根据实际需要选择所需控件,最大限度地降低了用户的经济负担。
。
组件化的GIS平台集中提供空间数据管理能力,并且能以灵活的方式与数据库系统连接。
在保证功能的前提下,系统表现得小巧灵活,而其价格仅是传统GIS开发工具的十分之一,甚至更少。
这样,用户便能以较好的性能价格比获得或开发GIS应用系统。
(5)、无须专门GIS开发语言,直接嵌入MIS开发工具
传统GIS往往具有独立的二次开发语言,对用户和应用开发者而言存在学习上的负担。
而且使用系统所提供的二次开发语言,开发往往受到限制,难以处理复杂问题。
而组件式GIS建立在严格的标准之上,不需要额外的GIS二次开发语言,只需实现GIS的基本功能函数,按照Microsoft的ActiveX控件标准开发接口。
这有利于减轻GIS软件开发者的负担,而且增强了GIS软件的可扩展性。
GIS应用开发者,不必掌握额外的GIS开发语言,只需熟悉基于Windows平台的通用集成开发环境,以及GIS各个控件的属性、方法和事件,就可以完成应用系统的开发和集成。
目前,可供选择的开发环境很多,如VisualC++、VisualBasic、VisualFoxPro、BorlandC++、Delphi、C++Builder以及PowerBuilder等都可直接成为GIS或GMIS的优秀开发工具,它们各自的优点都能够得到充分发挥。
这与传统GIS专门性开发环境相比,是一种质的飞跃。
(6)、强大的GIS功能
新的GIS组件都是基于32位系统平台的,采用InProc直接调用形式,所以无论是管理大数据的能力还是处理速度方面均不比传统GIS软件逊色。
小小的GIS组件完全能提供拼接、裁剪、叠合、缓冲区等空间处理能力和丰富的空间查询与分析能力。
(7)、开发简捷
由于GIS组件可以直接嵌入MIS开发工具中,对于广大开发人员来讲,就可以自由选用他们熟悉的开发工具。
而且,GIS组件提供的API形式非常接近MIS工具的模式,开发人员可以像管理数据库表一样熟练地管理地图等空间数据,无须对开发人员进行特殊的培训。
在GIS或GMIS的开发过程中,开发人员的素质与熟练程度是十分重要的因素。
这将使大量的MIS开发人员能够较快地过渡到GIS或GMIS的开发工作中,从而大大加速GIS的发展。
(8)、更加大众化
组件式技术已经成为业界标准,用户可以象使用其他ActiveX控件一样使用GIS控件,使非专业的普通用户也能够开发和集成GIS应用系统,推动了GIS大众化进程。
组件式GIS的出现使GIS不仅是专家们的专业分析工具,同时也成为普通用户对地理相关数据进行管理的的可视化工具。
组件式GIS开发平台的结构
组件式GIS开发平台通常可设计为三级结构:
Ø基础组件
面向空间数据管理,提供基本的交互过程,并能以灵活的方式与数据库系统连接;
Ø高级通用组件
由基础组件构造而成,面向通用功能,简化用户开发过程,如显示工具组件、选择工具组件、编辑工具组件、属性浏览器组件等等。
它们之间的协同控制消息都被封装起来。
这级组件经过封装后,使二次开发更为简单。
如一个编辑查询系统,若用基础平台开发,需要编写大量的代码,而利用高级通用组件,只需几句程序就够了。
面向通用功能;
Ø行业性组件
抽象出行业应用的特定算法,固化到组件中,进一步加速开发过程。
以GPS监控为例。
对于GPS应用,除了需要地图显示、信息查询等一般的GIS功能外,还需要特定的应用功能,如动态目标显示、目标锁定、轨迹显示等。
这些GPS行业性应用功能组件被封装起来后,开发者的工作就可简化为设置显示目标的图例、轨迹显示的颜色、锁定的目标,以及调用、接受数据的方法等。
GIS组件的构成
GIS软件的模型包含若干功能单元,诸如空间数据获取、坐标转换、图形编辑、数据存储、数据查询、数据分析、制图表示等。
可以想象要把这些所有的功能放在一个控件中几乎是不可能的,即使实现也会带来系统效率上的低下。
一般可以认为GIS构件的设计主要遵循应用领域地需求。
例如ESRI地MapObjects就是以空间数据访问、查询、制图为主要目标的GIS构件。
GIS组件产品
GIS组件的代表作应首推MapObjects以及MapX等。
其中MapObjects由全球最大的GIS厂商ESRI(美国环境研究所)推出;MapX由著名的桌面GIS厂商美国MapInfo公司推出。
另外还有加拿大阿波罗科技集团的TITAN等。
下表是MapObjects和MapX的主要功能对比。
功能
MapObjects
MapX
显示的地图数据格式
Arcview的SHP、ARC/INFO的coverage、SDE图层
MapInfo的数据格式
叠加栅格图像
有
有
对地图的常用操作
放大、缩小、漫游等
放大、缩小、漫游等
图层控制
增加、移走、设置当前层
增加、移走、设置当前层
属性数据绑定
有
有
地图信息查询方式
1.通过鼠标选取特征
2.通过SQL查找特征
3.通过空间操作选取特征
1.通过鼠标选取特征
2.通过SQL查找特征
3.通过空间操作选取特征
专题地图
较弱
有
GPS集成
有
有
用户绘图图层
无
有
生成/编辑地图对象
较弱
较弱
地图标注
有
有
地图符号化
较弱
较强
分析功能
无
无
地理编码
有
有
可使用的开发语言
VC、VB、PowerBuilder、Delphi、Access等
VC、VB、PowerBuilder、Delphi、LotusNotes等
表4.1MapObjects和MapX的主要功能对比
应用及评价
软件的构件化已成为软件技术发展的潮流。
基于DCOM的ActiveX构件实现,已成为软件工业的一种标准。
伴随着未来其它非Windows平台对ActiveX的支持,ActiveX构件化的GIS软件系统将对GIS的体系结构和GIS将来的应用前景产生深远影响。
虽然采用GIS构件在开发上有许多优势,但是不可避免的也存在一些功能上的欠缺和技术上的不成熟,主要包括以下几个方面:
Ø与专业的GIS客户端软件相比,采用构件技术不可避免的带来效率上的相对低下,这在访问超大空间数据(如大数据量的遥感图象)的时候表现得尤为明显;
Ø支持的空间数据量有限;
Ø支持的功能有限,由于是构件,只覆盖了GIS系统的部分功能,于是对于特殊领域,它就显得无能为力;
Ø系统的可靠性、容错性有待提高。
DCOM的一大特点是:
开发及使用过程中必须时刻注意Windows系统OLE系统注册表的正确。
五、MapInfo相关技术
MapInfo公司及其产品
美国MapInfo公司致力于为用户提供先进的数据可视化、信息地图化技术,并将这些技术与主流业务系统集成,提供完整的解决方案。
MapInfo吸取了传统GIS系统的精华,并借助于计算机技术的发展,及时将GIS概念从中大型计算机的专用工作站上介绍至普通桌面PC上,开创了崭新桌面地图信息系统。
MapInfo公司的主要系列产品有:
Ø桌面地理信息系统MapInfoProfessional
Ø网络解决方案MapInfoProSerev
Ø数据库服务器产品MapInfoSpatialware
ØMapInfoActiveX
ØDECAlphaNT产品MapInfoProfessionalforDECAlphaNT
Ø开发工具MapInfoMapBasic
MapInfo空间数据的拓扑关系模型
空间数据的拓扑关系模型是地理信息系统的基石。
当前商用地理信息系统中,主要采用POLYVRT结构和“空间实体+空间索引”两种模型。
MapInfo采用称作“空间实体+空间索引”的的拓扑关系模型。
80年代中后期出现的商用地理信息系统,尤其是桌面地理信息系统大多采用这种方式,包括ESRI的ArcView。
而采用POLYVRT模型的系统主要是以Arc/Info为代表的一些专业GIS产品。
“空间实体+空间索引”模型的基础是“空间实体”。
空间实体是地理实体的抽象,主要包括点、线、面三种类型。
每个空间实体对象都维护着自己的所有属性。
多个空间实体组成一个图层。
“空间实体+空间索引”模型的空间查询功能是通过“空间索引”技术来实现的。
空间索引的目的是对给定的空间坐标,能够以尽快的速度搜索到坐标范围内的空间对象。
MapInfo采用R-Tree技术将空间实体的最小外接矩形(MBR)存储在索引中,并按从大到小的顺序进行索引搜索。
建立了空间索引,就能快速地进行空间分析了。
相对于,POLYVRT的优点是多个不同的对象可以共用相同的结点,节省存储空间,但由此产生的问题是其结构更加复杂,数据的编辑和维护比较困难。
而“空间实体+空间索引”模型虽然会造成公共结点的重复存储,但是其结构化的实体模型使得对某个对象的更改不会影响到其它对象的定义,从而大大增强了空间数据的可维护性。
另外,基于POLYVRT结构的空间数据组织不能被规范为关系模式,而基于“空间实体+空间索引”模型可以规范为“实体-关系”模型,从而可以与关系数据库系统结合,在关系数据库内实现对空间数据的查询、分析和处理等操作。
主要技术特