APP下载

基于MapGIS K9的城镇地籍数据库建库设计研究

2013-12-31汪民主

科技资讯 2013年12期

摘 要:本文基于笔者多年从事地籍数据库建设的相关工作经验,以地籍数据库建设中需要二次开发提高数据质量的数据检查关键技术为研究对象,探讨了基于VC6.0++和MapGIS SDK6.7开发城镇地籍数据库的属性值检查程序的技术途径,全文是笔者长期工作实践基础上的理论升华,相信对从事相关工作的同行能有所裨益。

关键词:地籍数据库 矢量数据 属性数据 拓扑检查 MapGIS ArcGIS

中图分类号:P27 文献标识码:A 文章编号:1672-3791(2013)04(c)-0030-02

城镇地籍数据库的建设任务是在城市建成区和县所在地建制镇建成区范围内,建立包括土地利用、土地权属、基础地理等内容,集影像、图形、属性和文档于一体的数据库及管理系统。主要内容包括基础地理信息数据、土地权属数据、土地利用数据、栅格数据、元数据、表格、报告文本、扫描文件等。

本文所使用的地籍数据库由MapGIS二次土地调查数据库建库系统(城镇版)(以下简称建库系统)来建设,其数据格式为MapGIS的.WP(区文件)、.WL(线文件)、.WT(点文件)。建库的操作流程软件帮助中都有详细说明,本文不再赘述,本文主要探讨建库中需要进行二次开发才能满足需求的关键技术实现思路。

在建库系统中自带了数据检查功能,基本满足属性数据和几何数据的检查,利用该检查模块可作为地籍数据库的初检。为了提高产品质量,还应进行第二次检查,这就必须要求用另外一种方法来对该地籍数据库进行复检,本文正是在此情况下开发了一套复检的方法。

1 城镇地籍数据库检查内容

依据《第二次全国土地调查数据库建设技术规范》中的规定,城镇地籍数据库的检查主要涉及矢量数据检查、属性数据检查、矢量数据与属性数据一致性检查、其它数据检查等4大项,以下又分了共计10个小项。鉴于以上说提及的后两项检查相对容易,故本文主要讨论的复检方法集中在前2项。

1.1 矢量数据检查

主要内容为线段是否自相交、两线相交、悬挂点、伪结点;多边形是否闭合、各多边形间的拓扑关系是否正确(如房屋应包含在宗地内),线点拓扑关系是否正确(如界址点应在界址线上)等。

1.2 属性数据检查

主要内容是属性是否齐全、各要素层属性结构是否符合标准要求,属性值是否为空、是否满足值域要求等。

2 拓扑检查

2.1 数据准备

因本文原始建库数据为MapGIS格式,而本文中的拓扑检查均在ArcGIS中完成,故需要将MapGIS数据转换为ArcGIS的shp格式。

转换使用了Map2Shp软件,该软件能够批量转换MapGIS的点、线及区文件,且能在转换过程中保证属性结构和几何精度与原数据一致。本文主要针对宗地(QSZT.WP)、房屋(FW.WP)、地类图斑(DLTB.WP)以及行政区(XZQ.WP)四者内部及其相互之间做了拓扑检查,故本文仅转换这4个图层(如图1)。

2.2 拓扑检查规则

为了顺利完成矢量数据的拓扑检查,需提前制定相关的拓扑检查规则,本文依据《第二次全国土地调查数据库建设技术规范》中的相关检查要求及重要程度,本文给出了如下拓扑检查规则,见表1。

2.3 拓扑检查步骤

(1)对转换的shape数据定义坐标单位。执行ArcToolbox→Data Management Tools→Projections and Transformations→Define Projection。在打开的Spatial Reference Properties对话框中选择Modify,修改坐标单位为Meter,其它不变。

(2)对转换的shape数据进行修复。执行ArcToolbox→Data Management Tools→Features→Repair Geometry。在打开的Repair Geometry对话框中选择待修复的shape文件进行修复。

(3)新建拓扑规则并验证。新建Personal Geodatabase→新建Feature Dataset→在Feature Dataset中导入修复好的shape文件→新建Topology→选中要进行拓扑检查的要素→在New Topology对话中通过Add Rule按照2.2中表1的描述添加规则(见图2)→执行validate即可对所添加规则的进行拓扑检查→在拓扑检查结果上右击打开Properties对话中的Errors→点击Generate Summary即可查看拓扑检查的错误个数(也可以打开ArcMap导入拓扑检查结果并加载拓扑检查所使用的要素来查看拓扑错误),如图3。

3 属性检查

3.1 空间要素属性结构

本文对建库所涉及的空间要素均做了属性检查,包括测量控制点(CLKZD)、行政区(XZQ)、宗地(QSZT)、地类图斑(DLTB)、房屋(FW)等。检查内容为属性表名是否符合标准、属性结构是否符合标准(包括字段类型、字段长度、小数位数)、必填项是否为空、值域是否正确。

3.2 属性检查程序设计

本文使用VC++6.0和MapGIS SDK6.7二次开发了城镇地籍数据库属性数据的检查功能。本文中首先运用VC++6.0创建了一个基于MFC的单文档类型工程,然后在此基础上进行MapGIS的二次开发。

3.2.1 VC++6.0中的设置

(1)工具→选择→目录标签,在显示目录Include files指示的路径框中输入如下内容:D:\mapgis67\include;在显示目录Library files指示的路径框中输入:D:\mapgis67\Lib。(2)工程→设置→C/C++标签→分类栏中选择Code Generation→将Struct member alignment设置为1 Byte。(3)工程→设置→General标签,将输出文件设置为:D:\mapgis67\program。

3.2.2 修改基类

本文使用了MapGIS的CPrjEditView类,该类继承了CGisEditView类,它集成了对工程文件进行编辑处理所必须的数据对象方法,具有对整个工程文件中各个工作区的编辑处理功能。

该类的具体使用方法如下:(1)将原视图类中的xzqView.h和xzqView.cpp所涉CView全部替换为CPrjEditView;(2)在xzqView.h中第一个#endif后换行输入:#include "CPrjEdit.h";(3)在xzqView.h

的OnDraw函数中添加如下代码:CPrjEditView::OnDraw(pDC)。

3.2.3 检查程序

由于实现该检查的代码繁多,本文简要说明一下检查程序的流程以及主要用到的MFC函数及MapGIS函数。

1)属性表名检查。在选择待检查要素对话框中选中文件后即可实现属性表名的检查,通过MFC提供的相关函数即可实现,如下:CFile file(Dlg.GetFileName(),CFile::modeCreate | CFile::modeWrite)。

(2)打开并加载待检查的要素。使用的函数为:_OpenArea(AREA_HINST, short type), _LoadAFile(char * datName, short ai), _AppendArea(short ai)。

(3)属性结构检查。使用的类有CATT_

STRU、CFIELD_HEAD以及CINFO_HEAD;使用的函数为_GetAttStru(short ai,short type,ATT_STRU **stru),通过该函数可获取CATT_STRU类的实体fldEntry[i],通过该实体,有可获得其fieldname和fieldtype属性,通过该该两项值即可实习属性结构的检查。

(4)属性值检查。使用的类有CATT_STRU,使用的函数为_GetAtt(short ai,short atype,long i,ATT_STRU **stru,char **att),_GetField(char *att,ATT_STRU *stru,char *fldName,char *fldBuf, long bufLen,short *isBlank),通过判断获取值的长度是否小于0,据此推知必填项是否已经填写。

3.2.4 检查结果输出

本文通过读写.txt文档来实现检查结果的输出,关键代码表述如下:CFile fileWrite;fileWrite.Open(m_OutFile,CFile::modeWrite|CFile::shareDenyRead); fileWrite.WriteHuge(writeWords,strlen(writeWords))。

3.3 程序运行结果

程序运行结果见图4,结果中会对属性表名是否为标准属性表名给予提示;对属性结构的检查,会将非标准字段类型、字段长度及小数位数的总数进行统计;对属性值的检查会给出具体的空置图形ID号,如所有必填字段均已填写,则不会报错。

4 结论

独立于MapGIS建库系统的数据检查为数据质量提供了第三方的认定,从而提高了数据成果的质量,通过自编的程序实现了城镇地籍数据的属性数据检查,减轻了人工进行属性检查的劳动强度,提高了工作效率;运用ArcGIS的拓扑检查功能,可提高矢量数据的拓扑检查质量。

参考文献

[1]洪波.地籍与房产测量[M].北京:测绘出版社,2010.

[2]城镇地籍数据库标准[TD/T1015-2007],中华人民共和国土地管理行业标准[S].北京:中国标准出版社,2008.