劉俊萍 甘 俊
(鐵道第三勘察設計院集團有限公司, 天津 300251)
地形圖制作主要由采集和編輯兩部分組成,在地形圖編輯過程中,準確繪制示坡線是編輯的內(nèi)容之一。示坡線就是垂直于等高線的短線,用以指示斜坡降低的方向。不同比例尺的地形圖,示坡線長度是不一樣的。
目前鐵路帶狀地形圖制作的數(shù)據(jù)源主要有兩種,基于傳統(tǒng)攝影測量方式獲取航拍影像和基于機載激光雷達獲取的點云數(shù)據(jù),通過相應的處理后可獲取待編輯的AutoCAD矢量數(shù)據(jù)。在傳統(tǒng)作業(yè)模式下,對兩種類型的AutoCAD矢量文件進行示坡線繪制的方法如下:基于高程點與等高線的關系或線的屬性值來判斷地形峰值,獲取需要繪制示坡線的等高線對象,憑借經(jīng)驗確定封閉等高線對象的內(nèi)徑最大處位置,在該位置根據(jù)不同比例尺的地形圖,繪制相應長度的示坡線,并置于相應的圖層中。
該方法的缺點在于:作業(yè)人員只能憑借熟練程度和作業(yè)經(jīng)驗來完成示坡線繪制,其效率和精確度都比較低下,往往造成圖層植入錯誤、繪制長度不準確、示坡線漏打等情況,嚴重影響地形圖質量。因此,結合示坡線與等高線及圖形比例的關系,應用CAD二次開發(fā)一種批處理方式的示坡線自動繪制程序。
該方法主要利用ObjectARX技術,在AutoCAD平臺下自主開發(fā)完成。ObjectARX是AutoDesk公司針對AutoCAD平臺上的二次開發(fā)而推出的一個開發(fā)軟件包,提供了以C++為基礎,面向對象的開發(fā)環(huán)境及應用程序接口,能真正快速的訪問AutoCAD圖形數(shù)據(jù)庫。
示坡線批量自動繪制的基本思路為:首先需要獲得一張地形圖文件的等高線實體,進一步獲取需要進行示坡線處理的對象集合。其次,依次判斷對象集合中的每個對象實體,找到示坡線的繪制位置。最后,結合輸入地形圖的比例尺信息,確定每個對象實體示坡線的長度和方向,并繪制示坡線,進而實現(xiàn)整張地形圖示坡線的批量自動繪制。
在ObjectARX語言實現(xiàn)過程中,可利用acutBuildList函數(shù)方便實現(xiàn)框選或通選獲取示坡線處理的對象ID集合,后逐個對象進行示坡線繪制處理。在對單個對象進行處理時,先開辟一個點集合數(shù)組AcGePoint3dArray,裝載當前處理對象的頂點,依據(jù)兩點間距離最大準則,通過循環(huán)運算,確定需要繪制示坡線的兩個端點位置;以該兩端點位置連線方向為示坡線方向;基于成圖比例尺確定示坡線的長度,綜合位置、方向和長度繪制單個對象的示坡線,最后將示坡線歸化至相應的圖層中,即完成單個對象的示坡線繪制工作。
基于上述方法和ObjectARX技術實現(xiàn)的示坡線批量自動繪制功能,直接以DLL或ARX方式加載到以CAD平臺環(huán)境搭建的程序中,能夠實現(xiàn)與其他CAD功能的很好整合,運行效率較高,使用方便,很好地彌補了傳統(tǒng)手工繪制示坡線的不足,大大提高了制圖效率。通過示坡線繪制探索,基于ObjectArx開發(fā)包,進行了如圖1所示的開發(fā)流程設計。

圖1 批量處理示坡線內(nèi)業(yè)流程
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命令,即可以將需要生成示坡線的等高線上,全部自動繪制上相應比例尺的示坡線。除批處理方式外,亦可選擇制定待生成示坡線的等高線,執(zhí)行即可,效果如圖2所示。 圖2 加載示坡線程序后CAD界面截圖 實踐表明,該方法結果正確,速度快,保證了示坡線符號均勻、美觀。 采用AutoDesk CAD平臺,運用Visual C++編譯環(huán)境結合,完成了軟件的開發(fā)利用。試運行成功后,筆者定制了批處理程序,最終實現(xiàn)了等高線上全部自動繪制相應比例尺的示坡線。在生產(chǎn)中多次使用證明其正確性,僅示坡線這一部分的工作效率提高了80%。作業(yè)程序化,不僅大大減少了工作量,而且工作內(nèi)容也簡化了許多,從而減少了人的因素對質量的影響。地形圖的質量更加標準化,減輕了作業(yè)人員的勞動強度。 [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 程序的調(diào)用及操作

4 結束語