基于MapGIS开发宗地界址线边长标注探讨

时间:2022-10-07 03:36:50

基于MapGIS开发宗地界址线边长标注探讨

摘要: 本文叙述了基于MapGIS开发宗地界址线边长标注的紧迫性;论述了MapGIS软件存在弊端;简述了MapGIS二次开发方式与宗地界址线边长标注的算法;剖析了程序开发的总体流程图;文章给出了程序实现的算法代码;希望能给广大同行带来一定的理论与实践意义。

关键词: MapGIS,界址法标注算法,二次开发,VC++

中图分类号: F124 文献标识码: A

近年来随着我国改革开放的不断深化,我国经济得到了快速有序的发展,全国各地城市建设规模不断扩大,城区、建制镇及村庄土地利用现状都发生了很大变化,原有的地籍图件资料已无法满足地籍、地政管理工作的需要,影响了国土资源管理工作的正常开展。为贯彻落实国土部关于开展村庄地籍调查的要求,满足我国农村宅基地发证的需要,各县(市)国土资源局集中开展全县村庄地籍调查工作,即农村宅基地调查[1]。

农村宅基地权属调查的基本单元是宗地。界址调查是权属调查的核心,也是地籍调查的核心工作,界址调查是指对相邻双方的界址情况进行实地调查,经邻界双方认可,并经有关部门审核后,作为土地登记的依据。然而由于调查过程复杂以及诸多不确定性因素对地籍调查作业的影响,如何提高调查测量与成图效率,尽量减少地籍测量内业成图时间,及时完成地籍调查宗地图工作,使土地登记工作真正做到实处是当前所必须解决的关键问题。本文基于MapGIS开发宗地界址线边长的自动标注,希望能给广大同行带来抛砖引玉的作用。

1 MapGIS软件

MapGIS软件具有以下特点:

(1)采用分布式跨平台的多层多级体系结构,采用面向“服务”的设计思想。

(2)具有面向地理实体的空间数据模型,可描述任意复杂度的空间特征和非空间特征,完全表达空间、非空间、实体的空间共生性、多重性等关系。

(3)具备海量空间数据存储与管理能力,矢量、栅格、影像、三维四位一体的海量数据存储,高效的空间索引。

(4)采用版本与增量相结合的时空数据处理模型,“元组级基态+增量修正法”的实施方案,可实现单个实体的时态演变。

(5)具有版本管理和冲突检测机制的版本与长事务处理机制。

(6)基于网络拓扑数据模型的工作流管理与控制引擎,实现业务的灵活调整和定制,解决GIS和OA的无缝集成。

(7)标准自适应的空间元数据管理系统,实现元数据的采集、存储、建库、查询和共享,支持SRW协议,具有分布间索能力。

(8)支持真三维建模与可视化,能进行三维海量数据的有效存储和管理,三维专业模型的快速建立,三维数据的综合可视化和融合分析。

(9)提供基于SOAP和XML的空间信息应用服务,遵循Opengis规范,支持WMS、WFS、WCS、GLM3。支持互联网和无线互联网,支持各种智能移动终端。

MapGIS软件虽然具有以上种种优点,但在宗地图界址线边长标注上,还存在着注记压盖,字体大小不一,标注位置偏移宗地等种种不足。基于MapGIS开发宗地界址线边长的自动标注,能在宗地图的制作方面大大提高生产效率。

2开发工具及算法

2.1 开发方式

目前MAPGIS二次开发库主要以API函数、MFC(Microsoft Foundation Class)类库、Com组件、ActiveX 控件四种方式提供。开发库被封装在若干动态链接库(DLL)中。API函数在使用方法上与Windows的API函数完全一样,因此是独立于开发工具的。无论您使用VC++、VB还是BC++、Dephi…,您在这些工具中如何调用Windows的API函数,您就可以怎么调用这些二次开发函数。MAPGIS类库是为基于MFC类库的C++开发者提供的多个可重用基类,它将应用程序所需的常见基本功能作了封装,使用便利,改动灵活。开发者只需从类库派生即可使自己的程序获得从窗口显示控制到图形查询编辑的各项功能。MAPGIS COM组件是MAPGIS新一代体系结构的表现,功能更加强大,使用更加便利。具有二次开发方便、易于集成、无限扩展等特点。支持多种开发软件,包括Visual C++、Visual Basic、Delphi、script、InterDev、Power Builder等,开发者可以多层次的访问MAPGIS组件的数据层、功能层和界面层。ActiveX 控件是MAPGIS完成组件化改造的成果之一,它们使得二次开发更为快捷便利,代码的可复用性更高[2]。

上述各类开发接口提供了从最基本数据单元的读取、保存、更新和维护到MAPGIS地图库的建立和漫游,以及空间分析,图象处理等一系列功能。其中,API函数是基础,使用上最灵活,但技巧性要求也最高。所以采用C++ API函数开发。

2.2 宗地边长标注算法

基于MapGIS开发宗地界址线边长标注采用拓扑排序算法。简单地说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序[3]。

离散数学中关于偏序和全序的定义如下:若集合X上的关系R是自反的、反对称的和传递的,则称只是集合X上的偏序关系。设R是集合X上的偏序(Partial Order),如果对每个x,y∈X必有xRy或yRx,则称R是集合X上的全序关系。

直观地看,偏序指集合中仅有部分成员之间可比较,而全序指集合中全体成员之间均可比较。如图1所示的两个有向图,图中弧(x,y)表示x≤y,则(a)表示偏序,(b)表示全序。若在(a)的有向图上人为地加一个表示v2≤v3的弧(符号“≤”表示v2领先于v3),则(a)表示的亦为全序,且这个全序称为拓扑有序(Topological Order),而由偏序定义得到拓扑有序的操作便是拓扑排序。

图1 拓扑排序算法

AOV-网及其拓扑有序序列产生的过程为:(a)AOV-网;(b)输出v6之后;(c)输出v1之后;(d)输出v4之后;(e)输出v3之后;(f)输出v2之后。

3 开发流程图

基于MapGIS开发宗地界址线边长标注的流程图如图2所示:

图2基于MapGIS开发宗地界址线边长标注流程图

4 程序代码

4.1 拓扑算法模块

拓扑算法模块的部分程序代码如下所示:

void AddStru::OnAdd()

{ BROWSEINFO bi;

char buffer[MAX_PATH];

ZeroMemory(buffer,MAX_PATH);

if((pList=SHBrowseForFolder(&bi))!=NULL)

{char path[MAX_PATH];

ZeroMemory(path,MAX_PATH);

SHGetPathFromIDList(pList,path);

GetDlgItem(IDC_EDADD)->SetWindowText(path);

} }

4.2 宗地边长标注模块

宗地边长标注模块的部分程序代码如下所示:

strfilename="XZQJX.WL";

GetDlgItem(IDC_EDADD)->GetWindowText(strpath);

m_filelist.ResetContent();

if(strpath.Left(1)=="")

{ AfxMessageBox("你没有选择文件!");

return;

}

FindFile(strpath);

for(i = 0; i < m_filelist.GetCount(); i++)

{ m_filelist.GetText(i,tmp);

addXJQJXstru(tmp);

}

4.3 拓扑检查模块

拓扑检查模块的部分程序代码如下所示:

short XZQJXAi = _OpenFileArea(aHinst,(LPTSTR)(LPCTSTR)strPath00);

_StartClockCursor();

_GoingClockCursor();

_InsertStruFld(XZQJXAi,LIN,5,fld,2);

_SetPackFlag(XZQJXAi,1);

_EndClockCursor();

5 小 结

本文通过VC++结合MapGIS API函数开发了实现了地籍调查中宗地图界址线边长的自动标注。本文所提出的程序思路和所开发的应用程序,在实际生产工作中得到较好的验证。该软件极大提高了宗地图的成图效率,减少了重复工作量、缩短了宗地图作业的时间。

参考文献

[1] 樊志全. 地籍调查[M]. 北京:中国农业出版社,2005. [2] 钟宝琪,谌作霖. 地籍测量[M]. 武汉:武汉测绘科技大 学出版社,1996.

[2] 中地软件丛书编委会.MapGIS二次开发培训教程(c++版)[M].武汉:中地公司,2001.

[3] 乔仰文, 郭昆林, 王晓辉. 基于AutoCAD数字地籍图测 绘的简易方法[J]. 测绘通报,2000,11(7)

:10-14.

上一篇:基于单线隧道开挖工后沉降预测的研究 下一篇:机械振动焊接对残余应力的影响机理分析