批量获取示坡线的方法
2013-05-14刘俊萍
刘俊萍 甘 俊
(铁道第三勘察设计院集团有限公司, 天津 300251)
地形图制作主要由采集和编辑两部分组成,在地形图编辑过程中,准确绘制示坡线是编辑的内容之一。示坡线就是垂直于等高线的短线,用以指示斜坡降低的方向。不同比例尺的地形图,示坡线长度是不一样的。
目前铁路带状地形图制作的数据源主要有两种,基于传统摄影测量方式获取航拍影像和基于机载激光雷达获取的点云数据,通过相应的处理后可获取待编辑的AutoCAD矢量数据。在传统作业模式下,对两种类型的AutoCAD矢量文件进行示坡线绘制的方法如下:基于高程点与等高线的关系或线的属性值来判断地形峰值,获取需要绘制示坡线的等高线对象,凭借经验确定封闭等高线对象的内径最大处位置,在该位置根据不同比例尺的地形图,绘制相应长度的示坡线,并置于相应的图层中。
该方法的缺点在于:作业人员只能凭借熟练程度和作业经验来完成示坡线绘制,其效率和精确度都比较低下,往往造成图层植入错误、绘制长度不准确、示坡线漏打等情况,严重影响地形图质量。因此,结合示坡线与等高线及图形比例的关系,应用CAD二次开发一种批处理方式的示坡线自动绘制程序。
1 基于批处理方式的示坡线自动绘制
该方法主要利用ObjectARX技术,在AutoCAD平台下自主开发完成。ObjectARX是AutoDesk公司针对AutoCAD平台上的二次开发而推出的一个开发软件包,提供了以C++为基础,面向对象的开发环境及应用程序接口,能真正快速的访问AutoCAD图形数据库。
示坡线批量自动绘制的基本思路为:首先需要获得一张地形图文件的等高线实体,进一步获取需要进行示坡线处理的对象集合。其次,依次判断对象集合中的每个对象实体,找到示坡线的绘制位置。最后,结合输入地形图的比例尺信息,确定每个对象实体示坡线的长度和方向,并绘制示坡线,进而实现整张地形图示坡线的批量自动绘制。
在ObjectARX语言实现过程中,可利用acutBuildList函数方便实现框选或通选获取示坡线处理的对象ID集合,后逐个对象进行示坡线绘制处理。在对单个对象进行处理时,先开辟一个点集合数组AcGePoint3dArray,装载当前处理对象的顶点,依据两点间距离最大准则,通过循环运算,确定需要绘制示坡线的两个端点位置;以该两端点位置连线方向为示坡线方向;基于成图比例尺确定示坡线的长度,综合位置、方向和长度绘制单个对象的示坡线,最后将示坡线归化至相应的图层中,即完成单个对象的示坡线绘制工作。
基于上述方法和ObjectARX技术实现的示坡线批量自动绘制功能,直接以DLL或ARX方式加载到以CAD平台环境搭建的程序中,能够实现与其他CAD功能的很好整合,运行效率较高,使用方便,很好地弥补了传统手工绘制示坡线的不足,大大提高了制图效率。通过示坡线绘制探索,基于ObjectArx开发包,进行了如图1所示的开发流程设计。
图1 批量处理示坡线内业流程
2 批量获取示坡线的程序的主要实现代码
for(long j=0;j if(pobj->isKindOf(AcDbPolyline::desc())){ AcDbPolyline *pPline; acdbOpenObject(pPline, eId, AcDb::kForRead); vertnum=pPline->numVerts(); for(i=0;i pPline->getPointAt(i,pt); PointArr.append(pt); pPline->close(); } } for(i=0;i for(m=i+1;m d2=sqrt((PointArr[i].x-PointArr[m].x)*(PointArr[i].x-PointArr[m].x)+(PointArr[i].y-PointArr[m].y)*(PointArr[i].y-PointArr[m].y)); if(d1 d1=d2; maxx1=PointArr[i].x;maxy1=PointArr[i].y; maxx2=PointArr[m].x;maxy2=PointArr[m].y; } //确定示坡线长度及方向 pt1.x=maxx1; pt1.y=maxy1; pt1.z=0; ppt1.x=maxx2; ppt1.y=maxy2; ppt1.z=0; angle=Cangle(pt1,ppt1);//求两点的方位角 pt2.x=pt1.x+0.8*scale/1000*sin(angle); pt2.y=pt1.y+0.8*scale/1000*cos(angle); pt2.z=0; angle1=Cangle(ppt1,pt1); ppt2.x=ppt1.x+0.8*scale/1000*sin(angle1); ppt2.y=ppt1.y+0.8*scale/1000*cos(angle1); ppt2.z=0; }}} 在CAD界面下,加载程序生成的ARX格式批量示坡线绘制程序,然后打开待处理的地形图文件,直接在命令窗口给出相应的CAD命令,即可以将需要生成示坡线的等高线上,全部自动绘制上相应比例尺的示坡线。除批处理方式外,亦可选择制定待生成示坡线的等高线,执行即可,效果如图2所示。 图2 加载示坡线程序后CAD界面截图 实践表明,该方法结果正确,速度快,保证了示坡线符号均匀、美观。 采用AutoDesk CAD平台,运用Visual C++编译环境结合,完成了软件的开发利用。试运行成功后,笔者定制了批处理程序,最终实现了等高线上全部自动绘制相应比例尺的示坡线。在生产中多次使用证明其正确性,仅示坡线这一部分的工作效率提高了80%。作业程序化,不仅大大减少了工作量,而且工作内容也简化了许多,从而减少了人的因素对质量的影响。地形图的质量更加标准化,减轻了作业人员的劳动强度。 [1] GBT20257.1—2007 国家基本比例尺地图图示[S] [2] GB/T 13923—2006 基础地理信息要素分类与代码[S] [3] GB/T20257.1—2007 国家基本比例尺地图图式第1部分:1∶500、1∶1000、1∶2000地形图图式[S] [4] GBT20257.2—2006 国家基本比例尺地图图式第2部分[S] [5] 《测量学》编辑委员会.测量学:下册[M].北京:测绘出版社,19853 程序的调用及操作
4 结束语