GIS软件中的交互式绘图设计与实现


一、概述

交互式绘图,我的理解就是用鼠标去进行图形绘制。

在GIS软件开发与设计中,经常会用到交互式绘图,例如ARCGIS等软件都有非常复杂的人机交互功能。交互式绘图在GIS可以说占据比较重要的位置。

相关阅读:GIS中要素的捕捉以及C++实现

二、图元的面向对象建模

交互式绘图中,其实都可以将绘图的元素看做基本图元,如文字、点、线段、折线、多边形、椭圆、圆以及弧段等。为了对这些图元进行表达表达,可以用面向对象的思想来进行建模。首先,可以用一个抽象基类代表所有的图元类,抽象基类中有Draw方法,而上述的具体图元类都继承自这个抽象基类,并且必须要实现Draw方法以完成自身的绘制。其详细的类图如下:

GIS软件中的交互式绘图设计与实现

三、交互式绘图工具构造

假如系统开发采用MFC单文档视图结构,地图一般都是显示在视图中,对地图操作就转变为对视图中的操作。如果,针对每一种地图操作在视图类中都写一个消息响应函数,那么随着应用程序的不断膨胀,视图类的代码页会不断膨胀,最终造成代码臃肿,不好管理,增大开发与维护人员的负担。针对存在的这种情况,可以将地图操作抽象为一个工具,在这里,我将其称为MapTool,该类可以捕获到视图类的消息响应,而要实现某一个具体操作,就只要继承这个类,实现响应的消息响应函数就可以实现对地图的操作,这样界面和逻辑之间的耦合性就会大大降低,也降低了维护的成本。比如说,在地图浏览中,我们常常用到拉框放大,平移等功能;在标绘功能中,有绘制矩形、折线、多边形、圆等图形。将这些一个个的操作封装在一个单独的类中,降低模块之间的耦合性。这部分的设计可以采用桥接模式或者命令模式来实现。

四、交互式绘图举例

讲到了绘图工具的构造以及图元的建模,为什么还没有讲如何绘制的,别急,下面就开始讲。

1、矩形和圆形

为什么将这两个图像放在一块讲,主要是因为这两者的绘图方法都是一样的,首先,左键按下,然后是移动鼠标产生动态图形,最后是鼠标弹起完成图形的绘制。关于动态矩形绘制可以见我的另一篇博文  。

下图是绘制的具体实例。

GIS软件中的交互式绘图设计与实现

下面是放大的图。

GIS软件中的交互式绘图设计与实现

上述这两幅图是在遥感影像上面绘制的,并且随着拉框放大之后,图形还显示在屏幕上,这时因为我在绘制完矩形之后将其加入到临时绘制层中,所以随着地图的操作还停留在视图中。当然,你还可以进行图元选取等操作。

2、多边形

关于多边形的动态绘制就是鼠标左键确定第一个点,然后鼠标在移动过程中绘制动态多边形,当再次按下鼠标左键后确定第二个点,然后以此类推。最后完成多边形的绘制。

GIS软件中的交互式绘图设计与实现

五、后记

今天就写这么多,关于交互式绘图的内容还有很多,本文也只是起到抛砖引玉的作用,欢迎大家一起来讨论GIS软件设计中的各个方面。

相关内容