《MAPGIS二次开发培训教程.docx》由会员分享,可在线阅读,更多相关《MAPGIS二次开发培训教程.docx(6页珍藏版)》请在课桌文档上搜索。
1、MAPGIS二次开发培训教程MAPGIS是武汉中地信息工程有限公司研制的具有自主版权的大型基础地理信息系统平台。它是一个集当代最先进的图形、图像、地质、地理、遥感、测绘、人工智能、计驾机科学于一体的大型智能软件系统.是集数字制图、数据座管理及空间分析为一体的空间信息系统,是进行现代化管理和决策的先进工具。MAPGIS连续四年在全国GlS测评中名列第一,并成为唯一连续四年获得国家科技部向社会举荐的国产GIS软件平台.中地软件丛书之皿PGlS二次开发培训教程是依据最新推出的皿PGlS软件平台编写而成,主要介绍迸行MApGlS:次开发必需具备的葩础学向、主漉开发工具以及MAPGIS系统的基本概念、结
2、构体系和操作方法.该教程分为三个部分共十一讲.其机第一部分(即第一讲的内容):介绍IlindoWS编程的概念.包括类与数据封装、维承、重战、虚拟函数与多态性以及内存管理.该部分为可视化编程的基础.有可视化编程的历的读音可以略过此道,干脆进入下一部分的学习。其次部分(即其次讲的内容):编程工具VC.对于在YC这样一个编程环境中开发应用程序所应熟识的概念,术语和最基本的框架、构件实现过程等学问做了一个简明扼要的介绍,已驾驭肯定VC编程整础学问的读者可以略过该部分。第三部分(即第三讲至第十一讲的内容):具体讲解并描述了地理信息系统的基本概念(包括GIS原埋概述、空间数据类型、空间数据库、宽间数据结构
3、与数据管理等内容);融PGlS的以不慨会和体系结构(简要描述了股PGIS二次开发的基本概念、术语、工作区、空间实体及其数据、C+-类组织和开发环境介绍的内容):MAPGIS空间数据存取和属性编辎(包括工作区、空间实体和属性的操作及其网络介绍):图形显示输出及窗11操作、图形编辑、类库和控件开发:矢限空间分析和属性宜询;投影变换、图框生成和工程管理:图用管理和杏询系统(包括堪于图库的应用程序开发、MAPGIS图库介绍、开发的一般步骤以及结合图库显示说明图库主要南散的功能等方向的内容)以及图象分析与处理.这一部分为本教程的主要部分,能使大家从了解到娴熟驾驭这个部分的内容也是我们编制本书的主要目的,
4、【可时它还可被作为MRpGIS二次开发过程中的参考来运用,参与本书编写的人员主要是本系统的软件开发人员以及长期从事MAPCAD和MAPGIS训的老怵.由于时间仓促,书中难免存在错误和不当之处,敬请广阔用户及读齐提出珍册看法和建议,以利改进,中地软件丛书编委会2001年IO笫一讲基于叫NDoWS编程的基础学问1.1引中1.2类与数据封装1.3继承1.4电我1.5虚拟函数与多态性其次讲娟程工具VC2.1熟识VC开发环境2.2消息与吩咐2.3文档、视结构102.4图形设备接11112.5时话框和控件122.6编程规范13第三讲地理信息系统基本概念153.1GIS原理概述153.2GIS空间数据类鞭1
5、73.3GIS数据管理183.4空间分析203.5地理信息,系统发展20第四讲MAPGIS的基本概念和体系结构224.1MAPGIS二次开发的尊本粮念224.2MAPGIS基本术语234.3MAPGIS的数据管理(工作区)254.4MApGIS的空间实体及其数据组织271.5MAPGIS的C+类组织294.6MAPGIS的VC+开发环境介绍30第五讲MARHS空间数据存取和属性编辑325.1工作区操作325.2空间实体愫作3-15.3属性(/性结构操作375.4网络介绍4-1第六讲图形显示输出及腐口处理456.1图形显示输出456.2窗口处理496.3类用开发中的图形显示和腐口处理51第七讲图
6、形编辑、类库和控件开发537.1图形编辑开发概要537.2图形编耨APl的数开发537.3K1.WJIS类库开发547.4MAKJIS控件开发60第八讲矢心空间分析和性食询668.1矢诙空间分析668.2机性在询检索71第九讲投影变换和图框生成739.1投影交换(Projdn.h、cordcvt.h)739.2图枢牛.成(find1132.h)83第十道图库管理和工程管理9110.1UAPGIS图库简介9110.2修于图库的应用程序的开发9210.3站合图库的显示说明图库中主要函数的功能9210.4工程管理Srj_disp.h和map_prj.h)96第十一讲MAPGlS图象处理和分析1011
7、1.1遥感图象处理的基本学问10111.2处理方法10111.3主要APl介绍9911.4组件介绍10711.5在VC中的开发过程(结合示例程序讲解)10811.6示例程序说明助PGlS二次开发问遨集棉1101.属性和属性结构1102.空间实体操作问SS1233.显示、编辑问题1244.空间分析河即1315.数字高程模型1316.安装问鹿1347.工程问题1358.输出问题1369.其它138第一装施于WNDOWS编程的基础学问程序被认为是在一个数据集合上进行的一系列操作。主要思想是:功能分解并逐步求精.实质是把数据和处理这些数据的过程合并为一个单独的“对象”个具有确定特性的自完备的实体,多态
8、简洁的说,类就是一种用户定义的数据类型,嘏结构类似:并且.类具有自己的成员变信和成讪函数(方法),通过它们可以时类自身进行操作.如:汽车可以看作是发动机、车轮、座椅等诸如此类的集合.也可以从功能的角度来探讨.料如.能移动,加速,减速.刹车等.例如:classCMyClasslProtectediCMyClasslO:public:virtual定义:指能弊把一个实体的信息、功能、响应都装入一个单独的对象中的特性.封装的优点如下:封装允许类的客户不必关切类的工作机理就可以运用它.就象驾驶员不必了解发动机的工作原理就可以驾驶汽车一样,类的齐户在运用一个变时也不必了辄它是如何工作的,而只需了解它的功
9、能即可。全部对数据的访问和操作都必偌通过特定的方法.否则使无法运用,从而达到数据吃藏的目的.对象就是类的实例。类与对象的关系就如类型和变质的关系,全部肉类的操作都必需笫一讲基于WND(NS编程的基础学问私有成员(private):法省状况下,一个类中的全部成讪都是私有的.私有成员只能被类本身的成函数访问。并且不具有缚承性。爱护成员(PrOteCted):类的爱护成员能被类及其派生类的成员函数和友员函数运用.具有继承性.1)构造函数是特别的成见函数;在创建对象时首先由系统自动调用,它的作用是为新创建的对象安排空间,或为该对象的成员变Ift赋值等:构造函数名必需与其类名称完全相同,并且不允许有返回
10、(ft.2)析构函数析构函数在类名之前加来命名,它不允许有返1可依,也不允许带参数,并且一个类只能有一个析构函数。增加功能对程序所作的修改工作埴特别大。继承的方法允许在不改动原程序的基础上对其进行扩充,这样使得原功能得以保存.而新功能也褥以扩展.这有利于削减Hi狂编码,提高软件的开发效率,1)一个类可以绑承其它类的成员,被缚承的类叫2)派生类不但拥有自己的成员变量和成员函数,还拥仃父类的成员变成和成员函数.前面介绍了美的私有成员只能被类的成员函数和友员函数运用:类的爱护成员陡彼类及其派生类的成员函数和友员函数运用.也就是说,类的发护成员具有继承性,而类的私有成员不具有绑承性.1)公用基类中的全
11、部PUbliC成员在源生类中仍是PUbIiC成员,全部PrOteeted成员在派生类中仍是ProteCted成员.2)私有基类中的PUbIiC成员和protected成员在派生类中均变成private成员。1)多重缚承的定义方法例子:classpublic:int第一讲基于InNDoWS编程的基础学问YOidfUnC1():public:intVoidfunclO;VoidShowO缺省状况下基类被定义为Private:因此基类B为私有基类.2)继承的不确定性(HT:classC:publicYOidShOWo中同时拥有数据成员i和成员函数unci,类C引用基类的成员时,系统无法辨别是调用哪一
12、基类的成员而发生错误:3)解决多重继承的不确定性:运用域操作符指明要调用的基类,即可解决不倘定性问S.classCzpublicVOidShgo第一讲基于WlND(WS编程的茶础学问定义:所谓多层绯承指的是从一个类派生出另一个类,然后以派生类作为基类,源牛出另一个类,直到最终生成的派生类满意家要为止(见MSDNclassbasepublic:intClassderivedrpublicbase(派生类public:doublederived(int,double);doublel):base(k)派生类构造函数在定义派生类对象时,系统首先调用基类的构造函数,然后调用滤生类的构造函数:在上例中,
13、derived类首先调用base类的构造函数,然后调用自身的构造函数.析构函数的网用依次与构造函数的门用依次相反.D假如函数有相同的名称和返回做,而有不同的参数个数或参数类型,则这些函数就是改我函数.2)派生类继承了基类的某一函数.并且又自定义了一个同名函数.有相同的返回值.不同的参数类型或参数个数.这种状况不属FHl我,因为它们属于不同的域。第一讲基于WN)0S编程的基础学问classbasevoidfunc(intvoidfunc(doublevoidfunc(double羽我操作符的定义:返回值类型operatoropC磐数表);其中,op为单软操作符,它必?B是VC+中所定义的运算符.
14、然后像定义函数一样定义重载操作符函数.例子:classpersonimage:voidoperatorVoidPerSon:oPeralOr+()多态性是面对对象程序设计的精S8之所在,也是C-+中最难理解和驾驭的部分.在C一中.多态性是建立在虚拟函数基础上的,虚拟函数的运用使类的成员函数表现出多态性、i)函数的定义:在定义类时在其成员函数前加上关键字YirlUa1:2)假如域类中成员函数定义为虚南数.则藏生类中与其定义完全相同的成员函数,编译器自动将其视为虚函数:3)只有类的成员函数才能定义为虚函数.第一讲基于WNDCTrS编程的范础学问4)虚拟成员函数的存取要看首次定义它的类中,该南数是P
15、UbIiC还是PriVale。classinsectVirtualboolCanFlyO:boolInsectreturnF1.SE;ClassButterflyzpublicInsectbooICanFIyO;bolButterfIyreturnTRCE;boolrtn;Insectincl,*plnc;Butterflybtfly:pine&incl;/plnc指针指向Insect对象rtnpInc-XnFlyOi0FA1.SEpine&btfly;/plnc指针指向BUllCrfly对象rtnPlnCCanFly();返回TRUED形式上,型载函数要求有相同的返回值类型和函数名,并有不同
16、的参数序列:而虚拟函数要求三者完全相同.2)m我函数可以是成员函数或非成员函数;而虚拟函数必需是成员函数。3)调用方法上,重我函数依据所传递的卷效序列的差别作为得用的依据:而虚拟函数则依据调用对象的不同而去调用不同类的函数.4)虚拟函数在运行时表现出多态功能:而电致函数不具有这功能.第一讲基于WlwOFS编程的基础学问定义:Virtualtypefuncname(parumetcr)=0:C+中有时设计基类就是为了被维承,而基类中的虚拟函数不做任何工作,这种状况下可以将基类中的虚拟函数定义为纯虚函数.包含纯需函数的类叫抽象类.抽象类不能定义对纵,但可以定义指向它的指针。1.1什么是类?1.2理
17、解封装、维承和多态.第一讲基于RNDO赛娟程的基础学向以前WindgS编程须要程序员编写大量的框架代码,这对初学若来说简直就是一个的磬:井旦这些框架代码基本相同,因此ViCrCSofl供应了向呼APDWiZard怖助生成框架代码,这极大的便利了我们编写程序,AT1.COMAppiizardCustomAppWizardDatabaseProjectISAPIExtensionWizardMakefileMFCActiveXControfizardMFCAppWizard(D1.1.)MFCDatabaseWizardIin32ApplicationHin32ConsoleApplication
18、Win32D1.1.Vin32Static1.ibrary运用向导Applizard生成典型的应用程序一一夔于多文档的可执行程序。Microsoft的MSDN供应了编程所需的绝大部分信息,运用Fl键可以打开MSDN彷助.消息是WindonS塌程不同于其它编程方式的地方,如DOS环境下编程.消息就是悚作系统通知应用程序某事已发生的一种方式,如:用户己输入、己单击或移动鼠标、打印机己空暇等。尽管操作系统用整数来引用消刖,但全部鬲息都通过它In的名字来引用。一个巨大的Mefine谙句将消息名同数值联系起来.不同消息由操作系统或应用程序的不同部分处理.如,当用户在窗口上移动聚标时,窗口得到一个Umji
19、ousemoye消息,它几乎全部传送给操作系统去处理.2)MFC允许程序员忽视底层消息,并使得在单独类级别上声明极个类处理哪些消息更简洁.其次讲编程工具YCI)任何WindoWS程序的核心是消息循环,这通常包含在WinMaino例程中。2)MFC通过消息映射来保持消息处理函数与消息处理信息的一样.消息映射是进行windows编程的一部分MFC方法,用来代替编写向用户的WinProcO发送消息的HinMain()函数,及编写检杳消息类型的WinPrOCo函数.用户只答编号处理消息的函数,并且在用户的类中增加一个消息映射即可,其它一切由MFC处理.在类声明的结尾部分,运用宏来声明在类定义部分须要浦
20、息映射.在*.CPP文件中运用宏来声明消息映射,在两个宏之间声明消息的映射函数。ONCQMMAM)用于将特定吩咐的处理委派给类的一个成员函数“onlmessge用干将用户自定义消息的处理委派给类的一个成员函数.1)指标签的ClaSSHiZard对话框通过选择Yiew,Classrizard或按CtrI+W可以显示主。IaSSWiZard对话框。在对话框的顶部有两个卜拉列表框,一个用于提示正在处理的工程文件(本例是.另外一个用于提示蟀一个类瓶有正在进行编辑的消息映射.在这两个组合枢下面是一个列表框.左边的框列出了类本身和用户局面可以产生的全部吩咐,右边的框列出了这个类可以捕获的全部Windo-S
21、消息,也列出了很多捕获常用消息的虚函数.在这些框的右边是一些按钮,它们的作用分别是向工程文件增加新类、向类中增加一函数以捕获被嵇克显示的消息、删除正在捕获消息的函数,以及为捕获高亮显示消息的函散打开源代码口通常,用户选中一个类,选中一个消息,并单击AddFunction来捕获消息。下面就是AddFunction按钮所做的事情:更新对话框中的消息和成员函数列表.2)添加WindoWS消息处理函数对话框还有月外一种捕获消息的Zf法。用户可以右击CIaSSYieW中的类名,然后从出现的快捷其次讲编程工具YC菜单中选择AddWindorsMessageHandler.这时将出现如下图所示的对话框.吩时
22、是一种特别的消息类型.用户在任何时候选择一个菜单项,单击一个按钮或告知系统做什么,windows都将产生一个吩咐.ClassUizard可帮助用户擒获吩咐.运行界面与消息捕获类似.吩咐消息部通过被选择的菜单或被单击的按钿的资源ID与相应的处理函数进行关联“只CWnd派生的对象可以接收泊.也.集个资源IP仅关联两个消息:COMKRXDUPDATECOMMANDUk第一个消刖允许增加处理用户选中菜单选项或单击按钮的函数一一也就是说,捕获吩札其次个运用户可增加一个设置菜单以、按钮或者其他控件的状态的函数.就像操作系统W将显示它们一样一一也就是说,更新吩咐。单击AddFunction来增加一个捕获或更新包含额外步骤的吩咐.MFC的文档/视图结构把应用程序的数据从用户实际阅读和操纵数据的方法中分别开来”简沽的说,文档对型负而存储、加税和保存数据,而视图时象允许用户在屏器上查看数据,并用适合于应用程序的方法瑞辑数据。CDOCUment一个文档代表了一个数据集合,典型状况下一个文档由用户通过FiIeoPen吩附打开并通过FileSave吩咐保存.用户通过与文档美联的CView对象操作文档。一个文档可以有多个视图关联.