2022年mapgis二次开发培训教程.doc
《2022年mapgis二次开发培训教程.doc》由会员分享,可在线阅读,更多相关《2022年mapgis二次开发培训教程.doc(156页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、MAPGIS二次开发培教程前 言MAPGIS是武汉中地信息工程研制的具有自主版权的大型根底地理信息系统平台。它是一个集当代最先进的图形、图像、地质、地理、遥感、测绘、人工智能、计算机科学于一体的大型智能软件系统,是集数字制图、数据库治理及空间分析为一体的空间信息系统,是进展现代化治理和决策的先进工具。MAPGIS连续四年在全国GIS测评中名列第一,并成为唯一连续四年获得国家科技部向社会推荐的国产GIS软件平台。中地软件丛书之MAPGIS二次开发培训教程是依照最新推出的MAPGIS软件平台编写而成,主要介绍进展MAPGIS二次开发必须具备的根底知识、主流开发工具以及MAPGIS系统的根本概念、构
2、造体系和操作方法。该教程分为三个部分,共十一讲。其中: 第一部分(即第一讲的内容):介绍Windows编程的概念。包括类与数据封装、继承、重载、虚拟函数与多态性以及内存治理。该部分为可视化编程的根底,有可视化编程经历的读者能够略过此讲,直截了当进入下一部分的学习。第二部分(即第二讲的内容):编程工具VC。关于在VC如此一个编程环境中开发应用程序所应熟悉的概念,术语和最根本的框架、构件实现过程等知识做了一个简明扼要的介绍。已掌握一定VC编程根底知识的读者能够略过该部分。第三部分(即第三讲至第十一讲的内容):详细讲述了地理信息系统的根本概念(包括GIS原理概述、空间数据类型、空间数据库、空间数据构
3、造与数据治理等内容);MAPGIS的根本概念和体系构造(简要描绘了MAPGIS二次开发的根本概念、术语、工作区、空间实体及其数据、C+类组织和开发环境介绍的内容);MAPGIS空间数据存取和属性编辑(包括工作区、空间实体和属性的操作及其网络介绍);图形显示输出及窗口操作、图形编辑、类库和控件开发;矢量空间分析和属性查询;投影变换、图框生成和工程治理;图库治理和查询系统(包括基于图库的应用程序开发、MAPGIS图库介绍、开发的一般步骤以及结合图库显示说明图库主要函数的功能等方面的内容)以及图象分析与处理。这一部分为本教程的主要部分,能使大家从理解到纯熟掌握这个部分的内容也是我们编制本书的主要目的
4、,同时它还可被作为MAPGIS二次开发过程中的参考来使用。参加本书编写的人员主要是本系统的软件开发人员以及长期从事MAPCAD和MAPGIS培训的老师。由于时间仓促,书中难免存在错误和不当之处,敬请广大用户及读者提出珍贵意见和建议,以利改良。中地软件丛书编委会 2001年10月目 录第一讲 基于WINDOWS编程的根底知识11.1引言11.2类与数据封装11.3继承21.4重载41.5虚拟函数与多态性5第二讲 编程工具VC82.1熟悉VC开发环境82.2音讯与命令82.3文档、视构造102.4图形设备接口112.5对话框和控件122.6编程标准13第三讲 地理信息系统根本概念153.1 GIS
5、原理概述153.2 GIS空间数据类型173.3 GIS数据治理183.4空间分析203.5地理信息系统开展20第四讲 MAPGIS的根本概念和体系构造224.1 MAPGIS二次开发的根本概念224.2 MAPGIS根本术语234.3 MAPGIS的数据治理(工作区)254.4 MAPGIS的空间实体及其数据组织274.5 MAPGIS的C+类组织294.6 MAPGIS的VC+开发环境介绍30第五讲 MAPGIS空间数据存取和属性编辑325.1工作区操作325.2空间实体操作345.3属性(属性构造)操作375.4网络介绍44第六讲 图形显示输出及窗口处理456.1图形显示输出456.2窗
6、口处理496.3类库开发中的图形显示和窗口处理51第七讲 图形编辑、类库和控件开发537.1图形编辑开发概要537.2图形编辑API函数开发537.3 MAPGIS类库开发547.4 MAPGIS控件开发60第八讲 矢量空间分析和属性查询668.1矢量空间分析668.2属性查询检索71第九讲 投影变换和图框生成739.1投影变换(projdll.h、cordcvt.h)739.2图框生成(frmdll32.h)83第十讲 图库治理和工程治理9110.1 MAPGIS图库简介9110.2基于图库的应用程序的开发9210.3结合图库的显示说明图库中主要函数的功能9210.4工程治理(prj_dis
7、p.h和map_prj.h)96第十一讲 MAPGIS图象处理和分析10111.1遥感图象处理的根本知识10111.2处理方法10111.3主要API 介绍9911.4组件介绍10711.5在VC中的开发过程(结合例如程序讲解)10811.6例如程序说明109附 录 MAPGIS 二次开发咨询题集锦1101.属性和属性构造1102.空间实体操作咨询题1233.显示、编辑咨询题1244.空间分析咨询题1315.数字高程模型1316.安装咨询题1347.工程咨询题1358.输出咨询题1369.其它138第一讲 基于WINDOWS编程的根底知识1.1引言1.1.1 过程化(procedural pr
8、ogramming):程序被认为是在一个数据集合上进展的一系列操作。1.1.2 构造化(structured programming):主要思想是:功能分解并逐步求精。1.1.3 面向对象的程序设计(object_oriented programming):本质是把数据和处理这些数据的过程合并为一个单独的“对象”一个具有确定特性的自完备的实体。1.1.4 面向对象程序设计的特征:1) 封装2) 继承3) 多态1.2类与数据封装1.2.1 什么是类?简单的说,类确实是一种用户定义的数据类型,跟构造类似;同时,类具有本人的成员变量和成员函数(方法),通过它们能够对类本身进展操作。如:汽车能够看作是
9、发动机、车轮、座椅等诸如此类的集合。也能够从功能的角度来研究,譬如,能挪动,加速,减速,刹车等。例如:class CMyClass1protected:CMyClass1();public:virtual CMyClass1();1.2.2 封装(encapsulation)定义:指能够把一个实体的信息、功能、响应都装入一个单独的对象中的特性。封装的优点如下:1) 封装同意类的客户不必关怀类的工作机理就能够使用它。就象驾驶员不必理解发动机的工作原理就能够驾驶汽车一样,类的客户在使用一个类时也不必理解它是如何工作的,而只需理解它的功能即可。2) 所有对数据的访咨询和操作都必须通过特定的方法,否则
10、便无法使用,从而到达数据隐藏的目的。1.2.3 对象对象确实是类的实例。类与对象的关系就如类型和变量的关系,所有对类的操作都必须通过对象来实现。当一个类定义了多个对象时,每个对象拥有各自的成员数据。1.2.4 类的三种成员类型1) 私有成员(private):缺省情况下,一个类中的所有成员都是私有的。私有成员只能被类本身的成员函数访咨询。同时不具有继承性。2) 公有成员(public):公有成员能够被类成员函数和外部函数使用。3) 保护成员(protected):类的保护成员能被类及其派生类的成员函数和友员函数使用,具有继承性。1.2.5 构造函数与析构函数1)构造函数a. 是特别的成员函数;
11、在创立对象时首先由系统自动调用。它的作用是为新创立的对象分配空间,或为该对象的成员变量赋值等;b. 构造函数名必须与其类名称完全一样,同时不同意有返回值。2)析构函数a. 析构函数是构造函数的逆操作;b. 析构函数在类名之前加来命名,它不同意有返回值,也不同意带参数,同时一个类只能有一个析构函数。1.3继承1.3.1 传统程序设计的缺点:增加功能对程序所作的修正工作量特别大。1.3.2 继承的优点:继承的方法同意在不改动原程序的根底上对其进展扩大,如此使得原功能得以保存,而新功能也得以扩展。这有利于减少重复编码,提高软件的开发效率。1.3.3 基类与派生类1)一个类能够继承其它类的成员,被继承
12、的类叫基类或父类;继承类叫派生类或子类2)派生类不但拥有本人的成员变量和成员函数,还拥有父类的成员变量和成员函数。1.3.4 类的保护成员(protected)前面介绍了类的私有成员只能被类的成员函数和友员函数使用;类的保护成员能被类及其派生类的成员函数和友员函数使用。也确实是说,类的保护成员具有继承性,而类的私有成员不具有继承性。1.3.5 公用基类和私有基类1)公用基类中的所有public成员在派生类中仍是public成员,所有protected成员在派生类中仍是protected成员。2)私有基类中的public成员和protected成员在派生类中均变成private成员。1.3.6
13、多重继承1)多重继承的定义方法例子:class Apublic:int i;void func1();class Bpublic:int i;void func1();class C: public A,Bvoid Show();缺省情况下基类被定义为 private;因而基类B为私有基类。2)继承的不确定性例子:class C:public A,B void Show() j = i*i; func1();由于基类A和B中同时拥有数据成员i和成员函数func1,类C援用基类的成员时,系统无法分辨是调用哪一基类的成员而发生错误;3)处理多重继承的不确定性:使用域操作符指明要调用的基类,即可处理
14、不确定性咨询题。class C:public A,B int j; void Show() j = A:i*B:i; A:func1(); ;1.3.7 多层继承定义:所谓多层继承指的是从一个类派生出另一个类,然后以派生类作为基类,派生出另一个类,直到最后生成的派生类满足需要为止(见MSDN中的Hierarchy Chart)。1.3.8 派生类的构造函数与析构函数在继承关系下,派生类的构造函数负责调用基类的构造函数来设置基类数据成员值。例:class base/基类 public:int i;base(int j)/构造函数i = j;class derived:public base/派生
15、类public:double f;derived(int, double);derived:derived(int k, double l):base(k)/派生类构造函数f = l;1.3.9 构造函数的调用顺序1) 在定义派生类对象时,系统首先调用基类的构造函数,然后调用派生类的构造函数;在上例中,derived类首先调用base类的构造函数,然后调用本身的构造函数。2) 析构函数的调用顺序与构造函数的调用顺序相反。1.4重载1.4.1函数重载1)假如函数有一样的名称和返回值,而有不同的参数个数或参数类型,则这些函数确实是重载函数。2)派生类继承了基类的某一函数,同时又自定义了一个同名函数
16、,有一样的返回值,不同的参数类型或参数个数。这种情况不属于重载。由于它们属于不同的域。3)例:class base void func(int i)void func(double f)void func(double f, long q);1.4.2 操作符重载重载操作符的定义:返回值类型 operator op (参数表);其中,op为重载操作符,它必须是VC+中所定义的运算符。然后像定义函数一样定义重载操作符函数。例子:class personint age;void operator +();void person:operator+() age+;1.5虚拟函数与多态性多态性是面向对
17、象程序设计的精华之所在,也是C+中最难理解和掌握的部分。在C+中,多态性是建立在虚拟函数根底上的,虚拟函数的使用使类的成员函数表现出多态性。1.5.1虚拟函数1)函数的定义:在定义类时在其成员函数前加上关键字virtual;2)假如基类中成员函数定义为虚函数,则派生类中与其定义完全一样的成员函数,编译器自动将其视为虚函数;3)只有类的成员函数才能定义为虚函数。4)虚拟成员函数的存取要看初次定义它的类中,该函数是public依然private。例:class Insect virtual bool CanFly();bool Insect : CanFly()return FALSE;class
18、 Butterfly:public Insectbool CanFly();bool Butterfly : CanFly()return TRUE;1.5.2 虚函数的调用1) 依照对象的不同而去调用不同类的虚拟函数2) 能够使用基类对象调用派生类对象,马上派生类对象或指针赋值给基类对象或指针。3) 反方向的赋值(将基类的对象或指针赋给派生类的对象或指针)是危险的。例:bool rtn;Insectinc1,*pInc;Butterfly btfly;pInc = inc1;/pInc指针指向Insect对象rtn = pInc-CanFly();/返回FALSEpInc = btfly;/
19、pInc指针指向Butterfly对象rtn = pInc-CanFly();/返回TRUE1.5.3 虚拟函数与重载函数的区别1)方式上,重载函数要求有一样的返回值类型和函数名,并有不同的参数序列;而虚拟函数要求三者完全一样。2)重载函数能够是成员函数或非成员函数;而虚拟函数必须是成员函数。3)调用方法上,重载函数依照所传递的参数序列的差异作为调用的依照;而虚拟函数则依照调用对象的不同而去调用不同类的函数。4)虚拟函数在运转时表现出多态功能;而重载函数不具有这一功能。1.5.4纯虚函数定义:virtual type funcname(parameter)=0;C+中有时设计基类确实是为了被继
20、承,而基类中的虚拟函数不做任何工作,这种情况下能够将基类中的虚拟函数定义为纯虚函数。包含纯需函数的类叫抽象类。抽象类不能定义对象,但能够定义指向它的指针。习题:1.1什么是类?1.2理解封装、继承和多态。第二讲 编程工具VC2.1熟悉VC开发环境2.1.1 VC导游提供的协助往常Windows编程需要程序员编写大量的框架代码,这对初学者来说简直确实是一个噩梦;同时这些框架代码根本一样,因而Microsoft提供了导游AppWizard协助生成框架代码,这极大的方便了我们编写程序。2.1.2 VC导游能够生成的工程类型ATL COM AppWizardCustomAppWizardDatabas
21、eProjectISAPI Extension WizardMakefileMFC ActiveX ControWizardMFC AppWizard (DLL)MFC Database WizardWin32 ApplicationWin32 Console ApplicationWin32 DLLWin32 Static Library2.1.3 建立第一个应用程序:使用导游AppWizard生成典型的应用程序基于多文档的可执行程序。2.1.4 如何获取协助?Microsoft的MSDN提供了编程所需的绝大部分信息,使用F1键能够打开MSDN协助。2.2音讯与命令2.2.1 音讯音讯是Wi
22、ndows编程不同于其它编程方式的地点,如DOS环境下编程。音讯确实是操作系统通知应用程序某事已发生的一种方式,如:用户已输入、已单击或挪动鼠标、打印机已空闲等。2.2.2 音讯传递1) 尽管操作系统用整数来援用音讯,但所有音讯都通过它们的名字来援用。一个宏大的#define语句将音讯名同数值联络起来。不同音讯由操作系统或应用程序的不同部分处理。如,当用户在窗口上挪动鼠标时,窗口得到一个WM_MOUSEMOVE音讯,它几乎全部传送给操作系统去处理。2)MFC同意程序员忽略底层音讯,并使得在单独类级别上声明每个类处理哪些音讯更容易。2.2.3 音讯循环1)任何windows 程序的核心是音讯循环
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022 mapgis 二次开发 培训 教程
限制150内