基于AutoCAD的土地整理规划算法设计与应用
2014-03-22陈强瞿巍乔永鑫李先林陈龙高
陈强+瞿巍+乔永鑫+李先林+陈龙高
摘 要:土地整理规划设计的内容比较广,不仅需要强大的矢量化和绘图功能,还需要涉及土地利用的各种属性数据的查询与统计功能,传统的方法主要通过AutoCAD和MapInfo或ArcGIS等软件进行操作,这种方法需频繁进行不同数据格式之间的转换工作,从而大大降低了土地整理规划的效率。为克服这一问题,该文应用VC++结合ObjectArx对AutoCAD进行二次开发,并最终在AutoCAD中实现对各种土地利用信息的查询、统计等操作以及土地整理相关工程量的计算等功能。
关键词:土地整理规划;AutoCAD;系统设计;土石方量计算
中图分类号 F321.1 文献标识码 A 文章编号 1007-7731(2014)05-08-03
土地整理是实现耕地总量动态平衡,推进土地节约、集约利用的重要途径之一[1-2]。我国是一个人口多、耕地少、耕地总体质量差、耕地后备资源不足的发展中国家。近年来,我国人口不断持续增长,耕地不断减少,人地矛盾越发突出[3]。因此,进行土地整理,增加农用地面积,特别是耕地面积,提高农用地质量,对推动我国经济发展、稳定社会秩序具有重要意义。
实施土地整理项目前必须做好项目规划设计工作。土地整理的规划设计涉及的内容比较广,不仅需要强大的矢量化和绘图功能,还需要涉及土地利用的各种属性数据的统计功能[4],传统的方法主要通过AutoCAD和MapInfo、MapGIS或ArcGIS等软件进行操作,这种方法常常需频繁进行不同数据格式之间的转换工作,从而大大增加了土地整理规划的工作量,降低了土地整理规划的效率。为了克服这一不足,本文设计应用VC++结合ObjectArx对AutoCAD进行二次开发,并最终在AutoCAD中实现对各种土地利用信息的查询、统计等操作以及土地整理相关工程量的计算等功能。ObjectArx编程是一种动态链接库(dll)编程,其生成的动态链接库文件在AutoCAD程序调用时被加载,与AutoCAD应用程序共享地址空间,可以直接访问AutoCAD的图形数据库[5-7]。
1 土地利用信息查询与统计算法设计
1.1 算法功能 本文设计的算法主要为实现根据不同的土地利用分类方法进行相应的查询与统计操作,具体实现了以下3项功能:(1)根据权属查询指定区域内的土地利用信息;(2)根据地类查询指定区域内的土地利用信息;(3)根据特殊条件查询指定区域内的土地利用信息,如查询某条沟渠沿线的土地利用信息等。
1.2 算法设计及实现 上述功能的实现方法大致相同,因此,笔者仅以功能(1),即根据权属查询指定区域内的土利用信息为例,此算法具体分为以下6个步骤:
第一步:确定需要查询的区域。调用函数acedSSGet()创建选择集,并将选择结果存入变量ssName中;然后,调用函数acedSSLength()提取实体,选择集中实体的数目,遍历选择集ssName,提取其中多段线实体ID并存入数组objIdArray中;最后调用函数acedSSFree()删除选择集ssName。
第二步:添加查询条件(关键字)。调用函数acedGetString()提示用户从命令行输入查询或统计条件,并将用户输入的字符串存入字符型数组strFactor中。
第三步:找出符合查询条件的图斑。遍历实体ID数组objIdArray,调用函数acdbOpenObject()打开实体,并将指向实体的指针存入变量pPoly中;调用函数AcDbEntity::Layer()提取实体所在图层,即图斑的权属;最后判断该信息与指定的查询或统计条件是否相符。若不相符则继续下一个实体;若符合查询条件则转入第四步,进一步提取图斑的信息。
第四步:提取符合条件的图斑信息。包括:(1)提取图斑地类信息。调用函数AcDbPolyline::elevation()提取多段线的高程字段的信息,存入变量tmpElevation中,由前述可知,该信息中含有两部分内容:小数点之前的部分为图斑编号,小数点之后的部分为地类代码。因此,将tmpElevation转换为字符型变量tmpData,然后以小数点为界将tmpData分割成2个字符串,即可得到该图斑的图斑编号和地类代码,然后将其分别存入字符串变量numofMapSpot及numofLandCategory中。(2)提取图斑几何信息。图斑的几何信息包括图斑的面积、图斑边界拐点坐标、图斑边界长度等。这些信息都可通过调用类AcDbPolyline的内部函数获取,如提取图斑面积,只需调用函数AcDbPolyline::getArea()即可。
第五步:显示图斑信息结果。自定义一个对话框类,然后,添加成员变量负责接收上述查询或统计结果,并添加一个list控件负责显示查询信息。最后,调用CDialog::DoModal()函数显示对话框,即可查看上述查询或统计的结果。
第六步:输出图斑信息结果。在第五步自定义的对话框类中添加一个command控件作为保存按钮,然后,为command控件添加实现函数,并在实现实数中调用函数CStdioFile::Open()创建文件,最后调用函数CStdioFile::WriteString()将前述查询或统计结果按格式“权属、图斑号、地类代码、地类名、面积……”写入文件,并调用函数CStdilFile::Close()关闭文件。
2 实例分析
本文以山西某地区的土地利用现状数据对上述系统的功能进行了测试。见图1。
图1 部分土地利用现状
首先,在图1中任意指定一块区域,其次,由用户输入需要查询的关键字权属名称(此处以“李家店”为例),然后,点击回车键,程序开始查找及提取符合关键字“李家店“属性的图斑,查找结束后,程序把查询结果自动弹出,最后点击保存后即可使用。如图2所示。
图2 查询结果显示
点击保存按钮,即可把上诉查询到的所有的信息(李家店这个村庄中每块图斑的类型以及面积,进而可以求出每类图斑的总面积)以文本文档的格式保存在电脑硬盘中。见图3。
图3 查询结果保存效果
(下转52页)
(上接9页)3 土地整理工程量计算算法设计
土地平整是土地开发整理项目中最重要、最复杂的工程,也是项目审查、资金审批的重要环节[8],而土石方量计算是土地平整工程量计算的重要组成部分[9],因此,快速完成土石方量计算,提高土地平整工程量计算效率对于做好土地开发整个项目有重要的意义。
常用于计算土石方量的方法有方格网法、等高线法、断面法、DTM法(不规则三角网法)、区域土方量平衡法和平均高程法等[10]。由于不规则三角网法(DTM)具有以下优点:(1)三角网中的点和线的分布密度和结构完全可以与地表的特征相协调,直接利用原始资料作为网格结点;(2)不改变原始数据和精度;(3)能够插入地性线以保存原有关键的地形特征,以及能很好地适应复杂、不规则地形,从而将地表的特征表现得淋漓尽致等[11]。因此,利用不规则三角网法计算土石方量可以大大提高计算精度,本文亦采用不规则三角网法进行土石方量计算。具体算法实现步骤如下:
第一步:导入参与计算的地形数据。地形数据可以是野外实测的高程点数据,也可以是已有的数字地形图数据。以导入野外实测的高程点数据为例详述导入地形数据的具体实现步骤如下:
首先,调用函数CStdioFile::Open()打开数据文件,并调用函数CStdioFile::ReadString()按行读取点数据;然后,调用函数AcDbPoint::new()创建点实体,调用函数AcDbPoint::setPosition()设置点的坐标,调用函数AcDbBlockTableRecord::appendAcDbEntity()将点实体加入模型空间;最后,调用函数CStdioFile::Close()关闭文件。
第二步:根据地形数据生成不规则三角网。本文主要采用边扩展方法生成不规则三角网。
第三步:输入平场标高。
第四步:以平场标高为分界,计算第三个棱柱的体积,并最终计算出总的挖方量及填方量。若总的挖方量及填方量相差过大,则自动调整平场标高重新进行计算。计算结果见图4所示。
图4 根据已有地形数据计算的土方量结果显示
4 结论
本文设计的方法可以降低传统方法进行土地整理规划过程中因需频繁进行不同数据格式之间的转换操作而附加的工作量,从而提高土地整理规划的效率。通过应用VC++结合ObjectArx对AutoCAD进行二次开发,实现了基于AutoCAD的土地利用信息查询、统计等操作,以及进行土地整理相关工程量的计算等土地整理规划过程中需频繁使用的功能。最后的实例验证测试结果良好,与客观事实情况相符合,证明了本文设计方案的可行性与准确性。
参考文献
[1]衰胜平,赵静,彭君.我国土地整理的意义及对策研究[J].知识经济,2010,3:9.
[2]王军,余莉,罗明,等.土地整理研究综述[J].地域研究与开发,2003,22(2):8-11.
[3]徐小培.浅析我国土地整理[J].资源环境与发展,2009,4:19-21.
[4]张超,王秀茹,高楠.MapInfo和AutoCAD支持下的土地整理规划设计方法[J].水土保持与研究,2006,13(1):189-203.
[5]于萧榕,郭昌言,陈刚.结合Objectarx和C#进行AutoCAD二次开发框架的研究[J].科学技术与工程,2010,10(20):5 085-5 090.
[6]韦忠.基于ObjectARX.Net的Jig技术及其应用研究[J].现代测绘,2010,33(3):45-47.
[7]杨小兵.利用ObjectARX开发小型地下管线信息管理系统[J].城市勘测,2010,4:74-76.
[8]陈国强.浅谈截面法在土地平整工程量计算中的应用[J].农技服务,2009,26(9):144-145.
[9]杨小艳,雍新琴,陈龙高.《土地利用规划学》实践教学环节建设的探讨[J].安徽农学通报,2007,13(21):119-120.
[10]农兆云.土地整理中土方量计算方法比较研究[J].南方国土资源,2010,6:32-33.
[11]汤雪茜,陈天伟.土方量计算的方法探讨[J/OL].[2008-06-06].
(责编:施婷婷)
图2 查询结果显示
点击保存按钮,即可把上诉查询到的所有的信息(李家店这个村庄中每块图斑的类型以及面积,进而可以求出每类图斑的总面积)以文本文档的格式保存在电脑硬盘中。见图3。
图3 查询结果保存效果
(下转52页)
(上接9页)3 土地整理工程量计算算法设计
土地平整是土地开发整理项目中最重要、最复杂的工程,也是项目审查、资金审批的重要环节[8],而土石方量计算是土地平整工程量计算的重要组成部分[9],因此,快速完成土石方量计算,提高土地平整工程量计算效率对于做好土地开发整个项目有重要的意义。
常用于计算土石方量的方法有方格网法、等高线法、断面法、DTM法(不规则三角网法)、区域土方量平衡法和平均高程法等[10]。由于不规则三角网法(DTM)具有以下优点:(1)三角网中的点和线的分布密度和结构完全可以与地表的特征相协调,直接利用原始资料作为网格结点;(2)不改变原始数据和精度;(3)能够插入地性线以保存原有关键的地形特征,以及能很好地适应复杂、不规则地形,从而将地表的特征表现得淋漓尽致等[11]。因此,利用不规则三角网法计算土石方量可以大大提高计算精度,本文亦采用不规则三角网法进行土石方量计算。具体算法实现步骤如下:
第一步:导入参与计算的地形数据。地形数据可以是野外实测的高程点数据,也可以是已有的数字地形图数据。以导入野外实测的高程点数据为例详述导入地形数据的具体实现步骤如下:
首先,调用函数CStdioFile::Open()打开数据文件,并调用函数CStdioFile::ReadString()按行读取点数据;然后,调用函数AcDbPoint::new()创建点实体,调用函数AcDbPoint::setPosition()设置点的坐标,调用函数AcDbBlockTableRecord::appendAcDbEntity()将点实体加入模型空间;最后,调用函数CStdioFile::Close()关闭文件。
第二步:根据地形数据生成不规则三角网。本文主要采用边扩展方法生成不规则三角网。
第三步:输入平场标高。
第四步:以平场标高为分界,计算第三个棱柱的体积,并最终计算出总的挖方量及填方量。若总的挖方量及填方量相差过大,则自动调整平场标高重新进行计算。计算结果见图4所示。
图4 根据已有地形数据计算的土方量结果显示
4 结论
本文设计的方法可以降低传统方法进行土地整理规划过程中因需频繁进行不同数据格式之间的转换操作而附加的工作量,从而提高土地整理规划的效率。通过应用VC++结合ObjectArx对AutoCAD进行二次开发,实现了基于AutoCAD的土地利用信息查询、统计等操作,以及进行土地整理相关工程量的计算等土地整理规划过程中需频繁使用的功能。最后的实例验证测试结果良好,与客观事实情况相符合,证明了本文设计方案的可行性与准确性。
参考文献
[1]衰胜平,赵静,彭君.我国土地整理的意义及对策研究[J].知识经济,2010,3:9.
[2]王军,余莉,罗明,等.土地整理研究综述[J].地域研究与开发,2003,22(2):8-11.
[3]徐小培.浅析我国土地整理[J].资源环境与发展,2009,4:19-21.
[4]张超,王秀茹,高楠.MapInfo和AutoCAD支持下的土地整理规划设计方法[J].水土保持与研究,2006,13(1):189-203.
[5]于萧榕,郭昌言,陈刚.结合Objectarx和C#进行AutoCAD二次开发框架的研究[J].科学技术与工程,2010,10(20):5 085-5 090.
[6]韦忠.基于ObjectARX.Net的Jig技术及其应用研究[J].现代测绘,2010,33(3):45-47.
[7]杨小兵.利用ObjectARX开发小型地下管线信息管理系统[J].城市勘测,2010,4:74-76.
[8]陈国强.浅谈截面法在土地平整工程量计算中的应用[J].农技服务,2009,26(9):144-145.
[9]杨小艳,雍新琴,陈龙高.《土地利用规划学》实践教学环节建设的探讨[J].安徽农学通报,2007,13(21):119-120.
[10]农兆云.土地整理中土方量计算方法比较研究[J].南方国土资源,2010,6:32-33.
[11]汤雪茜,陈天伟.土方量计算的方法探讨[J/OL].[2008-06-06].
(责编:施婷婷)
图2 查询结果显示
点击保存按钮,即可把上诉查询到的所有的信息(李家店这个村庄中每块图斑的类型以及面积,进而可以求出每类图斑的总面积)以文本文档的格式保存在电脑硬盘中。见图3。
图3 查询结果保存效果
(下转52页)
(上接9页)3 土地整理工程量计算算法设计
土地平整是土地开发整理项目中最重要、最复杂的工程,也是项目审查、资金审批的重要环节[8],而土石方量计算是土地平整工程量计算的重要组成部分[9],因此,快速完成土石方量计算,提高土地平整工程量计算效率对于做好土地开发整个项目有重要的意义。
常用于计算土石方量的方法有方格网法、等高线法、断面法、DTM法(不规则三角网法)、区域土方量平衡法和平均高程法等[10]。由于不规则三角网法(DTM)具有以下优点:(1)三角网中的点和线的分布密度和结构完全可以与地表的特征相协调,直接利用原始资料作为网格结点;(2)不改变原始数据和精度;(3)能够插入地性线以保存原有关键的地形特征,以及能很好地适应复杂、不规则地形,从而将地表的特征表现得淋漓尽致等[11]。因此,利用不规则三角网法计算土石方量可以大大提高计算精度,本文亦采用不规则三角网法进行土石方量计算。具体算法实现步骤如下:
第一步:导入参与计算的地形数据。地形数据可以是野外实测的高程点数据,也可以是已有的数字地形图数据。以导入野外实测的高程点数据为例详述导入地形数据的具体实现步骤如下:
首先,调用函数CStdioFile::Open()打开数据文件,并调用函数CStdioFile::ReadString()按行读取点数据;然后,调用函数AcDbPoint::new()创建点实体,调用函数AcDbPoint::setPosition()设置点的坐标,调用函数AcDbBlockTableRecord::appendAcDbEntity()将点实体加入模型空间;最后,调用函数CStdioFile::Close()关闭文件。
第二步:根据地形数据生成不规则三角网。本文主要采用边扩展方法生成不规则三角网。
第三步:输入平场标高。
第四步:以平场标高为分界,计算第三个棱柱的体积,并最终计算出总的挖方量及填方量。若总的挖方量及填方量相差过大,则自动调整平场标高重新进行计算。计算结果见图4所示。
图4 根据已有地形数据计算的土方量结果显示
4 结论
本文设计的方法可以降低传统方法进行土地整理规划过程中因需频繁进行不同数据格式之间的转换操作而附加的工作量,从而提高土地整理规划的效率。通过应用VC++结合ObjectArx对AutoCAD进行二次开发,实现了基于AutoCAD的土地利用信息查询、统计等操作,以及进行土地整理相关工程量的计算等土地整理规划过程中需频繁使用的功能。最后的实例验证测试结果良好,与客观事实情况相符合,证明了本文设计方案的可行性与准确性。
参考文献
[1]衰胜平,赵静,彭君.我国土地整理的意义及对策研究[J].知识经济,2010,3:9.
[2]王军,余莉,罗明,等.土地整理研究综述[J].地域研究与开发,2003,22(2):8-11.
[3]徐小培.浅析我国土地整理[J].资源环境与发展,2009,4:19-21.
[4]张超,王秀茹,高楠.MapInfo和AutoCAD支持下的土地整理规划设计方法[J].水土保持与研究,2006,13(1):189-203.
[5]于萧榕,郭昌言,陈刚.结合Objectarx和C#进行AutoCAD二次开发框架的研究[J].科学技术与工程,2010,10(20):5 085-5 090.
[6]韦忠.基于ObjectARX.Net的Jig技术及其应用研究[J].现代测绘,2010,33(3):45-47.
[7]杨小兵.利用ObjectARX开发小型地下管线信息管理系统[J].城市勘测,2010,4:74-76.
[8]陈国强.浅谈截面法在土地平整工程量计算中的应用[J].农技服务,2009,26(9):144-145.
[9]杨小艳,雍新琴,陈龙高.《土地利用规划学》实践教学环节建设的探讨[J].安徽农学通报,2007,13(21):119-120.
[10]农兆云.土地整理中土方量计算方法比较研究[J].南方国土资源,2010,6:32-33.
[11]汤雪茜,陈天伟.土方量计算的方法探讨[J/OL].[2008-06-06].
(责编:施婷婷)