陳 艷,李建勇
(1.中國五冶集團有限公司,四川成都610063; 2.四川省第三測繪工程院,四川成都610500 )
淺談如何將多段線中的弧線段折線化
陳 艷1,李建勇2
(1.中國五冶集團有限公司,四川成都610063; 2.四川省第三測繪工程院,四川成都610500 )
將CAD數字化圖中帶弧段的多段線實體,用程序進行折線化,不僅可減少數據入庫時人工修改的工作量,提高工作效率,同時還可確保多線段實體的準確度和美觀性。
數字化圖; 弧段; 折線化
當下大數據時代已經來臨,用戶對各類數據的需求也不盡相同, Arcgis以其龐大的數據管理和分析功能逐漸地得到廣大用戶的認可。但在實際應用中,很多數據生產單位的作業人員更習慣以AutoCAD為平臺編輯數字化圖形,然后將編輯好的數字化圖形通過處理程序批量轉換為滿足Arcgis所要求的數據格式進行數據管理。在數據格式轉換過程中,不可避免地就會出現一個問題,生產人員為了讓一些圖形的拐角更圓滑和美觀,在使用CAD平臺下“PL”命令矢量化多線段實體時,會用弧線法生成弧線段,這些弧段在轉換到Arcgis平臺下后,線段中的弧段被直接拉直,與CAD數字化圖比較,在弧段處將會嚴重失真,在Arcgis平臺下選擇該線段與其他地物進行關系拓撲,將會產生許多小面或縫隙。
為了避免這種錯誤發生,許多生產單位禁止作業人員在CAD數字化圖中畫弧段,在有拐點的部位,人為加很多折線點。這就帶來兩個問題:(1)作業人員人為增加折線點,增加很多工作量;(2)作業人員加折線點的方法不當,會使弧段部分產生變形,與實際地形不符,圖面也不美觀(圖1)。

圖1 手繪帶弧段實體的變形
基于上面的弊端,筆者嘗試將CAD數字化圖里多段線實體中的弧段用程序進行折線化。
下面對CAD數字化圖中帶弧段的多段線實體進行系統的分析。
CAD數字化圖中,最基本的單元是實體,每個實體,對應一個或多個數據表,實體的每個屬性,對應著一個子表,如圖1中實體的數據表:((-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))。每個子表的第一位叫組碼,組碼10代表著多段線的折線點坐標。其后的組碼42代表著該點的凸度,凸度等于該點弧段四分之一圓心角的正切值。當凸度為0,表示該點是弧段的起點;當凸度為負數,弧段沿順時針方向彎曲;當凸度為正數,弧段沿逆時針方向彎曲。如圖2為弧段的相關參數。

圖2 弧段的相關參數
圖2中,假設AC為多段線的前進方向。其中a為弧段的圓心角;R為弧段的半徑。圖二中多段線實體的數據表為:((-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))。上數據表中畫線部分為B點的凸度,值為負,弧段順時針方向彎曲。設B點的凸度為td,b=a/4,BC點的二分之一平距為S,則:
b=atan(td);
a=4*b;
R=s/sin(a/2)
通過B、C點的坐標,可以求出FC的距離和S、F點的坐標;根據td、S,可以求出a、R的值;根據S、F點的坐標,可以求出圓心點D的坐標。進而計算DB的方位角,就可以在BC弧段上計算任意多個折線點。以D為圓心,DB為半徑,順時針向DC方向旋轉,當旋轉一定角度后,就可以求出一個折線點的坐標,當作業人員給定DB旋轉的最小角度,稱為步距。設步距為m,增加折線點個數為n,則:n=fix(a/m),n為整數。
基于AutoCAD的二次開發語言VISP編制的折線化程序流程見圖3。
將多段線實體中弧段用程序折線化后,整體效果如圖4所示。圖中的兩個實體均被程序折線化了,上面實體處于未選中狀態,直觀看和原來帶弧段的多段線實體一致,下面實

圖3 折線化程序流程
體處于選中狀態,則能看到新增了很多折線點。

圖4 多段線實體中的弧段用程序折線化前后的對比
弧段折線化前后面的對比如圖5所示。圖中弧段未折線化的實體面積為463 470 m2,弧段折線化后的面積為463 449 m2,相對誤差為1/12546,完全可以忽略不計。此實體折線化的步距為2°,如果要提高精度,還可將步距設置成小于2°。
雖然多段線實體中的弧段折線化后,增加了很多折線點,給共線拓撲構面帶來一些困難,但Arcgis平臺下專門有線段追蹤的功能,當一個圖斑實體折線化后,在構相鄰圖斑的面時,可直接進行線段追蹤,不需要逐點捕捉。多段線實體中的弧段折線化方法,解決了目前熟悉CAD操作的生產人員的習慣畫弧線的作業方式,且折線化法可行、可用。但長久之計還是要加大生產人員對Arcgis平臺的熟練運用,實現在Arcgis平臺下數據編輯、管理和分析統計一體化操作。

圖5 弧段折線化前后面的對比
TU198+.5
A
[定稿日期]2015-03-23