張習(xí)闞
(南京萊斯信息技術(shù)股份有限公司,南京 210000)
目前,各地正在進(jìn)行數(shù)字城市地理空間框架的探索和建設(shè),框架建設(shè)的重要數(shù)據(jù)來(lái)源則是現(xiàn)有的數(shù)字地形圖,但地形圖數(shù)據(jù)主要還是以DWG 文件的形式來(lái)存儲(chǔ)和管理,降低了地理數(shù)據(jù)的利用效率,同時(shí)也不利于了數(shù)據(jù)的共享和交換。由于CAD 數(shù)據(jù)模型與GIS 空間數(shù)據(jù)模型的不同,并沒(méi)有按照GIS 數(shù)據(jù)標(biāo)準(zhǔn)生成,所以現(xiàn)有的GIS 軟件不能直接對(duì)CAD 文件進(jìn)行如空間查詢(xún)、空間分析等操作,而以往單純依靠ArcEngine 提供的接口轉(zhuǎn)換又會(huì)丟失CASS 數(shù)據(jù)中的擴(kuò)展屬性,所以亟需通過(guò)編程方式來(lái)重新組織和存儲(chǔ)CAD 數(shù)據(jù),關(guān)聯(lián)各元素的空間信息和屬性信息,最終實(shí)現(xiàn)CAD 數(shù)據(jù)到GIS 空間數(shù)據(jù)的無(wú)損轉(zhuǎn)換[1]。
GIS 數(shù)據(jù)來(lái)源有很大一部分是AutoCAD 傳統(tǒng)制圖格式,而在某些行業(yè)比較普及的軟件—南方CASS 又占據(jù)相當(dāng)?shù)臄?shù)量。南方CASS 實(shí)際就是是通過(guò)對(duì)AutoCAD 二次開(kāi)發(fā),將圖形屬性存放在相應(yīng)要素的擴(kuò)展數(shù)據(jù)中。
Teigha.NET 是由開(kāi)放設(shè)計(jì)聯(lián)盟設(shè)計(jì)開(kāi)發(fā)的一套面向?qū)ο蟮闹С侄嗥脚_(tái)、多版本、多格式的DWG 文件的類(lèi)庫(kù),可脫離AutoCAD 環(huán)境實(shí)現(xiàn)DWG 文件的讀寫(xiě)操作、繪制渲染和轉(zhuǎn)換輸出等,具有較高的讀寫(xiě)效率和安全性。支持在微軟.NET 開(kāi)發(fā)平臺(tái)下使用,功能強(qiáng)大[2]。
Shapefile 文件是ArcGIS 軟件的數(shù)據(jù)文件之一,該文件格式已成為地理信息軟件界的一個(gè)開(kāi)放標(biāo)準(zhǔn),ArcGIS 軟件、SuperMap、QGIS 等軟件均將其當(dāng)作基本的數(shù)據(jù)文件。同時(shí),Shapefile 也是一種重要的數(shù)據(jù)交換格式,它能夠在其他GIS 平臺(tái)與ESRI 產(chǎn)品之間進(jìn)行數(shù)據(jù)的共享和互操作。
ArcEngine 是 建 立 在ESRI 的ArcObjects 組 件 之 上 的,ArcObjects 是ArcGIS 整個(gè)軟件體系的核心功能庫(kù),由獨(dú)立的COM 組件構(gòu)成。ArcEngine 在ArcObjects 組件上又進(jìn)行了一次封裝和優(yōu)化,可用來(lái)快速方便地開(kāi)發(fā)自定義GIS 應(yīng)用程序。
編程實(shí)現(xiàn)將DWG 格式轉(zhuǎn)換成SHP 格式其實(shí)就是使用ArcEngine 的接口讀取DWG 格式再寫(xiě)SHP 文件。在DWG 中同一圖層可以包括文字、點(diǎn)、線(xiàn)和面,而在SHP 文件中分點(diǎn)、線(xiàn)、面、注記圖層分別存放。為了便于數(shù)據(jù)的細(xì)化和管理,利用Teigha.NET 可以讀取CASS 數(shù)據(jù)中的XDATA 擴(kuò)展屬性的特性,讀出每個(gè)實(shí)體的編碼和地理要素類(lèi)型,再根據(jù)不同CASS 編碼和要素類(lèi)型再存放到對(duì)應(yīng)的圖層文件中。CASS 數(shù)據(jù)與SHP 數(shù)據(jù)轉(zhuǎn)換的對(duì)應(yīng)關(guān)系如圖1所示。
圖1 CASS數(shù)據(jù)與SHP數(shù)據(jù)轉(zhuǎn)換的對(duì)應(yīng)關(guān)系
如圖2 所示,首先分析CASS 數(shù)據(jù)各種地物的表達(dá)方式及其在ArcGIS 中對(duì)應(yīng)的各種地物的表達(dá)方式,將圖形數(shù)據(jù)轉(zhuǎn)換到ArcGIS 下。對(duì)幾何圖形要素直接進(jìn)行讀取并轉(zhuǎn)入ArcGIS 圖形數(shù)據(jù),屬性數(shù)據(jù)根據(jù)CASS 編碼以及數(shù)據(jù)的圖層、顏色、線(xiàn)型等進(jìn)行編碼轉(zhuǎn)入ArcGIS 屬性數(shù)據(jù)。數(shù)據(jù)中的擴(kuò)展屬性在ArcEngine中無(wú)法獲取的,所以通過(guò)引入Teigha.NET 來(lái)實(shí)現(xiàn)擴(kuò)展屬性的讀取。數(shù)據(jù)轉(zhuǎn)換完成后,ArcGIS 通過(guò)調(diào)用包括各類(lèi)地類(lèi)的符號(hào)庫(kù),根據(jù)要素屬性?xún)?nèi)容中的地類(lèi)編碼實(shí)現(xiàn)數(shù)據(jù)的符號(hào)化顯示。
圖2 CASS向ArcGIS數(shù)據(jù)轉(zhuǎn)換及顯示實(shí)現(xiàn)思路
整個(gè)功能基于VS.NET2012實(shí)現(xiàn),采用C#語(yǔ)言編程,利用Teigha.NET 和ArcEngine10.2組件庫(kù),實(shí)現(xiàn)了對(duì)CASS 數(shù)據(jù)的讀取、SHP 格式空間數(shù)據(jù)的生成和瀏覽。整個(gè)程序?qū)崿F(xiàn)過(guò)程完全脫離AutoCAD 平臺(tái),輕量簡(jiǎn)潔,并結(jié)合了具體項(xiàng)目需求進(jìn)行各種適用功能的量身定制,提高了CASS 數(shù)據(jù)到GIS 數(shù)據(jù)的轉(zhuǎn)換及顯示效率。
圖3是功能主界面圖,采用C#語(yǔ)言和ArcEngine10.2開(kāi)發(fā)實(shí)現(xiàn),視圖中顯示的是轉(zhuǎn)換后的高程點(diǎn)、水系設(shè)施、居民點(diǎn)等專(zhuān)題圖層。
基于Teigha.NET 與ArcEngine 的CASS 數(shù)據(jù)轉(zhuǎn)換系統(tǒng)利用Teigha.NET 對(duì)DWG 文件的強(qiáng)大的讀寫(xiě)功能,直接讀取DWG 中的文字、圖形、實(shí)體擴(kuò)展信息等,從而真正脫離了對(duì)AutoCAD 平臺(tái)的依賴(lài)。同時(shí),結(jié)合ArcEngine強(qiáng)大的數(shù)據(jù)轉(zhuǎn)換和顯示接口,實(shí)現(xiàn)了CASS 數(shù)據(jù)到Shapefile 數(shù)據(jù)的無(wú)損轉(zhuǎn)換,解決了以往單純依靠ArcEngine 進(jìn)行轉(zhuǎn)換丟失擴(kuò)展屬性的問(wèn)題,且提高了數(shù)據(jù)轉(zhuǎn)換的效率,在GIS 建庫(kù)項(xiàng)目中具有廣泛的應(yīng)用前景。
圖3 功能主界面