陳 艷,李建勇
(1.中國(guó)五冶集團(tuán)有限公司,四川成都610063; 2.四川省第三測(cè)繪工程院,四川成都610500 )
淺談如何將多段線中的弧線段折線化
陳 艷1,李建勇2
(1.中國(guó)五冶集團(tuán)有限公司,四川成都610063; 2.四川省第三測(cè)繪工程院,四川成都610500 )
將CAD數(shù)字化圖中帶弧段的多段線實(shí)體,用程序進(jìn)行折線化,不僅可減少數(shù)據(jù)入庫(kù)時(shí)人工修改的工作量,提高工作效率,同時(shí)還可確保多線段實(shí)體的準(zhǔn)確度和美觀性。
數(shù)字化圖; 弧段; 折線化
當(dāng)下大數(shù)據(jù)時(shí)代已經(jīng)來(lái)臨,用戶(hù)對(duì)各類(lèi)數(shù)據(jù)的需求也不盡相同, Arcgis以其龐大的數(shù)據(jù)管理和分析功能逐漸地得到廣大用戶(hù)的認(rèn)可。但在實(shí)際應(yīng)用中,很多數(shù)據(jù)生產(chǎn)單位的作業(yè)人員更習(xí)慣以AutoCAD為平臺(tái)編輯數(shù)字化圖形,然后將編輯好的數(shù)字化圖形通過(guò)處理程序批量轉(zhuǎn)換為滿(mǎn)足Arcgis所要求的數(shù)據(jù)格式進(jìn)行數(shù)據(jù)管理。在數(shù)據(jù)格式轉(zhuǎn)換過(guò)程中,不可避免地就會(huì)出現(xiàn)一個(gè)問(wèn)題,生產(chǎn)人員為了讓一些圖形的拐角更圓滑和美觀,在使用CAD平臺(tái)下“PL”命令矢量化多線段實(shí)體時(shí),會(huì)用弧線法生成弧線段,這些弧段在轉(zhuǎn)換到Arcgis平臺(tái)下后,線段中的弧段被直接拉直,與CAD數(shù)字化圖比較,在弧段處將會(huì)嚴(yán)重失真,在Arcgis平臺(tái)下選擇該線段與其他地物進(jìn)行關(guān)系拓?fù)?,將?huì)產(chǎn)生許多小面或縫隙。
為了避免這種錯(cuò)誤發(fā)生,許多生產(chǎn)單位禁止作業(yè)人員在CAD數(shù)字化圖中畫(huà)弧段,在有拐點(diǎn)的部位,人為加很多折線點(diǎn)。這就帶來(lái)兩個(gè)問(wèn)題:(1)作業(yè)人員人為增加折線點(diǎn),增加很多工作量;(2)作業(yè)人員加折線點(diǎn)的方法不當(dāng),會(huì)使弧段部分產(chǎn)生變形,與實(shí)際地形不符,圖面也不美觀(圖1)。
圖1 手繪帶弧段實(shí)體的變形
基于上面的弊端,筆者嘗試將CAD數(shù)字化圖里多段線實(shí)體中的弧段用程序進(jìn)行折線化。
下面對(duì)CAD數(shù)字化圖中帶弧段的多段線實(shí)體進(jìn)行系統(tǒng)的分析。
CAD數(shù)字化圖中,最基本的單元是實(shí)體,每個(gè)實(shí)體,對(duì)應(yīng)一個(gè)或多個(gè)數(shù)據(jù)表,實(shí)體的每個(gè)屬性,對(duì)應(yīng)著一個(gè)子表,如圖1中實(shí)體的數(shù)據(jù)表:((-1 . <圖元名: 7ef5df88>) (0 . "LWPOLYLINE") (330 . <圖元名: 7ef5dcf8>) (5 . "F1") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbPolyline") (90 . 7) (70 . 0) (43 . 0.2) (38 . 0.0) (39 . 0.0) (10 602.101 391.989) (40 . 0.2) (41 . 0.2) (42 . 0.0) (10 1201.05 686.605) (40 . 0.2) (41 . 0.2) (42 . 0.0) (10 1340.5 729.998) (40 . 0.2) (41 . 0.2) (42 . 0.0)(10 1501.17 723.031) (40 . 0.2) (41 . 0.2) (42 . 0.0) (10 1591.22 682.867) (40 . 0.2) (41 . 0.2) (42 . 0.0) (10 1655.54 618.606) (40 . 0.2) (41 . 0.2) (42 . 0.0) (10 1689.31 541.492) (40 . 0.2) (41 . 0.2) (42 . 0.0) (210 0.0 0.0 1.0))。每個(gè)子表的第一位叫組碼,組碼10代表著多段線的折線點(diǎn)坐標(biāo)。其后的組碼42代表著該點(diǎn)的凸度,凸度等于該點(diǎn)弧段四分之一圓心角的正切值。當(dāng)凸度為0,表示該點(diǎn)是弧段的起點(diǎn);當(dāng)凸度為負(fù)數(shù),弧段沿順時(shí)針?lè)较驈澢?;?dāng)凸度為正數(shù),弧段沿逆時(shí)針?lè)较驈澢?。如圖2為弧段的相關(guān)參數(shù)。
圖2 弧段的相關(guān)參數(shù)
圖2中,假設(shè)AC為多段線的前進(jìn)方向。其中a為弧段的圓心角;R為弧段的半徑。圖二中多段線實(shí)體的數(shù)據(jù)表為:((-1 . <圖元名: 7ef639b8>) (0 . "LWPOLYLINE") (330 . <圖元名: 7ef5dcc0>) (5 . "FC7") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbPolyline") (90 . 3) (70 . 0) (43 . 3.0) (38 . 0.0) (39 . 0.0) (10 3462.5 659.869) (40 . 3.0) (41 . 3.0) (42 . 0.0) (10 4061.45 954.485) (40 . 3.0) (41 . 3.0) (42 . -0.391332) (10 4549.71 809.372) (40 . 3.0) (41 . 3.0) (42 . -3.60688) (210 0.0 0.0 1.0))。上數(shù)據(jù)表中畫(huà)線部分為B點(diǎn)的凸度,值為負(fù),弧段順時(shí)針?lè)较驈澢TO(shè)B點(diǎn)的凸度為td,b=a/4,BC點(diǎn)的二分之一平距為S,則:
b=atan(td);
a=4*b;
R=s/sin(a/2)
通過(guò)B、C點(diǎn)的坐標(biāo),可以求出FC的距離和S、F點(diǎn)的坐標(biāo);根據(jù)td、S,可以求出a、R的值;根據(jù)S、F點(diǎn)的坐標(biāo),可以求出圓心點(diǎn)D的坐標(biāo)。進(jìn)而計(jì)算DB的方位角,就可以在BC弧段上計(jì)算任意多個(gè)折線點(diǎn)。以D為圓心,DB為半徑,順時(shí)針向DC方向旋轉(zhuǎn),當(dāng)旋轉(zhuǎn)一定角度后,就可以求出一個(gè)折線點(diǎn)的坐標(biāo),當(dāng)作業(yè)人員給定DB旋轉(zhuǎn)的最小角度,稱(chēng)為步距。設(shè)步距為m,增加折線點(diǎn)個(gè)數(shù)為n,則:n=fix(a/m),n為整數(shù)。
基于AutoCAD的二次開(kāi)發(fā)語(yǔ)言VISP編制的折線化程序流程見(jiàn)圖3。
將多段線實(shí)體中弧段用程序折線化后,整體效果如圖4所示。圖中的兩個(gè)實(shí)體均被程序折線化了,上面實(shí)體處于未選中狀態(tài),直觀看和原來(lái)帶弧段的多段線實(shí)體一致,下面實(shí)
圖3 折線化程序流程
體處于選中狀態(tài),則能看到新增了很多折線點(diǎn)。
圖4 多段線實(shí)體中的弧段用程序折線化前后的對(duì)比
弧段折線化前后面的對(duì)比如圖5所示。圖中弧段未折線化的實(shí)體面積為463 470 m2,弧段折線化后的面積為463 449 m2,相對(duì)誤差為1/12546,完全可以忽略不計(jì)。此實(shí)體折線化的步距為2°,如果要提高精度,還可將步距設(shè)置成小于2°。
雖然多段線實(shí)體中的弧段折線化后,增加了很多折線點(diǎn),給共線拓?fù)錁?gòu)面帶來(lái)一些困難,但Arcgis平臺(tái)下專(zhuān)門(mén)有線段追蹤的功能,當(dāng)一個(gè)圖斑實(shí)體折線化后,在構(gòu)相鄰圖斑的面時(shí),可直接進(jìn)行線段追蹤,不需要逐點(diǎn)捕捉。多段線實(shí)體中的弧段折線化方法,解決了目前熟悉CAD操作的生產(chǎn)人員的習(xí)慣畫(huà)弧線的作業(yè)方式,且折線化法可行、可用。但長(zhǎng)久之計(jì)還是要加大生產(chǎn)人員對(duì)Arcgis平臺(tái)的熟練運(yùn)用,實(shí)現(xiàn)在Arcgis平臺(tái)下數(shù)據(jù)編輯、管理和分析統(tǒng)計(jì)一體化操作。
圖5 弧段折線化前后面的對(duì)比
TU198+.5
A
[定稿日期]2015-03-23