劉俊萍 甘 俊
(鐵道第三勘察設(shè)計(jì)院集團(tuán)有限公司, 天津 300251)
地形圖制作主要由采集和編輯兩部分組成,在地形圖編輯過(guò)程中,準(zhǔn)確繪制示坡線(xiàn)是編輯的內(nèi)容之一。示坡線(xiàn)就是垂直于等高線(xiàn)的短線(xiàn),用以指示斜坡降低的方向。不同比例尺的地形圖,示坡線(xiàn)長(zhǎng)度是不一樣的。
目前鐵路帶狀地形圖制作的數(shù)據(jù)源主要有兩種,基于傳統(tǒng)攝影測(cè)量方式獲取航拍影像和基于機(jī)載激光雷達(dá)獲取的點(diǎn)云數(shù)據(jù),通過(guò)相應(yīng)的處理后可獲取待編輯的AutoCAD矢量數(shù)據(jù)。在傳統(tǒng)作業(yè)模式下,對(duì)兩種類(lèi)型的AutoCAD矢量文件進(jìn)行示坡線(xiàn)繪制的方法如下:基于高程點(diǎn)與等高線(xiàn)的關(guān)系或線(xiàn)的屬性值來(lái)判斷地形峰值,獲取需要繪制示坡線(xiàn)的等高線(xiàn)對(duì)象,憑借經(jīng)驗(yàn)確定封閉等高線(xiàn)對(duì)象的內(nèi)徑最大處位置,在該位置根據(jù)不同比例尺的地形圖,繪制相應(yīng)長(zhǎng)度的示坡線(xiàn),并置于相應(yīng)的圖層中。
該方法的缺點(diǎn)在于:作業(yè)人員只能憑借熟練程度和作業(yè)經(jīng)驗(yàn)來(lái)完成示坡線(xiàn)繪制,其效率和精確度都比較低下,往往造成圖層植入錯(cuò)誤、繪制長(zhǎng)度不準(zhǔn)確、示坡線(xiàn)漏打等情況,嚴(yán)重影響地形圖質(zhì)量。因此,結(jié)合示坡線(xiàn)與等高線(xiàn)及圖形比例的關(guān)系,應(yīng)用CAD二次開(kāi)發(fā)一種批處理方式的示坡線(xiàn)自動(dòng)繪制程序。
該方法主要利用ObjectARX技術(shù),在AutoCAD平臺(tái)下自主開(kāi)發(fā)完成。ObjectARX是AutoDesk公司針對(duì)AutoCAD平臺(tái)上的二次開(kāi)發(fā)而推出的一個(gè)開(kāi)發(fā)軟件包,提供了以C++為基礎(chǔ),面向?qū)ο蟮拈_(kāi)發(fā)環(huán)境及應(yīng)用程序接口,能真正快速的訪(fǎng)問(wèn)AutoCAD圖形數(shù)據(jù)庫(kù)。
示坡線(xiàn)批量自動(dòng)繪制的基本思路為:首先需要獲得一張地形圖文件的等高線(xiàn)實(shí)體,進(jìn)一步獲取需要進(jìn)行示坡線(xiàn)處理的對(duì)象集合。其次,依次判斷對(duì)象集合中的每個(gè)對(duì)象實(shí)體,找到示坡線(xiàn)的繪制位置。最后,結(jié)合輸入地形圖的比例尺信息,確定每個(gè)對(duì)象實(shí)體示坡線(xiàn)的長(zhǎng)度和方向,并繪制示坡線(xiàn),進(jìn)而實(shí)現(xiàn)整張地形圖示坡線(xiàn)的批量自動(dòng)繪制。
在ObjectARX語(yǔ)言實(shí)現(xiàn)過(guò)程中,可利用acutBuildList函數(shù)方便實(shí)現(xiàn)框選或通選獲取示坡線(xiàn)處理的對(duì)象ID集合,后逐個(gè)對(duì)象進(jìn)行示坡線(xiàn)繪制處理。在對(duì)單個(gè)對(duì)象進(jìn)行處理時(shí),先開(kāi)辟一個(gè)點(diǎn)集合數(shù)組AcGePoint3dArray,裝載當(dāng)前處理對(duì)象的頂點(diǎn),依據(jù)兩點(diǎn)間距離最大準(zhǔn)則,通過(guò)循環(huán)運(yùn)算,確定需要繪制示坡線(xiàn)的兩個(gè)端點(diǎn)位置;以該兩端點(diǎn)位置連線(xiàn)方向?yàn)槭酒戮€(xiàn)方向;基于成圖比例尺確定示坡線(xiàn)的長(zhǎng)度,綜合位置、方向和長(zhǎng)度繪制單個(gè)對(duì)象的示坡線(xiàn),最后將示坡線(xiàn)歸化至相應(yīng)的圖層中,即完成單個(gè)對(duì)象的示坡線(xiàn)繪制工作。
基于上述方法和ObjectARX技術(shù)實(shí)現(xiàn)的示坡線(xiàn)批量自動(dòng)繪制功能,直接以DLL或ARX方式加載到以CAD平臺(tái)環(huán)境搭建的程序中,能夠?qū)崿F(xiàn)與其他CAD功能的很好整合,運(yùn)行效率較高,使用方便,很好地彌補(bǔ)了傳統(tǒng)手工繪制示坡線(xiàn)的不足,大大提高了制圖效率。通過(guò)示坡線(xiàn)繪制探索,基于ObjectArx開(kāi)發(fā)包,進(jìn)行了如圖1所示的開(kāi)發(fā)流程設(shè)計(jì)。
圖1 批量處理示坡線(xiàn)內(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; } //確定示坡線(xiàn)長(zhǎng)度及方向 pt1.x=maxx1; pt1.y=maxy1; pt1.z=0; ppt1.x=maxx2; ppt1.y=maxy2; ppt1.z=0; angle=Cangle(pt1,ppt1);//求兩點(diǎn)的方位角 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格式批量示坡線(xiàn)繪制程序,然后打開(kāi)待處理的地形圖文件,直接在命令窗口給出相應(yīng)的CAD命令,即可以將需要生成示坡線(xiàn)的等高線(xiàn)上,全部自動(dòng)繪制上相應(yīng)比例尺的示坡線(xiàn)。除批處理方式外,亦可選擇制定待生成示坡線(xiàn)的等高線(xiàn),執(zhí)行即可,效果如圖2所示。 圖2 加載示坡線(xiàn)程序后CAD界面截圖 實(shí)踐表明,該方法結(jié)果正確,速度快,保證了示坡線(xiàn)符號(hào)均勻、美觀。 采用AutoDesk CAD平臺(tái),運(yùn)用Visual C++編譯環(huán)境結(jié)合,完成了軟件的開(kāi)發(fā)利用。試運(yùn)行成功后,筆者定制了批處理程序,最終實(shí)現(xiàn)了等高線(xiàn)上全部自動(dòng)繪制相應(yīng)比例尺的示坡線(xiàn)。在生產(chǎn)中多次使用證明其正確性,僅示坡線(xiàn)這一部分的工作效率提高了80%。作業(yè)程序化,不僅大大減少了工作量,而且工作內(nèi)容也簡(jiǎn)化了許多,從而減少了人的因素對(duì)質(zhì)量的影響。地形圖的質(zhì)量更加標(biāo)準(zhǔn)化,減輕了作業(yè)人員的勞動(dòng)強(qiáng)度。 [1] GBT20257.1—2007 國(guó)家基本比例尺地圖圖示[S] [2] GB/T 13923—2006 基礎(chǔ)地理信息要素分類(lèi)與代碼[S] [3] GB/T20257.1—2007 國(guó)家基本比例尺地圖圖式第1部分:1∶500、1∶1000、1∶2000地形圖圖式[S] [4] GBT20257.2—2006 國(guó)家基本比例尺地圖圖式第2部分[S] [5] 《測(cè)量學(xué)》編輯委員會(huì).測(cè)量學(xué):下冊(cè)[M].北京:測(cè)繪出版社,19853 程序的調(diào)用及操作
4 結(jié)束語(yǔ)