前 言
是武汉中地信息工程有限公司研制的具有自主版权的大型基础地理信息系统平
台。它是一个集当代最先进的图形、图像、地质、地理、遥感、测绘、人工智能、计算机科
学于一体的大型智能软件系统,是集数字制图、数据库管理及空间分析为一体的空间信息系
统,是进行现代化管理和决策的先进工具。连续四年在全国测评中名列第一,
并成为唯一连续四年获得国家科技部向社会推荐的国产软件平台。
中地软件丛书之二次开发培训教程是根据最新推出的软件平台编写而
成,主要介绍进行二次开发必须具备的基础知识、主流开发工具以及系统
的基本概念、结构体系和操作方法。该教程分为三个部分,共十一讲。其中:
第一部分(即第一讲的内容):介绍编程的概念。包括类与数据封装、继承、
重载、虚拟函数与多态性以及内存管理。该部分为可视化编程的基础,有可视化编程经验的
读者可以略过此讲,直接进入下一部分的学习。
第二部分(即第二讲的内容):编程工具。对于在这样一个编程环境中开发应用
程序所应熟悉的概念,术语和最基本的框架、构件实现过程等知识做了一个简明扼要的介绍
已掌握一定编程基础知识的读者可以略过该部分。
第三部分(即第三讲至第十一讲的内容):详细讲述了地理信息系统的基本概念(包括
原理概述、空间数据类型、空间数据库、空间数据结构与数据管理等内容);
的基本概念和体系结构(简要描述了二次开发的基本概念、术语、工作区、空间实
体及其数据、类组织和开发环境介绍的内容);空间数据存取和属性编辑
(包括工作区、空间实体和属性的操作及其网络介绍);图形显示输出及窗口操作、图形编
辑、类库和控件开发;矢量空间分析和属性查询;投影变换、图框生成和工程管理;图库管
理和查询系统(包括基于图库的应用程序开发、图库介绍、开发的一般步骤以及结
合图库显示说明图库主要函数的功能等方面的内容)以及图象分析与处理。这一部分为本教
程的主要部分,能使大家从了解到熟练掌握这个部分的内容也是我们编制本书的主要目的,
同时它还可被作为二次开发过程中的参考来使用。
参加本书编写的人员主要是本系统的软件开发人员以及长期从事和
培训的教师。由于时间仓促,书中难免存在错误和不当之处,敬请广大用户及读者提出宝贵
意见和建议,以利改进。
中地软件丛书编委会
年月
目 录
前 言...............................................................................................................................................1
目 录...............................................................................................................................................1
第一讲 基于WINDOWS编程的基础知识....................................................................................1
1.1引言...................................................................................................................................1
1.2类与数据封装...................................................................................................................1
1.3继承...................................................................................................................................2
1.4重载...................................................................................................................................5
1.5虚拟函数与多态性...........................................................................................................6
第二讲 编程工具VC......................................................................................................................8
2.1熟悉VC开发环境..............................................................................................................8
2.2消息与命令.......................................................................................................................8
2.3文档、视结构.................................................................................................................10
2.4图形设备接口..................................................................................................................11
2.5对话框和控件.................................................................................................................12
2.6编程规范.........................................................................................................................14
第三讲 地理信息系统基本概念.................................................................................................16
3.1 GIS原理概述..................................................................................................................16
3.2 GIS空间数据类型..........................................................................................................17
3.3 GIS数据管理..................................................................................................................18
3.4空间分析.........................................................................................................................20
3.5地理信息系统发展.........................................................................................................20
第四讲 MAPGIS的基本概念和体系结构..................................................................................22
4.1 MAPGIS二次开发的基本概念......................................................................................22
4.2 MAPGIS基本术语.........................................................................................................23
4.3 MAPGIS的数据管理(工作区)..................................................................................25
4.4 MAPGIS的空间实体及其数据组织..............................................................................27
4.5 MAPGIS的C++类组织..................................................................................................29
4.6 MAPGIS的VC++开发环境介绍....................................................................................30
第五讲 MAPGIS空间数据存取和属性编辑..............................................................................32
5.1工作区操作.....................................................................................................................32
5.2空间实体操作.................................................................................................................34
5.3属性(属性结构)操作..................................................................................................37
5.4网络介绍.........................................................................................................................44
第六讲 图形显示输出及窗口处理.............................................................................................45
6.1图形显示输出.................................................................................................................45
6.2窗口处理.........................................................................................................................50
6.3类库开发中的图形显示和窗口处理..............................................................................51
第七讲 图形编辑、类库和控件开发.........................................................................................53
7.1图形编辑开发概要.........................................................................................................53
7.2图形编辑API函数开发...................................................................................................53
7.3 MAPGIS类库开发.........................................................................................................54
7.4 MAPGIS控件开发.........................................................................................................61
第八讲 矢量空间分析和属性查询.............................................................................................66
8.1矢量空间分析.................................................................................................................66
8.2属性查询检索.................................................................................................................71
第九讲 投影变换和图框生成.....................................................................................................73
9.1投影变换(projdll.h、cordcvt.h)......................................................................................73
9.2图框生成(frmdll32.h)......................................................................................................83
第十讲 图库管理和工程管理.....................................................................................................91
10.1 MAPGIS图库简介.......................................................................................................91
10.2基于图库的应用程序的开发........................................................................................92
10.3结合图库的显示说明图库中主要函数的功能............................................................92
10.4工程管理(prj_disp.h和map_prj.h).................................................................................97
第十一讲 MAPGIS图象处理和分析........................................................................................102
11.1遥感图象处理的基本知识..........................................................................................102
11.2处理方法......................................................................................................................102
11.3主要API 介绍................................................................................................................99
11.4组件介绍......................................................................................................................107
11.5在VC中的开发过程(结合示例程序讲解).............................................................109
11.6示例程序说明..............................................................................................................109
附 录...........................................................................................................................................110
MAPGIS二次开发问题集锦......................................................................................................110
1.属性和属性结构..............................................................................................................110
2.空间实体操作问题.........................................................................................................124
3.显示、编辑问题.............................................................................................................124
4.空间分析问题.................................................................................................................132
5.数字高程模型.................................................................................................................132
6.安装问题.........................................................................................................................135
7.工程问题.........................................................................................................................136
8.输出问题.........................................................................................................................137
9.其它.................................................................................................................................139
第一讲 基于 编程的基础知识
第一讲 基于WINDOWS编程的基础知识
1.1引言
1.1.1 过程化(procedural programming):
程序被认为是在一个数据集合上进行的一系列操作。
1.1.2 结构化(structured programming):
主要思想是:功能分解并逐步求精。
1.1.3 面向对象的程序设计(object_oriented programming):
实质是把数据和处理这些数据的过程合并为一个单独的“对象”――一个具有确定特性的
自完备的实体。
1.1.4 面向对象程序设计的特征:
) 封装
) 继承
) 多态
1.2类与数据封装
1.2.1 什么是类?
简单的说,类就是一种用户定义的数据类型,跟结构类似;并且,类具有自己的成员变
量和成员函数(方法),通过它们可以对类自身进行操作。如:汽车可以看作是发动机、车
轮、座椅等诸如此类的集合。也可以从功能的角度来研究,譬如,能移动,加速,减速,刹
车等。
例如:
! !"
#$%
&'"
( &)#$%
*
1.2.2 封装(encapsulation)
定义:指能够把一个实体的信息、功能、响应都装入一个单独的对象中的特性。封装的
优点如下:
$封装允许类的客户不必关心类的工作机理就可以使用它。就象驾驶员不必了解
- 1 -
第一讲 基于 编程的基础知识
发动机的工作原理就可以驾驶汽车一样,类的客户在使用一个类时也不必了解它是如何
工作的,而只需了解它的功能即可。
$所有对数据的访问和操作都必须通过特定的方法,否则便无法使用,从而达到
数据隐藏的目的。
1.2.3 对象
对象就是类的实例。类与对象的关系就如类型和变量的关系,所有对类的操作都必须通
过对象来实现。当一个类定义了多个对象时,每个对象拥有各自的成员数据。
1.2.4 类的三种成员类型
$私有成员#( !$:缺省情况下,一个类中的所有成员都是私有的。私有成员只能
被类本身的成员函数访问。并且不具有继承性。
$公有成员#&'$:公有成员可以被类成员函数和外部函数使用。
$保护成员# ! !$:类的保护成员能被类及其派生类的成员函数和友员函数使用
具有继承性。
1.2.5 构造函数与析构函数
)构造函数
+是特殊的成员函数;在创建对象时首先由系统自动调用。它的作用是为新创建
的对象分配空间,或为该对象的成员变量赋值等;
'+构造函数名必须与其类名称完全相同,并且不允许有返回值。
)析构函数
+析构函数是构造函数的逆操作;
'+析构函数在类名之前加)来命名,它不允许有返回值,也不允许带参数,并且
一个类只能有一个析构函数。
1.3继承
1.3.1 传统程序设计的缺点:
增加功能对程序所作的修改工作量非常大。
1.3.2 继承的优点:
继承的方法允许在不改动原程序的基础上对其进行扩充,这样使得原功能得以保存,而
新功能也得以扩展。这有利于减少重复编码,提高软件的开发效率。
1.3.3 基类与派生类
)一个类可以继承其它类的成员,被继承的类叫基类或父类;继承类叫派生类或子类
)派生类不但拥有自己的成员变量和成员函数,还拥有父类的成员变量和成员函数。
1.3.4 类的保护成员(protected)
前面介绍了类的私有成员只能被类的成员函数和友员函数使用;类的保护成员能被类及
其派生类的成员函数和友员函数使用。也就是说,类的保护成员具有继承性,而类的私有成
员不具有继承性。
1.3.5 公用基类和私有基类
)公用基类中的所有&'成员在派生类中仍是&'成员,所有 ! !成员在
派生类中仍是 ! !成员。
)私有基类中的&'成员和 ! !成员在派生类中均变成( !成员。
1.3.6 多重继承
- 2 -