基于MapGIS开发批量修改图形属性探讨 下载本文

内容发布更新时间 : 2024/11/16 12:02:46星期一 下面是文章的全部内容请认真阅读。

基于MapGIS开发批量修改图形属性探讨

摘要: 本文阐述了基于MapGIS开发批量修改图形属性必要性与重要性;分析了MapGIS软件二次开发方法及VC++语言的优势;剖析了属性统改的数学算法;文章给出了程序实现的具体流程图,并列出了各模块部分典型代码;希望能给广大同僚起到抛砖引玉的作用。

关键词: MapGIS,二叉树算法,属性统改,二次开发

根据国土资源部、农业部《关于划定基本农田实行永久保护的通知》(国土资发〔2009〕167号),《关于加强和完善永久基本农田划定有关工作的通知》(国土资发〔2010〕218 号)文件精神,严格落实自治区新一轮土地利用总体规划确定的基本农田保护目标,全区基本农田划定面积得少于《广西壮族自治区土

地利用总体规划(2006-2020 年)》确定的基本农田保护任务,确保国家粮食安全,维护社会稳定。优化全区基本农田结构和布局,实现基本农田保护与建设并重、数量与质量并重、生产功能与生态功能并重。建立规范齐全的基本农田保护档案和基本农田数据库,实现基本农田信息化动态管理,全面提升基本农田保护水平[1]。

然而在基本农田划定的工作中,广西大多数县份使用MapGIS软件制图与建立数据库,在数据的处理过程中,经常要批量修改各文件属性字段。笔者在实际的工作中发现,MapGIS软件不能很好的支持批量修改多文件属性,只能单一的修改单文件属性,如单一的WT、WL与WP文件,这给基本农田划定项目带来了沉重的工作量。基于此,笔者结合自身多年的制图经验,基于MapGIS开发批量修改图形属性程序,在现阶段具有一定的理论与实际意义。

1 MapGIS二次开发

MapGIS软件二次开发语言主要有VC++与VB两种方式,本文主要阐述VC++结合MapGIS类库的开发方式。

1.1 VC++

Microsoft Visual C++是Microsoft公司推出的开发Win32环境程序,面向对象的可视化集成编程系统。它不但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等优点,而且通过简单的设置就可使其生成的程序框架支持数据库接口、OLE2,WinSock网络、3D控制界面。它以拥有“语法高亮”,IntelliSense(自动完成功能)以及高级除错功能而著称。比如,它允许用户进行远程调试,单步执行等。还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。其编译及建置系统以预编译头文件、最小重建功能及累加连结著称。这些特征明显缩短程式编辑、编译

及连结花费的时间,在大型软件计划上尤其显著

Microsoft Visual C++是一个功能全面的工具集,可为个人或团队简化应用程序开发过程,支持交付可扩展的高质量应用程序。无论是编写代码、构建数据库、测试还是调试,您都可以使用能够按照你的方式工作的强大工具来提高工作效率。Microsoft Visual C++是一个综合性的应用程序生命周期管理工具套件,可供团队用于确保从设计到部署的整个过程都能取得较高质量的结果。无论是创建新的解决方案,还是改进现有的应用程序,Visual Studio 2012 Ultimate 都能让您针对不断增加的平台和技术(包括云和并行计算)将梦想变成现实。

1.2 MapGIS二次开发

(1)MapGIS开发概述

MAPGIS二次开发函数采用匈牙利命名法,即动宾结构命名法,并且所有函数都以下横线开始,以便和Windows函数以及其他语言函数明显区别开来,_GetLin表示取线实体;在Visual Basic环境下,由于Visual Basic语言不能识别以下横线开始的函数名,所以库函数都以字母b开始,如bGetLin表示取线实体[3]。

上述动态函数库提供了从最基本数据单元的读取、保存、更新和维护到MAPGIS地图库的建立和漫游,以及空间分析,图象处理等一系列功能,MAPGIS应用程序可以根据需要在任何层次上进行开发。除了上述 API函数外,MAPGIS还为基于MFC(Microsoft Foundation Class)的开发者提供多个可重用基类,将应用程序所需的常见基本功能作了封装,使用便利,改动灵活。

MAPGIS正在向组件化迈进,已推出一系列组件,这将使得二次开发更为快捷便利。但与此同时MAPGIS仍将不断完善其API函数库,以多种开发手段满足不同层次、不同应用的

需求。

(2)MapGIS数据组织

MAPGIS数据管理的核心就是对工作区的操作。 工作区是MAPGIS提出的一个概念,简单地说,工作区就是一个数据池,存放实体的空间数据、拓扑数据、图形数据和属性数据,每个工作区都对应于一个MAPGIS数据文件。MAPGIS开发函数库提供对工作区实施操作的一系列函数,如将工作区中的内容存盘,从盘上将数据装入工作区,对工作区中内容进行添加、修改、删除、检索等等。对硬盘数据的存取及虚拟内存的管理等等复杂繁琐的工作无需应用程序的编写者去关心,而是由MAPGIS工作区管理模块自动完成。

2 程序结构算法

本文程序实现的数学算法为二叉树遍历算法,所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问 题。 遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。

(1)遍历方案

从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成[2]。因此,在任一给定结点上,可以按某种次序执行三个操作:

⑴访问结点本身(N),

⑵遍历该结点的左子树(L),

⑶遍历该结点的右子树(R)。

以上三种操作有六种执行次序:NLR、LNR、LRN、NRL、RNL、RLN。

二叉树根据访问结点操作发生位置命名:

① NLR:前序遍历(PreorderTraversal亦称(先序遍历))

——访问根结点的操作发生在遍历其左右子树之前。

② LNR:中序遍历(InorderTraversal)

——访问根结点的操作发生在遍历其左右子树之中(间)。

③ LRN:后序遍历(PostorderTraversal)

——访问根结点的操作发生在遍历其左右子树之后。

(2)遍历算法

① 中序遍历的递归算法定义:若二叉树非空,则依次执行如下操作:

⑴遍历左子树;

⑵访问根结点;

⑶遍历右子树。

② 先序遍历的递归算法定义:若二叉树非空,则依次执行如下操作: