【精品】VC++开发GIS项目程序设计(源代码+论文+开题报告)
收藏
资源目录
压缩包内文档预览:(预览前20页/共33页)
编号:1639482
类型:共享资源
大小:4.58MB
格式:RAR
上传时间:2017-08-30
上传人:机****料
认证信息
个人认证
高**(实名认证)
河南
IP属地:河南
50
积分
- 关 键 词:
-
精品
vc
开发
gis
项目
程序设计
源代码
论文
开题
报告
讲演
呈文
- 资源描述:
-
【精品】VC++开发GIS项目程序设计(源代码+论文+开题报告),精品,vc,开发,gis,项目,程序设计,源代码,论文,开题,报告,讲演,呈文
- 内容简介:
-
武汉 科技学院 2005届毕业设计 (论文 ) 1 1 实现图形系统的文档和视图 织矢量图形系统的图形元素类 城市的信息化为城市 际上,城市信息化表现为政府管理与决策的信息化(数字政府),企业管理、决策与服务的信息化(数字企业),市民生活的信息化(数字城市生活),即 “ 数字城市 ” 。由此可见,城市 “ 数字城市 ” 最核心的部分,可以分为政府 业 社会 “ 数字城市 ” 的发展,要求政府、企业和社会 过数据通信网络将政府、企业和社会联成一个整体,实现资源的共享。 历史给了我们中国人特殊的超越他人的机遇。美国人、 加拿大人、西欧人在通讯基础设施,政府、企业信息系统建设,信息系统互联互通,以及网络社会、网络社区四个阶段循序渐进的发展中占尽先机。但是当时的 3 维 术、 4遍美国、西欧、加拿大、澳洲的城市政府网站,基于 4D 数据、三维表现、借助虚拟现实技术的凤毛麟角。 时间和市场为我们创造了超越的重大历史机会。这个机会就是数字城市中三维和 术的开发和应用。抓住机遇,我国的数字城市将大放异彩。我们认为中国的数字城市特色应该定位在:建设具有 4D 数 据的城市基础地理信息公共平台;建设以 3 维和 术为主的城市规划、建设和管理业务专业应用系统。集中抢占数字城市 “43的技术应用战略制高点,形成中国数字城市 “43的特色,开拓中国数字城市独特的市场空间 10。 面向对象的程序设计,是目前程序设计的主流方法,在本设计中,将利用面向对象的程序设计和 C+类的组织方法,组织建立一个基本矢量图形的图形元素类。组织实现的矢量图形系统,能够处理点类、线类、面类、网络点等类别的图形元素,其中点类图形元素有包括直线,圆,圆弧,子图,标注文本等图形元素,针对每类图 形元素组织建立起对其进行管理的 C+类,并把每个图形元素作为一个独立的对象来管理。 形元素基类的组织 对各类图形元素进行分析,可以发现各类图形元素具有一些相同的属性和操作功能,如图形元素的颜色、线型线宽所在层等属性和得到一个图形元素是否做了删除标志等操作。 把这些图形元素中共性的东西(属性和操作),组织存放在一个图形元素基类 (,具体的图形元素由这个基类来派生。 类图形元素组织 5 对于点类图形元素,其基本特性是各个图形相互独立,且每个图形元素具有有限个固定的特征点 。 直线的基类是 在直线类的构造函数中,共有包括 11 个参数,并利武汉 科技学院 2005届毕业设计 (论文 ) 2 用前 7个参数调用基类 基类的成员变量进行初始化,而在本身的构造函数中对直线类 线的起点和终点)进行了初始化。 对圆类的创建方法与直线类 似,圆除了具有图形元素的基本特征外,还有自身的几何特性,可以用圆心和半径作为特征参数表示圆的几何特性。 圆是圆弧的一个特例,当圆弧的弧度等于 2时就是圆。所以可以从一个圆类派生得到一个圆弧类。 矢量图形中可以有大量的标注文本,标注文本除了具有 图形元素的基本特性外,还具有位置、字体及标注内容等自身的信息。 二个构造参数有多个参数,并利用多个参数对类的成员变量进行初始化。在构造函数中,调用了基类 子图是各类图形元素的集合体,是由多个图形元素组成的整体。为了在图形中插入子图,必须首先建立起管理子图所包含的图形元素的类,形成一个子图定义体,将选定的子图块以一定的横纵比例插入到图形中指定的位置,就形成了一个子图块。 类图形元素组织 线类图形元素包括很多种 ,如连续直线、混合线、树状线等,在本设计中,以最简单的连续直线为例进行讨论,对于其他类型线的实现方法,可根据连续直线的实现方法来开发。 连续直线除了具有图形元素基类所具有的属性外,从图形的几何特征上,连续直线是由很多顶点组成的,而且顶点数目是不确定的。一条连续直线可能只有两个顶点,也可能有几千个顶点。所以,需要定义一个结构来存储连续直线的一个顶点坐标。 类图形元素的组织 10 面类图形元素一般是由闭合线围成的区域。根据围成面的边界不同,有不同形式的面,如圆形区域椭圆形区域复合线区域多边形区域 等。最常用的面是多边形区域,其边界由一条连续直线组成。因为另外各种类型面的边界一般都可以用连续直线来近似描述,所以,本设计只讨论多边形区域的实现方法。 在描述多边形区域时,最主要的是要描述边界顶点坐标。描述面的边界顶点坐标时,有不同的描述方法,一种方法是将边界由几段连续直线来描述。 另外一种描述方法是直接存储区域的边界顶点坐标,即把区域的整个边界作为一条连续直线来存储。这种方法的缺点是造成坐标的重复存储;优点是具有较强的独立性,不用考虑组成区域的连续直线段。 在本设计中,采用直接存储边界坐标的方式。用这种方 式组织多边形区域时,组织方式与连续直线类似。所以,可以由连续直线类 生出一个对多边形区域进行管理。 络类图形元素的组织 网络分析是 一项非常重要的基本功能,最佳路径分析、最佳游历路径分析、连通分析、资源分配等都需要有网络类图形元素对网络进行描述、显示和分析。为了能够对网络进行描述和处理,在系统中增加一类图形元素来描述有方向、无转角的网络图。这类图形元素称为网络点。 武汉 科技学院 2005届毕业设计 (论文 ) 3 形参数类 在矢量图形系统中,图形参数是集中存储的。在图形元素基类中成员变量存储的是颜色列表的序列号, 存储的也是在图层列表中的序列号。 织矢量图形系统的文档 织面向对象的文档管理机制 管理矢量图形系统图形数据的方法即文档管理机制。在本设计的开发中,采用一套完全面向对象的文档组织机制。这种机制就是通过图形元素类创建很多图形元素对象,每个图形元素对象作为一个整体来组织存储空间的分配、存取等各种管理功能。然后通过建立一种存储机制,来管理指向所有图形元素对象的指针,达到管理所有图形元素对象的目的。这种文 档管理机制具有组织简单结构化和移植性好,以及比较容易利用 程序设计语言的开发功能等优点。缺点是需要较大的内存空间。 用 板创建管理图形元素对象指针的对象 管理一个矢量图形系统文档的思路是:每个图形元素是图形元素类创建的一个对象,在创建这个对象时得到指向这个对象的指针,建立一个对象指针数组来管理这些指针,以达到管理所有图形元素对象的目的。 在 下可以较容易地实现对指向图形元素对象的指针的组织和管理。在有一个类模班 以用它来创建一个管理类指针 的对象。例如,可以定义一个管理 指针的对象如下: 10 现矢量图形系统的文档 在应用程序 以派生几个 文档类 创建几个管理各类图形元素对象指针的 象如下: 现文档的管理功能 增加图形元素 在应用程序 增加一个图形元素对象(如一条直线)时,需要进行以下两个步骤的操作: 武汉 科技学院 2005届毕业设计 (论文 ) 4 首先需要创建一个图形元素对象,并用图形元素的实际数据初始化这个图形元素对象。如增加一条直线时,需要创建一个 象,并用这条直线的实际数据(起终点、所在图层、颜色等)初始化这个 象的成员变量。 然后需要把指向新创建的图形元素对象的指针,增加到文档类中管理图形元素对象指针的对象中。如增加一条 象后,需要把指向这个象的指针增加到文档类的 象中。 为了实现增加各类图形元素的功能,在文档类 定义几个函数, 分别来完成增加各类图形元素的操作功能 3 1,1,2,2); x,y, 这 8个函数分别用来实现增加一条直线、一个圆、一个圆弧、一个标注文本、一个子图、一条连续直线、一个多边形区域、一个网络点的功能。函数返回指向新增图形元素对象的指针。 得到指向图形元素对象的指针 在一个矢量图形系统中,有大量的图形元素,指向图形元素对象的指针被保存在文档类对应的 象中。在系统的操作过程中,为了实现对图形元素的各种操作功能,需要得到指向指定图形元素对象的指针,为此,在文档类定义一个函数 b, ; 在实现文件 ,加入函数的具体实现代码。 删除图形元素对象 为了能够从 象中删除一个指定图形元素对象指针,在文档类 武汉 科技学院 2005届毕业设计 (论文 ) 5 b, 在实现文件 ,加入函数的具体实现代码。 得到各类图形元素的数目 为了能够随时得到文档中各类图形元素对象的数目,在文档类 ,定义一个成员函 数如下: b); 在实现文件 ,加入函数的具体实现代码。 得到存储各类图形元素 象数组的最大下标 在对各个图形元素类的所有图形元素进行操作时,需要得到存储在各个象中的最大数组下标,然后对各个数组项实现遍历操作。为了得到存储在各个 象中的最大数组下标,在文档类 定义一个函数如下: b); 在实现文件 ,加入函数的具体实现代码。 得到某个识别号的图形元素对象指针在 组中的存放位置 b,D); 在实现文件 ,加入函数的具体实现代码。 增加网络连接 对于一个网络点来说,其最主要的特性就是指向其他网络点的连接。 为了增加网络连接,首先在 中定义一个增加网络连接的函数 函数的参数是连接要指向的网络点的识别号; 在文档类 定义一个函数 现在一个网络点中增加一个指向另外一个网络点的连接。 在实现文件 ,加入函数的具体实现代码。 现矢量图形系统的视图 立坐标系 建立坐标系 该坐标系取屏幕的左下角点作为图形屏幕的基点。客户区的左下角的坐标定义为 ( 并确定一个变量 为逻辑坐标和实际坐标的比例关系。 实际坐标与逻辑坐标的转换 为了实现实际坐标 与逻辑坐标的转换,在视图类 定义如下的四个转换函数: x, y, X,Y); x, y, X, Y); 武汉 科技学院 2005届毕业设计 (论文 ) 6 l); l); 函数 来将逻辑坐标转换成实际坐标,参数( x,y)是一个点的逻辑坐标,参数( *X ,*Y)返回转换后的实际坐标值。 函数 实际坐标长度转换成逻辑坐标长度,参数 l 是一个实际坐标长度,函数返回逻辑坐标表示的长度值。 四个转换函数中用到的成员变量,在视图类 定义: 为了在应用程序 其他类中能够使用四个坐标转换函数,可以定义四个全局函数来实现转换操作功能,在实现文件 ,定义四个全局函数如下: x, y, X, Y); x, y, X, Y ); l); l); 以上四个全局函数利用视图类指针 用视图类的四个坐标转换函数,来完成坐标和长度的转换功能。如果在某个实现文件中使用这四个全局转换函数,只需在这个实现文件中的开始处加入全局函数的外部引用: x, y, X, Y); x, y, X, Y ); l); l); 在四个全局函数中, 向当前激活的视图对象。 一个在实现文件 现各类图形元素的绘制功能 利用虚函数实现各种图形元素的绘制功能。在图形元素基类 ,抽象定义一个进行绘制操作的虚函数。因为在应 用程序 用 直接来创建对象,所以可以将虚函数定义成纯虚函数: 8 0; 在各种图形元素类 ,重载虚函数 现视图 为了实现应用程序 图形绘制工作 ,在文档类 定义 数如下 : 武汉 科技学院 2005届毕业设计 (论文 ) 7 类图形元素几何属性的计算 以上定义的各类图形元素 ,除了坐标数据外 ,还有一些最基本的几何特征 ,其中最主要的两个特征是长度和面积 素的长度和面积 ,在图形元素基类 定义了两个虚函数 : ; ; 直线圆圆弧连续直线等图形元素都具有长度属性 中重载计算长度的虚函数 ; 图形元素圆和多边形区域具有面积属性 和 中重载 2 鼠 标交互绘图 鼠标绘图要解决的主要问题 获鼠标操作消息 提供了足够的窗口消息和已经保护的消息处理函数解决这个问题 实现鼠标交互绘制图形元素时 ,将主要用到以下三个鼠标操作 : 鼠标移动 : 下左键 : 下右键 : 捕捉所有的鼠标输入 在用鼠标交互绘制一个图形元素时 ,在已经开始绘图的情况下 ,不希望还能进行别的操作 ,以避免造成系统流程和变量初始化等方面的错误 提供了两个成员函数来满足以上的功能需求 : ; ; 屏幕上拖动图形 在用鼠标交互绘制图形元素时 ,为了直观的看到所绘制的图形 ,一般采用拖动图形的方法 . 存图形数据到文 档 用鼠标在屏幕上交互绘制的图形元素 ,要创建一个图形元素对象并将指向这个图形元素对象的指针保存起来 . 图形以实际的形态重画 武汉 科技学院 2005届毕业设计 (论文 ) 8 用鼠标交互绘制一个图形元素后 ,要在屏幕上马上显示出这个图形元素的实际形态 ,必须将图形元素以实际的形态重画 C+的 制模式下 ,线条不是彩色的 ,拖动的图形都不是用图形元素的实际颜色 在矢量图形系统设计中 ,一般采用 象 ,在交互绘制图形元素操作完成后 ,即时在视图中重画这个新增的图形元素 . 互绘制 各类图形元素 本设计主要实现交互绘制直线、圆、填充圆、圆弧、标注文本、连续直线、多边形区域、网络点的实现过程 . 入绘图菜单 增加菜单资源 . 在应用程序 菜单资源中 ,增加一个菜单 ” 鼠标绘图 ” 增加菜单的消息处理函数 cx, ; ; ; ; ; ; ; ; ; 在实现文件 增加了函数的消息映射机制 : 在实现文件 增加了消息处理函数的实现代码 . 得图形元素的唯一识别号 我们设计的矢量图形系统 ,对于任何一个图形元素 ,必须有一个能够与其他武汉 科技学院 2005届毕业设计 (论文 ) 9 图形元素区分开来的属性 ,为每类图形元素创建惟一识别号的方法如下所述 . 唯一识别号的范围 在应用 程序 ,将采用同类图形元素具有惟一识别号的方法 ,即每一类别的图形元素具有不同的成员变量 得到图形元素的惟一识别号 为了得到每类图形元素的惟一识别号 ,在文档类 定义一个成员函数 : b); 函数 参数 来表示图形类别 ,假如函数的实现代码 . 次完成对直线、圆、填充圆、圆弧、标注文本、连续 直线、多边形区域、网络点、网络连接的绘制 . 3 矢量图形系统的操作功能 1. 1 增加图形操作菜单 加菜单资源 加消息处理函数 在视图类 ,加入消息处理函数的定义 : ; ; ; ; ; ; 在实现文件 ,加入消息映射机制和空的消息处理函数形重画 所谓图形重画,就是把当前视图屏幕重新绘制一次,实际上也就是让视图类的函数 重新执行一次。根据需要重画区域的不同,图形重画可以分为全屏重画和局部重画。 武汉 科技学院 2005届毕业设计 (论文 ) 10 屏重画 5 在很多情况下,需要将当前视图屏幕全屏重画。两种方法如下: 在视图类函数的实现代码中,用以下代码来激活重画机制: ; 函数 属于当前文档对象的所有视图重画。如果应用程序采用的是单文档结构,系统只有一个视图,执行此命令时使这个视图失效并重画,即激发视图类的 行;如果应用程序采用的是多文档结构,一个文档对象可能具有多个视图, 使属于这个文档对象的所有视图都重新绘制。 在视图类函数的实现代码中,用以下代码激活重画机制: ; 数使当前视图屏幕的客户区失效,从而激活图形重画。只能使当前视图重画,而与其同文档的其他视图并不重画。 实现图形重画功能 要实现图形重画功能,需要对视图类 数进行修改。修改后的代码如下: ; ; 数首先得到指向当前文档对象的指针,然后调用数 部重画 在很多情况下,往往只希望将当前视图屏幕的一部分区域重画,即局部重画。在 中,以下两个函数可以完成此功能。 数的定义为 : 函数 使视图中一个指定的矩形区域重画。这个函数的调用方法与函数 似。参数 存储着视图中需要重画的区域,参数 于指定当区域重画时,背景是否擦除,当 ,背景被擦除,当 景保持不变。 数 数的定义为: 函数 功能和使用方法与函数 似,惟一不同的是函数 数 数可以使一个已经初始化的 象所指定的武汉 科技学院 2005届毕业设计 (论文 ) 11 区域重画。以下代码可使 形放大和摆动 图形放大指的是通过调整视图屏幕,使当前视图屏幕中的一部分区域放大显示到整个视图屏幕中。图形摆动指的是通过调整视图屏幕来显示图形的其他部分。 形放大和摆动的方法 图形放大 矢量图形系统应具有无级放缩的功能。所谓“无级”,指的是图形能以任何的比例进行显示。在应用程序 经建立的坐标系基础上,可以很容易实现图形的无级放大。实现图形放大的操作方法很多:如可以进行固定比例的图形放大,在这种放大方式下,用鼠标点中图形的一个点,系统会把图形放大一个固定的比例,鼠标按中点处于放大后的图形屏幕中心;再如可以通过窗口放大,在这种放大方式下,有鼠标在图形屏幕上选中一个窗口区域,系统会调整放大比例和屏幕基点坐标,把选中的区域正好放大到整个图形屏幕区域中。本设计将涉及到用窗口放大图形的操作方法和具体实现步骤。在此基础上,可以轻而易举的实现其他方法的图形放大操作功能。 图形摆动 图形摆动的实 现方法与图形放大类似,不同的只是在图形摆动操作时,对于图形屏幕只是参数 变化,比例尺 变。假定图形摆动时,图形从基点到目标点做相对移动 . 用变化后的 实现了图形摆动。 画上屏和重画首屏 图形经过放大、摆动操作后,还要有把图形屏幕再恢复到前一屏幕(重画上屏)或者直接使图形回到第一屏(重画首屏)的功能。要实现重画上屏和重画首屏的功能,就需要记录下每一屏幕的状态,并时刻跟踪着当前的状态。 录屏幕状 态 对图形屏幕进行分析就会发现,一个图形屏幕是由三个参数来确定的 :屏幕左下角原点的实际横纵坐标 显示比例 要记录下这三个参数,就可以记录下这一屏幕的状态。 为了实现记录屏幕状态的功能,在文档类 定义一个结构数组来存储历史图形屏幕。在 /当前屏幕的序号 /最多能存储的屏幕数 /记录屏幕参数的结构数组 结构 头文件 武汉 科技学院 2005届毕业设计 (论文 ) 12 /显示比例 /屏幕左下角横坐标 /屏幕左下角纵坐标 在文档类 定义一个函数,来完成存储一个图形屏幕状态的操作功能 : 在实现文件 ,加入函数的实现代码。 现重画上屏和重画首屏功能 重画上屏 要实现重画上屏操作功能,只需把 值减去 1,从结构数组 实现文件 ,将“重画上屏”菜单项的消息处理函数 实现代码修改如下: 5 ; if()/如果当前不是首屏,当前图形屏幕序号减 1 ; /重画图形 在视图类 在实现文件 重载的虚函数 它指向当前文档对象中的结构数组 ; 重画首屏 对于重画首屏功能来说,只要取出存储在结构数组 对视图重画即可。修改实现文件 的消息处理函数武汉 科技学院 2005届毕业设计 (论文 ) 13 到实现代码如下: /重画首屏 / ; if(0) ; 示全图 在矢量图形系统中,随着一些图形元素通过外部接口或者系统本身的绘制功能的加入,图形首屏可能包含不了所有的图形元素;还有一种情况是,图形中所有的图形元素都在视图屏幕的一个角上,只占图幅的一小部分。这是就需要一个操作功能,调整视图屏幕左下角原点的实际坐标( 显示比例 所有的图形元素正好能够绘制到视图屏幕中(在屏幕上留有一部分边界区域),显示全图功能就是为完成此功能而设置的。实现显示全图功能的思路是,通过得到每一类图形 元素(如直线、连续直线)的边界矩形,然后根据视图屏幕的大小(逻辑坐标)进行计算,得到屏幕的参数 决问题的关键在于得到各类图形元素的边界矩形。 类图形元素的边界矩形计算 5 在图形元素基类 中定义一个虚函数: 0; 函数 来计算图形元素的边界矩形,( *和 ( *这四个指针参数用来返回边界矩形的最小和最大坐标。 在由 派生的各个图形元素类中重载虚函数 在各个类中加入以下定义代码 : 并在各个图形元素类中实现代码,以完成计算各类图形元素边界矩形的功能。 现显示全图功能 得到所有图形元素的边界矩形 把所有图形元素的边界矩形坐标进行比 较,就可以得到所有图形元素的边界矩形。为了实现这个功能,在文档类 定义一个函数 : 武汉 科技学院 2005届毕业设计 (论文 ) 14 指针参数用来返回边界矩形的最小和最大坐标,当能计算得到边界矩形时,函数返回 则,函数返回 入这个函数的实现代码 在函数 ,首先对记录最小值和最大值的变量初始化,然后对所有的直线连续直线 圆圆弧标注文本多边形区域网络点等类图形元素进行循环,得到每个图形元素的边界矩形,并比较运算得到所有图形元素的边界矩形。当至少有一个图形元素时,函数返回 有任何图形元素时,函数返回 实现显示全屏功能 在得到所有图形元素的边界矩形后,就可以调整视图屏幕的基点和比例,使当前视图正好能够绘制下所有的图形元素。在实现文件 ,对菜单项“重画全屏”的消息处理函数 行修改: / ; ; ; pb= ; ; ( ( if(; ; 高矢量图形系统重画速度的基本方法。 高图形重画速度的方法 一个基本的方法就是在显示一个图形元素前,对这个图形元素进行判断,判断这个图形元素是否在视图屏幕中,如果这个图形元素不在当前的视图屏幕中,武汉 科技学院 2005届毕业设计 (论文 ) 15 就不用对这个图形元素进行绘制,以此节省绘制时间。 我们采用的计算方法应该是计算简单且允许不太严密。这里所谓的不太严密,指的是用这种方法判断
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。