李旺民,陈 胜,黎 彬,丁建勋
(1.珠海市测绘院,广东 珠海 519000;2.湖南省第三测绘院,湖南 长沙 410007)
一种高集成度土地勘测定界数据处理方法
李旺民1,陈 胜2,黎 彬1,丁建勋1
(1.珠海市测绘院,广东 珠海 519000;2.湖南省第三测绘院,湖南 长沙 410007)
结合生产实践经验,基于GDAL/OGR矢量数据处理库、NPOI技术等,提出了一种自动化、高集成度的勘测定界数据处理方法。该方法与传统数据生产处理方式相比,在生产效率、数据质量等方面均有很大程度的提升。通过测绘作业部门生产实践,验证了该方法的实用性和可靠性。
土地勘测定界;高集成度;GDAL/OGR;dxf;NPOI
合理利用每寸土地,切实保护耕地是我国的基本国策。及时、准确地掌握各类土地数据特别是建设用地批准数据也是土地资源规划管理的基本手段[1]。对建设用地的许可审批,我国采用建设用地审查报批的方式。其核心内容包括:建设用地是否符合土地利用总体规划,选址是否符合合理用地和集约用地原则,土地权属、位置、范围、地类、面积是否清楚、准确,是否涉及占用非规划建设用地,申请用地涉及突破土地利用规划的,其相关理由是否充分、土地利用规划变更及耕地占补平衡等工作是否完成等,这些内容主要由勘测定界测绘完成[2]。通过先进的地理信息技术,改造测绘作业流程,形成科学、规范、高效的测绘数据生产解决方案,对提高测绘作业生产自动化程度,提升测绘在土地勘测定界方面的保障能力具有重要意义[3]。
土地勘测定界的内业数据处理工作主要包括土地利用分类和面积汇总、土地勘测定界图编绘、土地勘测定界报告书撰写、电子报盘数据制作、土地利用现状图及规划图编制等内容,如图1所示。土地利用分类和面积汇总是土地勘测定界内业数据处理中一项重要工作,其地类统计结果是土地勘测定界报告书和电子报盘数据的基础数据;提取的地类图斑线是土地勘测定界图的专题底图,涉及地类图斑线的提取、编绘与格式转换。传统作业方式主要依靠人工来计算和统计,需对图形文件进行多次格式转换,不仅费时费力,容易出错,而且对土地的报批进度和质量有一定影响。可见传统的土地勘测定界内业数据处理方式需要依托多种软件,存在数据汇总、报告编制、电子报盘制作方面集成度不高等缺点。针对传统作业方式的局限性,本文从分析土地勘测定界数据处理流程入手,发现和提取内部规律,以Visual Studio 2005为开发平台,运用C++、C#等多种开发语言,充分利用GDAL/OGR矢量数据处理库、NPOI技术等,设计和研发了一种自动化、高集成度的勘测定界数据处理方法,以提升土地勘测定界数据处理效率,优化作业流程,提高成果质量。
图1 土地勘测定界内业数据处理现状分析
2.1 设计思路
实现勘测定界内业数据处理的自动化和集成化,确保计算正确性,提高生产效率,需从数据录入、数据处理、数据输出3方面进行设计与实现,流程见图2。实现步骤如下:
1)将用地坐标按照“点号+地块圈号+X坐标+ Y坐标”的格式(同电子报盘txt数据中“地块坐标”格式)编辑为txt文本,作为原始数据,将其导入、转化并输出为shp和dxf图形数据;
2)将生成的用地范围图形数据与作业员选择的土地利用现状、规划数据库进行叠加处理,获取用地的土地利用现状和规划地类信息,提取并输出用地的土地利用现状和规划地类图斑线,自动标注对应的图斑信息,同时按土地利用类型分别统计地类面积并输出地类面积统计表;
3) 结合作业员录入的项目用地信息,输出电子报盘数据(建设项目用地坐标文件)。
图2 土地勘测定界内业数据处理流程图
2.2 关键技术与程序实现
2.2.1 文本数据读取并转化为shp格式
原始用地坐标数据为文本数据,需转换为shp格式数据,以其坐标形成几何图形,并修正其中的拓扑错误,将项目信息存入shp属性表。该部分核心代码如下:
pFeature = OGRFeature::CreateFeature(destLayer->GetLayerDefn());
pFeature->SetField("界址点数", lbs[i].DianShu);
pFeature->SetField("地 块 面 积", lbs[i].MianJi.c_ str());
pFeature->SetField("地块编号", lbs[i].BianHao.c_ str());
pFeature->SetField("地块名称", lbs[i].MingChen.c_ str());
pFeature->SetField("图形类型", lbs[i].TuXingLei Bie.c_str());
pFeature->SetField("图幅 号", lbs[i].TuFuHao.c_ str());
pFeature->SetField("地块用途", lbs[i].YongTu.c_ str());
pFeature->SetField("地类编码", lbs[i].DiLeiBianMa. c_str());
pFeature->SetField("描述", lbs[i].MiaoShu.c_str());
2.2.2 矢量图形的读写与拓扑计算
GDAL是一个专门对栅格空间数据进行读取、转换、编辑等操作的开源库,OGR是GDAL项目的一个分支,功能与GDAL类似,提供对矢量数据的支持与操作。GDAL/OGR作为一个优秀的开源库,提供了标准的二次开发接口,包括读取、写入、转换、处理多种栅格/矢量数据格式,同时它提供完全公开的源代码,为用户进行二次开发和底层功能扩展提供了很高的起点[4]。该方法采用GDAL/OGR矢量数据处理库对矢量图形进行读写与拓扑计算。
其实现步骤为:打开mdb格式的土地利用数据库,按行政区划识别图层,并把该图层数据读入内存,以用地范围与现状、规划图层进行拓扑运算,将用地范围内的现状、规划图斑提取并保存为一个shp文件。该部分核心代码如下:
//打开红线图层
shpDriver = OGRSFDriverRegistrar::GetRegistrar()->GetDriverByName(shpDriverName);
crdDS = OGRSFDriverRegistrar::Open(CString2strin g(crdShpPath + _T(".shp")).c_str(), FALSE, &shpDriver);
OGRLayer* crdLayer = crdDS->GetLayerByName(C String2string(crdShpLayer).c_str());
//创建裁切后的图
destDS = shpDriver->CreateDataSource(CString2strin g(tempDir).c_str());
OGRLayer* destLayer = destDS->CreateLayer(CStrin g2string(curShpLayer).c_str(), srcLayer->GetSpatialRef(), srcLayer->GetGeomType());
//进行裁切
srcLayer->Clip(crdLayer, destLayer, papszOptions);
2.2.3 输出用地范围、地类图斑线为dxf文件
dxf绘图交换文件是Autodesk公司开发的用于AutoCAD与其他软件进行数据交换的CAD数据文件格式,是AutoCAD图形文件中包含所有信息的一种带标记数据的表示方式。dxf是一种开放的矢量数据格式,可分为ASCII格式和二进制格式2类,ASCII格式具有可读性好的特点。笔者根据AutoCAD软件的帮助中dxf描述文档,编写代码对ASCII格式dxf进行解析和读写操作,不依赖AutoCAD软件或其他第三方库,使得软件的运行、分发都极为简单、方便。
输出用地范围、地类图斑线为dxf文件的实现步骤为:首先在CAD中生成dxf文件模板,包含必要的图层定义、字体定义和块参照定义,再把文件模板另存拆分为dxf头文件和dxf结束文件。在输出用地范围、地类图斑线时先输出dxf头文件,再根据数据内容输出图元,最后输出dxf结束文件,并保存。输出地类图斑线核心代码如下:
2.2.4 地类面积分类统计与报表输出
POI是一个开源的基于.NET平台的读写Excel、Word等微软OLE2组件文档的项目,可在没有安装Office或相应环境的机器上对 Word/Excel文档进行读写。NPOI是基于.NET用C#开发,主程序是用C++开发,然而用C++进行.NET软件开发并不便捷,所以用C#将报表输出功能封装成DLL,以在主程序中进行调用的方式实现报表输出。该部分核心代码如下:
2.3 应用示例
以珠海市某道路的勘测定界测量为例,该道路长度为10余km,分为若干地块,用地情况较复杂。数据处理主界面如图3所示。通过成果输出模块,可输出地类面积分类统计表(Excel格式,如图4)、用地范围图形文件(shp、dxf格式)、地类图斑线文件(dxf格式,如图5),电子报盘文件(txt格式)等数据成果,经生产验证,成果数据正确无误。
图3 数据处理主界面
图4 地类面积分类统计表示意图
P208
B
1672-4623(2016)05-0109-03
10.3969/j.issn.1672-4623.2016.05.034
2015-12-07。
项目来源:国家自然科学基金资助项目(91224008)。