基于ObjectARX铁路线路调查内业处理系统的研究

2011-06-07 09:24刘小龙赖国泉
铁道勘察 2011年2期
关键词:数据文件内业中线

刘小龙 赖国泉

(1.中铁第四勘察设计院集团有限公司,湖北武汉 430063;2.中铁西北科学研究院,甘肃兰州 730000)

铁路线路在初测和定测阶段要进行线路调查工作,统计线路经过地区影响范围内的各种建筑物类型和建筑物数量,以便提供给决策者决策和设计者设计使用。这些建筑物包括道路、房屋、坟墓、树木和水井等,其特点是类型繁多,数量大。对于调查人员来说,其线路调查工作内容包括外业实地调查和内业数据处理。针对外业实地调查,除了加强调查者工作强度外,再无其他方法提高工作效率,要提高线路调查工作效率只有考虑内业数据的处理。近年来运用Visual C++编译环境结合ObjectARX开发工具对AutoCAD二次开发研究方兴未艾[1-4],本文结合线路调查具体工作内容,基于AutoCAD 2007绘图平台,运用Visual C++编译环境结合ObjectARX库函数,实现线路调查交互式内业处理。

1 传统内业处理方法

线路外业调查完成后传统的内业处理方法是在AutoCAD中打开线路设计底图,结合外业调查的数据,在图形上调用AutoCAD命令测量获得。以房屋为例,首先调用AutoCAD查看属性的命令,获得房屋的单层面积,再根据单层面积乘以层数获得总面积,接着量取房屋离中线最近点离房屋的距离,最后量取房屋所在的里程。运用此方法,要不断的在数据文件和AutoCAD界面切换,并且通过手工方式输入结果数据,效率低下。

2 基于ObjectARX的内业处理

2.1 房屋内业处理

线路调查包括道路立交、房屋、坟墓、树木和水井等,其大部分工作量在房屋面积的统计上,调查人员在处理内业时要不断在数据文件和AutoCAD之间切换,调用AutoCAD命令进行数据量的统计。通过归纳总结房屋面积统计的方法,基于ObjectARX开发包进行了如图1所示的开发流程设计。

图1 房屋内业处理流程

(1)线路里程起点的输入与中心线的选择

ObjectARX开发包提供了acedInitGet()函数用于输入格式的控制;提供了acedGetString()函数用于字符串变量的输入;提供了acdbEntGet()用于实体对象的选择。对于线调内业处理,需要输入线路中线的里程、鼠标点去线路中线和房屋实体,才能计算房屋面积、离中线距离和房屋里程。

//输入线路里程

acedInitGet(RSG_NONULL,NULL);//设置输入格式;int rc=acedGetString(0," 输入起点里程:",licheng); //输入起点里程;

//选择线路中心线

ent2=acdbEntGet(ent);//选择实体,将实体名称保存在变量ent中;

acdbGetObjectId(ID,ent);//由实体变量名称获得实体ID;

acdbOpenObject(pent2,ID2,AcDb::kForRead);//由实体ID获得实体对象;

//判断实体是否为多段线

pent2->close();//关闭实体对象。

(2)房屋面积的计算

已知房屋ABCDE、FGHI、JKLM,房屋各个顶点与线路中线的距离分别为a、b、c、d、e、f、g、h、j、k和l,层数分别为2、1和3,见图2所示。

图2 房屋面积、距中线距离及里程计算

计算房屋ABCDE、FGHI的面积和可由如下过程进行:

①选择房屋ABCDE,判断其类型。如果是多段线,程序继续,否则提示用户选择错误。

②键盘输入房屋ABCDE的层数2,采用getArea()函数获得房屋ABCDE单层面积,并记录于变量m中;由房屋ABCDE单层的面积乘以其层数计算房屋ABCDE总的面积。

③选择房屋FGHI,判断其类型。如果是多段线,程序继续,否则提示用户选择错误。

④键盘输入房屋FGHI的层数1,采用getArea()函数获得房屋FGHI单层面积,并记录于变量m中;直接判断屋FGHI单层面积就为其总面积。

⑤将房屋ABCDE的总面积与房屋FGHI的总面积相加,赋值与变量toll。

⑥选择房屋JKLM,判断其类型。如果是多段线,程序继续,否则提示用户选择错误。

⑦判读键盘输入的关键词,如果是结束关键词,而不是层数关键词,不去计算房屋JKLM的面积,将房屋群的总面积toll写入数据文件。

(3)房屋距离线路中心线最近点及其在中线上里程计算

具体的实现过程如下所述:

①如图2所示,遍历房屋多段线顶点A、B、C、D、E,通过函数getPointAt()计算线路中线上与这些点最近的点a、b、c、d、e。

②计算房屋多段线顶点A、B、C、D、E与其在线路中线上对应点a、b、c、d、e的距离,通过比较将最短距离S1赋值于n,并记录在线路中线上与之对应的点d。

③遍历房屋多段线顶点F、G、H、I,通过函数getPointAt()计算线路中线上与这些点最近的点f、g、h、i。

④计算房屋多段线顶点F、G、H、I与其在线路中线上对应点f、g、h、i的距离,通过比较将最短距离S2赋值于k,并记录在线路中线上与之对应的点i。

⑤比较变量n与k的大小,将较小者写入数据文件,同时记录与之对应的点i。

⑥通过函数getDistAtPoint()计算点i与线路中心线起点的距离,并将线路起点里程与此距离的差写入数据文件。

(4)数据文件最终结果

数据文件的最终结果格式生成如下:

里程与中线距离房屋面积159707.02041311.07627799.4540401268.35587662.2834959393.064040

此数据文件只包括房屋里程、与中线距离和房屋面积,但是建筑物调查还包括建筑物结构及与线路中线之间的关系。由于建筑物结构繁多,靠编程简化不了操作次数,所以在生成数据文件后由设计者将其输入。

2.2 道路立交内业处理

线路调查对道路立交的要求是统计道路等级、道路中线与线路设计中线之间的夹角和相交里程。道路中线是一条曲线,线路设计中线也是一条曲线,因此道路立交的内业处理就是求两条曲线相交的问题。已知道路中线、线路设计中线和线路设计起点里程如图3所示,求A点里程、α角度,同时输入道路等级。具体步骤如下:

图3 道路与线路设计中线相交

采用函数acedGetString()由设计者输入设计中线起点里程K1+000和道路等级,并将道路等级写入数据文件。

求线路设计中线与道路中线的交点A。

通过函数getDistAtPoint()计算点A与线路中心线起点的距离,并将线路起点里程与此距离的差写入数据文件。

给一个步长,找到线路设计中线上的点B,和道路中线上的C点,由AB点形成矢量V1方向指向B点,由AC点形成矢量V2方向指向C点。

用函数angleTo()得到线路设计中线与道路中线的夹角α,并将其写入数据文件。

2.3 其他建筑物内业处理

其他建筑物包括坟墓、树木、水井、通信基站等。它们相对于房屋、道路立交在数量上较少,统计方法也比较简单,采用编程简化不了操作次数,提高不了工作效率。因此对它们的统计采用原始的操作方法(即采用AutoCAD内部命令按照要求统计)。

3 结束语

铁路勘测设计一体化、智能化已成为未来铁路勘测设计领域发展的目标,本论文采用AutoCAD 2007绘图平台,运用Visual C++编译环境结合ObjectARX库函数,通过对线路调查软件的开发,提高了线路调查的内业处理速度和精度,减少了技术人员的工作量,对铁路勘测设计一体化、智能化是一种补充,同时对从事AutoCAD开发的人员有一定的参考和借鉴意义。

[1]老大中,赵占强.AutoCAD 2000 ARX二次开发实例精粹(ObjectARX)[M].北京:国防工业出版社,2001

[2]张金水,张廷楷.道路勘测与设计[M].上海:同济大学出版社,2005

[3]赵延龙,程耀东,董明才.应用ObjectARX的线路纵断面的自动填充方法[J].工程图学学报,2007(2):68-72

[4]张汉瑞,马曼丽,胡志勇.应用VC6和ObjectARX插件开发通用隧道断面绘制程序[J].城市勘测,2009(5):104-107

[5]程耀东.图形数据库应用技术研究[J].工程图学学报,2006,27(1):143-148

猜你喜欢
数据文件内业中线
公路施工项目内业资料管理探讨
公路工程内业资料管理的不足及处理措施
高速公路机电系统内业资料管理思考
课本内外
课本内外
——书写要点(三)
建筑工程内业资料管理探讨
数据文件恢复专题问答
数据文件安全管控技术的研究与实现
课本内外
SQL数据文件恢复工具