侯祥意,盧姍,陶超
(1.廣州南方智能技術有限公司,廣東 廣州 510663; 2.《規劃師》雜志社,廣西 南寧 530029)
2000國家大地坐標系是國務院批準使用的新一代高精度地心坐標系。由于各行業歷史測繪成果主要采用1954北京坐標系和1980西安坐標系,因此需要建立坐標轉換模型和編制坐標轉換軟件,將原始測繪成果轉換到2000國家大地坐標系。原始測繪成果主要為CAD文件,主要包括DGN、DWG、DXF三種,CAD文件中的圖形對象主要包括空間幾何對象、符號表達要素、擴展屬性信息三大類。在坐標轉換過程中,嚴密無損轉換不僅要確??臻g幾何對象的坐標嚴密轉換、拓撲關系完整,還要保證符號表達要素、擴展屬性信息的完整一致性。
在諸多CAD文件坐標轉換的文章中,對DWG、DXF的轉換方法研究較多,如汪燕麟等提出建立大地坐標4參數轉換模型與AutoCAD軟件中仿射變換模型的聯系,研制坐標轉換軟件實現DWG文件的轉換[1];范沖等提出利用FME(Feature Manipulate Engine)轉換模板批量轉換DWG和DXF文件的方法[2];謝梓威等提出采用FME Object技術進行軟件開發實現對DWG數據的無損轉換[3]。
這些研究中,很少涉及CAD文件重要格式之一的DGN格式以及CAD成果一體化轉換且多數探討了CAD圖形空間坐標轉換的幾何精度,鮮少關注符號化表達樣式及擴展屬性信息的完整性。針對此問題,本文嘗試在構建嚴密可逆的多項式坐標轉換模型的基礎上,實現CAD文件的一體化動態無損轉換,并基于MicroStation平臺開發轉換軟件,高效穩定地實現坐標基準統一,促進數據共享。
MicroStation平臺是Bentley公司開發的CAD基礎平臺,其面向建筑、市政、水利、交通、地理信息等各行業的解決方案均基于該平臺構建。平臺歷經了95、2004、V8i、CONNECT Edition四個重要的版本階段。具有使用方便、功能強大、二三維一體化等特點,在全球擁有廣大的用戶。
MicroStation平臺提供了豐富的二次開發選項,基于COM組件的有VBA的二次開發和基于.NET框架的AddIn的開發方式以及基于其SDK的Native Code的開發方式。
DGN文件是MicroStation的主要文件格式,一個DGN文件包含多個模型,每個模型由若干元素組成,如線、面、圓弧、文本等。DGN文件的對象結構如圖1所示[4]:
DGN中的元素主要分為圖形類和非圖形類,圖形類元素內容主要包括空間坐標、符號化表達要素、擴展屬性信息三部分,需要進行坐標轉換;非圖形類元素沒有幾何圖形,沒有空間坐標,因此不需要進行坐標轉換。

圖1 DGN文件對象結構圖
RealDWG是Autodesk公司提供的軟件庫,它允許程序員通過C++和.NET對DWG和DXF文件本身進行讀寫。具備以下特征:
(1)支持AutoCAD R14及以上版本生成的DWG格式;
(2)在32位系統下,所產生的應用程序既可以在32位的Windows系統內運行,也可以在64位系統下運行;
(3)所產生的應用程序完全可以脫離AutoCAD獨立運行。
基于Bentley公司與Autodesk公司簽署的合作協議,MicroStation平臺直接使用RealDWG庫對DWG和DXF進行讀寫,操作后的DWG和DXF文件得到Autodesk公司的授權認證,確保了數據的完整性,不會發生精度損失、數據丟失等情況。采用最新的MicroStation平臺,可支持從2004到2018版本的DWG文件的互操作[5]。
2000坐標轉換采用雙二元三次多項式轉換模型進行擬合。以北京1954坐標系向CGCS2000坐標系轉換為例:已知同名點1954和2000坐標系下坐標(X54、Y54),(X2000、Y2000),待求的轉換系數為Aij,Bij,雙二元三次多項式模型表達式為:
以轉換后的國家2000坐標殘差平方和最小為條件,用上百對重合點進行擬合,采用最小二乘平差計算求取轉換參數[6]。統計分析表明,X、Y方向內符合精度均小于 4 mm,滿足精度要求。以北京1954向CGCS2000轉換為例,殘差分布如圖2所示:

圖2 北京1954-CGCS2000多項式轉換模型殘差分布圖
在求得北京1954至CGCS2000轉換的雙二元三次多項式系數后,CGCS2000至北京1954的轉換過程采用原系數進行迭代計算求得。
以北京1954至CGCS2000轉換為例,迭代方法如下所示:
利用北京1954至CGCS2000轉換的多項式系數進行CGCS2000至北京1954轉換,逆向迭代過程如下:
采用迭代法,由于只采用了一套參數,可以保證正向轉換和逆向轉換的嚴密無損,不會有誤差的積累。經過50次正逆向轉換測試,△X的平均值為 -0.000 000 000 014 901 2 m,△Y的平均值為0.000 000 000 028 405 3 m。
CAD文件中的圖形元素主要可分為簡單對象和復合對象,而圖形元素的核心是幾何圖形。幾何圖形的最基本單元是點,因此可以采用點對點的方式進行圖形的坐標轉換。轉換過程為:首先判斷是否為圖形元素,對于圖形元素劃分類型為簡單元素或者復合元素;其次,對于簡單元素,取出其構成坐標點,逐點進行轉換,對于復合元素,先取出其構成子元素,再取出其子元素構成坐標點,逐點進行轉換;第三步采用轉換后的坐標點依據其邏輯關系進行元素的幾何對象重構;最后復制原元素的符號化表達樣式、擴展屬性到新的元素,并將新坐標系的元素重繪到文件,舊坐標系的元素銷毀[7]。轉換流程如圖3所示:

圖3 點對點坐標轉換流程圖
采用點對點的坐標轉換方法,可以保證圖形的轉換精度以及圖形元素間拓撲關系的完整性,對于相鄰圖幅,不會存在縫隙、重疊、懸掛點等接邊問題。
在MicroStation中,并沒有簡單元素的定義,這里的簡單元素主要是為了論述方便,相較于下文中的復合元素而言,由點直接構成,可以單獨定義,沒有子元素。按照其特點,可分為如下幾類:
(1)一點定位元素,這類元素的幾何圖形是一個點,主要包括文本(TextElement)、文本節點(TextNodeElement,即多行文本),通過原點(Origin)進行空間定位,轉換時,計算原點轉換前后的坐標差值,使用元素的Move方法平移即可。對于標簽元素(TagElement),其在圖形上表示為一個箭頭,由于其作用主要是對圖形對象進行整飾、說明,拓撲上的要求小,因此也按照一點定位元素的坐標轉換方法進行轉換。一點定位元素示例如圖4(圖中十字絲表示原點位置):

圖4 一點定位元素示例
(2)多點定位元素,這類元素的幾何圖形由多個點構成,按照構造特征不同,主要可分為以下幾類進行轉換:
①點列表類:MicroStation中的點列表元素主要包括線(LineElement)、多邊形(ShapeElement)、曲線(CurveElement)三類,其幾何圖形由一組有序的坐標點構成,他們都繼承了VertexList對象。轉換時,通過GetVertices方法獲取其構成坐標點,對這些坐標點轉換后,使用ModifyVertex方法進行修改。在MicroStation中,可繪制的點也是一個長度為0的線元素。
②B樣條曲線(BsplineCurveElement):B樣條曲線在地形圖中很常見,主要用來表示等高線。在MicroStation中,主要通過GetPoles方法獲取樣條曲線的構成點,再對點進行坐標轉換,然后使用SetPoles方法重繪圖形。
③圓弧(ArcElement):圓弧可通過圓弧起點、圓弧中點、圓弧結點3點確定,因此在轉換時,通過獲取圓弧上的3點進行坐標轉換。
④圓、橢圓(EllipseElement):可通過3點確定一個橢圓,也可通過圓心、長半軸、短半軸確定一個橢圓,為了保持圖形的拓撲結構完整,采用3點確定橢圓的方法,轉換時獲取橢圓上的3個點進行轉換,再進行重繪。
⑤尺寸標注(DimensionElement):尺寸標注在CAD文件中很常見,主要是對元素幾何圖形的長度、距離、角度等幾何特征進行標注,多用于規劃、設計類圖紙,在地形圖中使用較少。一個標注元素主要由標注點、標注值、標注偏移三部分組成(如圖5所示),坐標轉換時不但要轉換標注點的坐標,還要根據新坐標值改變標注值。在MicroStation平臺,首先使用Point屬性獲取標注點坐標,進行坐標轉換后,使用DeletePoint方法刪除原坐標,再使用InsertReferencePoint方法更新坐標。標注值會重新計算并更新。

圖5 尺寸標注元素示例
多點定位元素示例如圖6所示:

圖6 多點定位元素示例
相對于簡單元素,復合元素是由兩個或多個簡單元素構成的復雜元素,作為一個實體存在于CAD文件中。CAD中的復合元素主要可分為復雜鏈、復雜多邊形、單元、共享單元四類。
(1)復雜鏈(ComplexStringElement):由兩個或多個直線、圓弧、曲線相連接而成的不閉合鏈。轉換時通過GetSubElements方法獲取子元素,再對子元素一一進行坐標轉換,再使用CreateComplexStringElement1方法創建新的復雜鏈元素,最后復制原復雜鏈元素的符號化表達樣式、擴展屬性信息,完成坐標轉換。復雜鏈元素示例如圖7所示:

圖7 復雜鏈元素示例
(2)復雜多邊形(ComplexShapeElement):由兩個或多個直線、圓弧、曲線相連接而成的閉合多邊形。轉換方法類似于復雜鏈元素的轉換方法。復雜多邊形元素示例如圖8所示:

圖8 復雜多邊形元素示例
(3)單元(CellElement):單元是一組元素的集合,主要分為圖形化單元和點類型單元兩類。單元中的每一個子元素的圖層、顏色、線型、線寬可以不一樣。轉換時通過GetSubElements方法獲取子元素,再對子元素一一進行坐標轉換,并轉換單元的原點,再使用CreateCellElement1方法創建新的單元,最后復制原單元元素的符號化表達樣式、擴展屬性信息,完成坐標轉換。單元示例如圖9所示:

圖9 單元示例
(4)共享單元(SharedCellElement):類似于AutoCAD中的塊,和單元相比,不同之處在于共享單元在一個DGN文件中只存儲一次其圖形元素,其余元素類似于存儲其索引位置,對任何一個共享單元圖形的修改都會修改所有同類單元。該類型多為圖形的填充符號。轉換方法類似于單元元素的轉換方法。
DGN中元素的屬性主要通過XData、DatabaseLink兩種方式存儲,主要存儲內容及轉換方法分別為:
(1)XData:xData對象可以按照類似于字典的鍵值對的方式存儲屬性,每一個元素可以有多個XData屬性組,每一個屬性組有唯一的“鍵”來標識,其屬性值可以存儲文本、數字、點、圖層等多種類型的值。轉換時,可通過HasAnyXData方法判斷元素是否有XData屬性,如果有,則逐項復制到轉換后的元素中[4]。XData對象結構如圖10所示:

圖10 XData結構圖
(2)DatabaseLink:DatabaseLink對象主要用于存儲元素與數據庫的鏈接鍵值,一個DatabaseLink主要由MSLink、Entity、LinkType三部分組成。MSLink相當于數據庫表的編號;Entity相當于對象在數據庫中的編號;LinkType表示數據庫的連接類型,有Oracle、Odbc、OleDb等類型。轉換時,可通過HasAnyDatabaseLinks方法判斷元素是否有DatabaseLink屬性,如果有,則逐項復制到轉換后的元素中。
圖形表達樣式主要包括圖層、顏色、線型、線寬、透明度、優先級、是否隱藏、是否鎖定、是否高亮以及閉合元素的是否填充、填充樣式、填充顏色等屬性。轉換時,需要將這些屬性逐項復制到轉換后的元素中。
通常,由于CAD文件中沒有設置坐標系,為了避免轉換混亂,需要對轉換情況進行記錄,因此可將轉換時間、轉換模型記錄到元素的XData屬性中,便于用戶查詢轉換情況。在記錄時,對于單元、共享單元等復合類元素的子元素也添加記錄屬性,則當復合元素打散后亦可查看。
根據以上CAD幾何圖形點對點轉換實現方法,本項目基于MicroStation V8i SS4(SELECTseries 4)平臺,采用基于.NET框架的AddIn的開發方式,開發平臺選擇Visual Studio 2015,開發語言采用C#進行開發。軟件主要提供按圍柵框選范圍轉換和按文件夾批量轉換兩種方式。
利用所開發的轉換軟件,共完成了南寧市 6 500 km2各類CAD圖件成果的轉換。主要轉換圖件如表1所示:

CAD圖件成果轉換統計表 表1
對轉換的CAD圖件,采用“二級檢查、一級驗收”的方式進行質量檢查。結果表明,本項目轉換成果精度無損失,檢查點位精度均在設計規定的限差范圍內;圖形要素不丟失、各要素齊全完整;屬性項無遺漏、屬性值正確;圖形屬性關聯準確;圖形要素間關拓撲關系與源數據一致;各圖幅間接邊完全對接,無縫隙、重疊等接邊問題。
本文提出了基于MicroStation平臺,利用其對DWG、DXF文件的互操作支持,在該平臺二次開發點對點坐標轉換軟件,實現了對DGN、DWG、DXF三種主要CAD格式文件的各類圖形元素的嚴密點對點轉換,實現了轉換前后其空間拓撲關系、符號化表達、擴展屬性信息的完整一致性。采用本文的方法與軟件,完成了南寧市 6 500 km2范圍內地形圖、地籍圖等各類CAD圖件成果的2000坐標轉換,共轉換各類DWG、DGN、DXF圖件上千幅,成果質量優等。因此,本文所提出的利用MicroStation平臺實現DGN、DWG、DXF三種格式的CAD圖件的動態無損坐標轉換方法具有可行性和穩定性,是一種值得推廣的坐標轉換方法。