陳建文 石木耀 郭立新
(1. 上海海洋大學 海洋科學學院, 上海 201306;2. 華北理工大學 礦業工程學院, 河北 唐山 063210)
近30年來,在基礎測繪領域中通常采用歐特克計算機輔助設計(Autodesk Computer Aided Design,CAD)軟件制作工程測量圖,它們為國民經濟的發展提供了重要的基礎地理空間數據支持。隨著近些年“智慧城市”建設的興起,人們的日常生活越來越依靠地理空間信息服務,而作為城市規劃、資源利用、輔助決策的依據[1],更加需要整合多源異構的地理空間數據,構建統一的數據結構及屬性,形成一個共享數據庫平臺。
為此,國內學者展開了工程測繪數據向空間數據轉換的相關研究。李亭等[2]使用.sdb數據引擎將dxf地形圖文件轉換為Supermap簡單數據集,為空間數據庫的建立提供了技術依據。裴喜安[3]通過制定CASS碼和地理要素國標碼的參照表,采用VB.net和SuperMap Objects二次開發的方式,將CASS數據逐一地轉換為SuperMap數據。張麗娟等[4]首先基于空間數據轉換處理系統(Feature Manipulate Engine, FME)將CAD數據轉換為Mapinfo中間格式數據,再采用SuperMap Objects導入和轉換中間數據,實現了向SuperMap數據的轉換。以上技術方法滿足了SuperMap數據批量轉換的要求,為空間數據庫的建立起到了很好的助力作用。
然而,CAD數據圖形結構復雜、數據量大,在實際應用中常常會出現屬性信息丟失、數據冗余等狀況。因此,本文提出了一種新的構建SuperMap空間數據庫的方法,并結合數據實例進行了論證。通過消除數據模型差異,建立語義映射關系,完整保留了圖形的數據信息,提高了數據轉換的效率與準確性,實現了城市基礎地理空間數據的無損轉換和高效建庫,將對“智慧城市”的建設與發展提供基礎數據支撐。
CAD與地理信息系統(Geographic Information System,GIS)的側重點不同,因此,兩者在數據模型上存在本質上的區別。CAD數據模型側重于圖形的設計而忽略其屬性數據,且只以文件形式存儲。而GIS數據模型的設計側重于空間數據的分析和存儲,兼顧圖形和屬性信息的表達,支持文件和關系數據庫兩種存儲形式。
CAD通過點、線、符號等形式表達地理要素的幾何位置、形態、大小等屬性特征,其圖形數據存儲文件包括dwg和dxf兩種格式。dwg格式文件是最常用的圖形文件,由頭、實體、塊和表等部分組成,點、線、面等圖形元素按照特定的數據結構進行壓縮處理,以二進制形式記錄在文件中,相關的線形、注記、顏色等屬性與幾何數據一同封裝。
基于面向對象的思想,可將每個制圖元素看作為一個對象,基本的對象實體有塊、線、面、文本4類[5],如圖1所示。其中,塊是由任意若干個圖形元素構成的集合,一個塊就是一個實體,可作為一個整體進行插入、縮放等操作。線是由多個點組成的線實體,主要包括直線段(Line)、多段線(Ployline)、圓弧(Arc)、圓(Circle)、橢圓弧(EllipseArc)、射線(Ray)、圓環(Donut)、構造線(Xline)和樣條曲線(Spline)等多種類型。

圖1 CAD數據模型
SuperMap軟件是北京超圖公司研發的全組件GIS開發平臺,其數據通過數據集的形式組織和實現。數據集是同種類型數據的集合,分為矢量、柵格、影像數據集等,通常一個數據集對應一個圖層。其中,矢量數據集是由空間要素組成的集合(也稱為要素集),用于存儲和管理矢量數據,包括點、線、面數據集等。
矢量數據集存儲的空間幾何要素由數據集的類型決定,如面數據集只能存儲面要素,每個空間要素通過一條特定的記錄集來記錄其空間屬性[6]。具有不同空間特征和性質的地理實體,對應不同類型的Geometry對象。SuperMap數據模型如圖2所示,幾何對象可分為點(GeoPoint)、線(GeoLine)、面(GeoRegion)、文本(GeoText)等。線對象類型包括直線(GeoLine)、圓弧(GeoArc)、圓(GeoCircle)、橢圓弧(GeoEllipseArc)、橢圓(GeoEllipse)和B樣條曲線(GeoBSpline)。不同類型的線對象不能通過任意組合的方式來表達復雜的連續線狀地物。

圖2 SuperMap數據模型
圖元是圖形表示的最小單位,CAD數據與GIS數據之間的區別主要體現在圖元表達方式的不同。CAD中的基本圖元要素有點、塊、線、文本等,而SuperMap圖元有點、線、面和注記等。盡管兩者存在差異,但仍可建立圖元之間的對應關系,如表1所示,它是進行數據互操作的基礎。以面狀地物為例,CAD注重地物的視覺表達,不存在拓撲關系的反映,采用閉合多段線來表示面,但本質意義上還是線圖元;而SuperMap中具有嚴格意義的拓撲關系,面實體必須是連續封閉的。因此,建立CAD閉合多段線與SuperMap面圖元的對應關系。

表1 CAD與SuperMap圖元的對應關系

續表1
空間數據庫的構建需經過圖紙規范化預處理、數據讀取與轉換、數據檢查與修復等過程,如圖3所示。首先,在CAD工作環境下,根據制定的規范編輯處理原始工程圖數據;其次讀取dwg文件數據信息,并創建相應的數據集文件,再執行各種類型實體數據的轉換與寫入;最后檢查與修復轉換后的數據,完成SuperMap空間數據建庫。

圖3 空間數據庫構建流程圖
為提高數據轉換的效率和質量,須對原始圖紙數據進行規范化預處理[7-8],減少在轉換過程中可能出現的問題。現有工程圖紙數據多為不同時期測量采集,人工操作多,數據輸入操作不嚴謹,通常存在一些質量問題。因此,在編輯現有或繪制新CAD圖紙時,應制定一套處理規范,用于指導數據的編輯處理與新圖的繪制。良好的圖紙規范能夠使得現有測繪數據及其數字化成果既能滿足傳統制圖需要,又能適用于各種GIS軟件在顯示、分析等方面的應用。
圖紙規范的制定應主要考慮目標數據表達的需要,可做少量適當的修改,其部分要求如下:
(1)圖層劃分與命名:分層應盡量詳細,不同專題要素分層存放,各層圖形要素類型單一(如房屋圖層只含有面要素);每個圖層使用含義清楚的中文來命名。
(2)點狀要素:點類型的地物盡量采用塊參照表示。小型塊參照應保證是一個整體對象且未被打散,可直接作為點地物來轉換;大型塊參照可都打散,轉換成基本的圖形元素(如直線、圓弧、橢圓弧等線要素),有助于更好地轉換和顯示。對于塊參照對象的邊界,可再新建一個圖層進行相應繪制。
(3)線狀要素:合并屬于同一個線狀要素的若干個線狀圖形,保證線狀要素的連續性;線要素圖形不易修改時可新建一個圖層,復制圖形再進行修改或重新繪制。
(4)面狀要素:使用閉合的多段線命令繪制面狀圖形,未閉合的面(起點和終點距離十分接近)進行閉合處理。對于未閉合的單條多段線使用編輯多義線快捷命令,再直接選擇該線段使其閉合即可;對于未閉合的多條多線段,需先使用編輯多義線命令,再輸入多條命令來選中多條線段,最后使用合并命令使其全部閉合。總之,須確保面狀要素完全閉合。
(5)文字注記:需進行分層處理,且保證注記的整體性。
(6)圖形檢查和編輯:部分圖紙中存在不易被發現的問題(如圖形間的壓蓋現象),需對圖紙文件仔細檢查,并編輯處理問題數據。
dwg數據由Teigha.net類庫讀取。Teigha.net以前被稱為OpenDWG和DWGDirect,由開放設計聯盟(Open Design Alliance,ODA)設計開發的一套面向對象類庫、支持多個版本的dwg文件,可直接讀取dwg文件數據[9]。基于該類庫開發的應用程序,可脫離CAD軟件平臺獨立運行,高效安全。本研究采用的版本是Teigha.net 4.00,核心類庫在文件TD_Mgd_4.00_10.dll中。
在Teigha.Net for .dwg中,dwg文件在內存中由一個OdDbdatabase類的實例表示,以一系列對象的形式保存其各種信息。每個OdDbdatabase由9個符號表和1個對象字典組成,即視圖表(ViewTable)、文本樣式表(TextStyleTable)、線型表(LineTypeTable)、尺寸表(DimStyleTable)、視口表(Viewport Table)、用戶坐標系表(UCSTable)、注冊應用程序表(RegAppTable)、塊表(BlockTable)、層表(LayerTable)和對象字典(DBDictionary)。其中,層表和塊表分別包含多個層表記錄(LayerTableRecord)和塊表記錄(BlockTableRecord),層表記錄代表CAD圖層,圖形實體數據(點、直線、圓弧等)包含在塊表記錄中,如圖4所示。
根據數據庫結構,調用相應的類和方法即可訪問和獲取dwg文件中的實體數據和圖層等信息。例如,調用ReadDwgFile()方法讀取指定的dwg文件;調用GetType()方法獲得實體的不同類型,當實體類型為AcDbCircle時,表示獲取圓的信息。
2.3.2數據轉換
數據轉換的實現是通過調用Supermap Objects組件提供的相關函數方法和數據接口,創建空間數據集文件,轉換并寫入實體的幾何數據和屬性數據。參照圖元對應關系,以及兩者圖形實體對象間的屬性和方法,可歸納為以下4種實體類型(點、線、面和注記)的數據轉換:
(1)點轉換:CAD中的點狀圖形包括單點類型(DBPoint)和塊參照類型(Block Reference)。其方法是通過讀取圖形的坐標信息,利用X、Y坐標數據在點數據集中進行構點。
(2)線轉換:根據組合方式可分為簡單線和復雜線兩類。線轉換的基本方法是通過讀取線圖形的各個節點信息,然后在線數據集中順序連接節點進行構線。簡單線類型(如直線),通過讀取起點和終點坐標,連接兩點即可直接構線;復雜線類型(如圓弧),通過讀取圓弧的圓心、圓弧半徑、圓弧的起始角度、圓弧所掃過的角度等信息構造圓弧上的點,然后再進行構線。
(3)面轉換:CAD中無面狀圖形,通過閉合多段線(Polyline)實現面的表達。面轉換主要包括閉合多段線、圓、橢圓3種實體類型,圓和橢圓可看作是分段數趨于無窮的閉合多邊形。面轉換的基本方法是通過讀取面圖形的各個節點及其他相關信息,在面數據集中先進行構線,再通過ConvertToRegion()方法轉換生成為面對象,其平滑程度取決于等分的段數。例如,對于橢圓類型,通過讀取橢圓的圓心、長半軸、短半軸和旋轉角度(旋轉基點為橢圓的圓心)等信息,然后進行構線及構面。
(4)注記轉換:文字注記包括單行文本(DBText)和多行文本(MText)。注記的轉換方法是通過讀取文字注記的相關信息,在點數據集中進行繪制。其幾何信息來自插入的CAD文本基點,屬性信息來自文本內容。通過制作標簽專題圖的方式即可顯示注記的文本內容。
轉換后的數據文件可能包含一些圖形錯誤,并不能完全滿足實際需要。因此,在入庫之前需先比較轉換前后的數據丟失情況,并進行嚴格的質量控制。數據丟失情況可通過比較點、線、面圖形要素以及文本注記的正確轉換個數,以及圖形信息和屬性信息是否正確對應。質量控制是對點、線、面數據的幾何和屬性邏輯的可靠程度進行數據檢查,并采用相應的處理方法[10],主要包括圖形拓撲、分類編碼、擴展屬性等方面。例如:對房屋地物等面狀要素進行封閉檢查、重疊檢查和覆蓋檢查,針對問題數據進行面狀修復,并對結果進行統計,便于與原數據對照和修改。
通過自主編程的方式實現數據轉換,可達到簡化操作的效果。在Visual Studio 2010開發環境下,使用C#編程語言,引入Teigha.net類庫和SuperMap iObjects組件,開發了數據轉換系統(CAD2SuperMap),同時借助AutoCAD 2008、SuperMap iDesktop 9D軟件,對數據進行編輯預處理和檢查修復,最終實現了CAD數據向SuperMap空間數據的無損轉換。
系統采用某城區的基礎測繪數據進行了轉換試驗,數據包括JDE樓梯區域(7)、JDE門窗(744)、JDE墻(902)、JDE升電梯(40)、JDE收銀區域(1496)、JDE文字(47)、JDE消防樓梯(157)等共4006個圖形要素。圖4(a)~(b)為數據截圖,對比結果表明,點、線、面圖形要素以及文本注記均能正確轉換,完整地保留了圖形的數據信息和屬性信息,且圖面表達效果與原圖形保持一致。

圖4 轉換前后對比圖
轉換后的空間數據應能夠有效應用于地理信息系統,滿足空間分析、管理與輔助決策等方面的需要。即能夠對地理空間數據進行分析運算,提取其所需的潛在信息并提供決策支持,同時還能將分析所得的結果用可視化的方式進行表達,易于用戶理解和進一步利用。
空間分析是GIS的核心技術,也是區別于CAD及其他信息系統的主要特征,包括空間信息量算與查詢、緩沖區分析、疊加分析、路徑分析等方法。其中,空間信息量算是根據目標對象的空間位置,獲取地理要素間的距離、面積、方位等信息。在SuperMap軟件中打開轉換后的空間數據,選取其中樓梯的起終點、消防電梯的4個頂點,分別進行距離量算與面積量算,可知樓梯的總距離為2.34 m,消防電梯的面積為3.24 m2,如圖5所示。

圖5 空間信息量算結果
工程測量圖是地理空間數據建庫的重要數據源。通過對CAD數據模型和SuperMap數據模型的分析,建立了兩者的圖元對應關系,并制定了原始圖紙數據的預處理規范,同時利用開源類庫和組件提供的數據接口,實現了某城區工程測量數據的規范處理與讀取,以及向地理空間數據的無損轉換和入庫,最終建立了一個滿足空間可視化分析與應用的城市基礎地理空間數據庫。
然而,在實際應用中,CAD中的線型數據多而復雜,其處理工作及轉換模型還需進一步優化。未來,隨著“智慧城市”的興起與發展,將引入應用人工智能等新一代信息技術,提高多源異構城市基礎地理數據的自動整合效率和準確性,最終形成一個統一的城市地理空間數據共享平臺,全面地、智能化地融入城市建設、發展、規劃和決策等各個方面。