河道划界中入库资料自动生成软件设计与应用
2018-05-23薛俊杰
李 磊,王 胜,薛俊杰
(淮安水利勘测设计研究院有限公司,江苏 淮安 223001)
1 概述
划界工作既是依法保护水利工程的重要措施,亦是加强水利工程管理的基础性工作,有利于推进建立归属清晰、责权明确、监管有效的河湖资源管理体系,有利于实现工程管理的制度化和规范化,有利于实现国土空间集约、高效、可持续利用,有利于建立统一衔接、功能互补、相互协调、多规合一的空间规划体系。
仅以淮安市城市水利工程管理处河道和水利工程管理范围划定项目为例,需要完成苏北灌溉总渠(4.5公里)、淮河入海水道(11.45公里)、里运河(17.35公里)、大运河(15.3公里)、废黄河(10.1公里)的划界工作。管理范围线以界桩(牌)形式在实地落实,间距在200 m左右,最大不超过250 m。
完成实地埋设以及数据采集,必须对其进行整理以便达到上传格式要求,具体要求参照《通知》(苏水管〔2015〕40号),即文字与范围线垂直;字头指向河流(湖泊)外侧等。如果依赖手工进行逐条添加,那么工作量将很庞大,而且极易出错,这就亟需一种自动、高效的作业方法。
2006版本起,Autodesk公司已为AutoCAD留有.net等应用程序应用接口API(Application Programming Interface,API)。开发接口是完全面向对象的,方便易用[1-2]。微软公司为.net量身订做的C#语言有程序易读等优势[3-4],是较为理想的CAD开发工具[5],故而提出一种基于C#与CAD二次开发的自动生成方法。
2 数学逻辑
软件自动化的实质是将传统的繁琐操作流程进行数学逻辑拆解,然后将其进行表达式(软件代码)表达,再辅以逻辑衔接,这样就可以实现流程的程序化替代。
2.1 桩位编号信息
相关规定中要求,上传数据库的CAD成果的桩位编号样式如图1所示。
图1 桩位编号要求样式
即:a桩位编号文字垂直于管理范围线;b桩位编号字头指向河流外侧;
CAD二次开发时,添加的文字默认是水平的,那么只要确定出其旋转角即可。假设当前桩位点是O,管理范围线上在其前后有相邻的节点O1和O2,则有矢量OO1、OO2与真北方向所夹角度(方位角[6])α1、α2,如图 2 所示。
图2 旋转角计算示意图
图中,虚线位置就是最终的桩位编号位置。
最后取α1、α2两者的平均值就可以得到桩位编号自身的方位角α,那么问题就转换为如何求取矢量的方位角值,其计算公式如下:
其中,β是矢量与水平线所夹的锐角。以方位角α为基础即可满足要求a;满足要求b必须辅以外部手段。
以上是河流在左侧的处理方式,如果其在右侧,那么两方位角差值为180°。但是因为两则都有管理范围线,故而河流位置无法从图形(管理范围线,无指向属性)中直接获取,需要借助外部手段。
2.2 桩间距信息
相关规定中要求,对上传数据库的CAD成果的桩间距样式有以下2个要求:
a桩间距文字位于相邻桩位点中间;
b桩间距文字沿着管理范围线放置;
相邻桩位点构成矢量,那么可利用与β、α相关的公式计算旋转角,即可满足要求a;要使文字位于桩位点中间(要求b),必须考虑文字高度、单个(不同高度)字符占据宽度,再辅以平移手段才能保证文字近似在中间。最终要求样式如图3所示。
图3 桩间距要去样式
3 软件设计
软件设计就是在数学逻辑的基础上将其实现,数学逻辑部分是其中的核心部分,然后再辅以其它逻辑运行,才能确保软件可以真正运行。
3.1 框架流程图
按照线性布局的方式进行软件整体设计,最终设计流程如图4所示。
图4 软件设计流程
由图可以看出,已经有效的降低了人工参与度,真正参与的只有“外部手段”。
3.2 CAD二次开发知识
CAD二次开发[7]的实质就是利用预留的API实现与CAD的互操作。基于C#的开发方式通常是添加以下2个引用:
其中,2006与16.0是不同CAD版本的区别。
(1)线识别
CAD文件包含很多图元对象,软件要的是多段线,AcadDocument.Utility.GetEntity()方法能够获取多段线实体,即:
AcadDoc.Utility.GetEntity(out object,out point,“拾取目标多段线”);
其中,返回值ResultObj是拾取的对象。
CAD中多段线的相关属性值都可以从object中获取得到,而用到的只是节点坐标,即:
这样即可进行方位角以及点间距计算。
(2)文字添加
CAD中添加图元功能同样可以利用接口程序完成绘制,桩编号以及间距信息都是“文字”图元,主要通过AcadModelSpace接口来实现。
通过ModelSpace 的AddText()方法可以实现文字添加功能,即:
其中,str是文字内容,point是文字插入点,height是文字高度。
另外,直接添加的文字是水平的,故而需要对其进行旋转操作,即:
textObj.Rotate(rotateBase,rotateAngle);
其中,textObj是添加的文本对象;rotateBase是旋转指定基点;rotateAngle是旋转指定角度。
线识别和文字添加是本软件的基础,划界工作中资料自动化整理的需求功能和这两者大同小异,故而本软件设计对其它相关的自动化数据处理具有重要的参考意义。
3.3 外部手段
因为计算机无法从图上直接判读出河道(湖泊)位于范围线(无指向属性)的左侧还是右侧,所以必须依赖人工判读。
软件运行后会弹出选择对话框,具体如图5所示;返回文件后依照指向选择是或否,具体如图6(a)(b)所示。这是整个流程中唯一一处需要人工参与的部分,但是图上判读较为直观,并不会给软件的可靠性带来负面影响。
图5 人工判读方式
图6 人工判断依据
3.4 设计UI
软件的目标是简化实际工作流程,那么设计UI[8-9]的目标是(线性)清晰明了,如图7所示。
图7 UI设计图
完成“读取桩坐标”和“识别桩边线”操作后,“绘制桩编号”和“绘制桩间距”将会解除被锁定状态。
3.5 核心代码
4 应用实例
简单说明项目情况,同时利用质量统计数据对软件的性能进行评价。
4.1 项目介绍
淮安市河道和水利工程管理范围划定项目中,废黄河(10.1 km)采用1:10000地形图作为工作底图,修测河道管理范围线附近的地物,重点修测地形图中外堤脚线。入库的右侧管理范围线如图8所示,共计埋设125根界桩。
图8 案例管理范围线
按技术设计书要求,1:1000图上管理界线图上用红色实线绘制河道管理范围线,线宽为0.6 mm;管理范围界线桩点用红色圆圈表示,直径1.5 mm。而且点位坐标文件已按CASS数据文件格式编辑完成。
界桩编号的最终要求[10]格式如下:垂直管理范围线标注,不要压盖河床,颜色为红色,等线体字高2.0 mm。
4.2 效果评价
打开本文开发的软件界面,读取准备好的文件和识别桩边线,设置好桩号命名规则、号中数字位数、桩号名称字高后即可点击相应命令按钮实现桩编号和间距添加。自动添加的质量统计结果如表1所示。
列出4处不合格且具有明显特征的图形截图,如图9所示。由图可知,针对桩编号,不合格现象(互相压盖)通常出现在管理范围线不平滑、不规则变化的桩位点上;针对桩间距,线的不平滑、不规则变化会导致不合格现象(与管理范围线有压盖),桩位间距离较近也会导致不合格现象(互相压盖)。这种不合格的桩编号或者间距注记就需要内业人员手动二次修改。
表1 质量统计表
但是,由表1所知,虽然存在这一定的不合格现象,但是两者的合格率都在90%以上,桩间距的标注合格率甚至达到了95%,高合格率确保了软件的可靠性。
图9 不合格处截图
另外,标注河道右侧的125个桩编号以及123个桩间距的用时累计不超过6 s。相比人工添加,作业效率得到极大的提升,进而体现出软件的自动化生成方法的优势。
5 结语
河湖划界入库资料的整理在整体上是属于重复性工作,从提高工作效率角度出发,提出基于C#和CAD二次开发的文字标注自动添加方法,并且以此进行软件设计,最后在淮安废黄河划界工作中进行应用。
(1)软件的可靠性较高,体现在标注的高合格率上(桩编号为91.2%、桩间距为95.1%)。
(2)软件的自动化及高效性,体现在标注的用时上(桩编号与桩间距的用时皆小于3 s)。
质量统计表中的“合格率”和“用时”指标验证了桩编号与桩间距的自动化添加方法的可行性,而且为河湖划界资料入库提供整理了一种新的解决思路,具有较高的参考价值。
参考文献:
[1]秦洪现,崔惠岚,孙剑等.Autodesk 系列产品开发培训教程[M].北京:化学工业出版社,2007.
[2]付崇江,余代俊,王丽丽.基于.NET平台的CAD地形图注记的自动调整[J].工程勘察,2010,38(03):84-90.
[3]王永辉,胡青泥,李红彩.AutoCAD二次开发方法的研究[J].计算机系统应用,2007(03):94-96+100.
[4]黄箐,马德山,项链.基于.NET实现多语言互操作性[J].西北民族大学学报(自然科学版),2007(02):38-44.
[5]赵宁,黄地龙,徐莉.基于C#的区域自动填充CAD二次开发 [J].工程勘察,2008(01):58-61.
[6]陈德标.坐标方位角计算实用通式[J].测绘通报,2006(02):30-31+69.
[7]李冠亿.深入浅出AutoCAD.NET 二次开发[M].北京:中国建筑工业出版社,2012.
[8]宗长荣.浅谈地下水资料整编软件的设计与应用[J].江苏水利,2009(08):38-39.
[9]朱永军.EXCEL软件在流量定线中的运用[J].江苏水利,2007(05):29-30.
[10]楼锋.江苏全面启动河湖和水利工程管理范围划定工作 [J].江苏水利,2015(10):6.