周義軍
摘 要:一直以來(lái),基礎(chǔ)地形圖在建庫(kù)時(shí),都需要將DWG格式文件轉(zhuǎn)換為SHP格式文件。該文從另一個(gè)角度,利用AutoCAD Map和Oracle spatial的二次開(kāi)發(fā),探索出一種DWG數(shù)據(jù)直接建庫(kù)的方法,并且嘗試的解決了歷史數(shù)據(jù)的存儲(chǔ)、更新和分析等問(wèn)題。
關(guān)鍵詞:Oracle Spatial REALDWG ODP.NET
中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-3791(2017)04(b)-0022-03
目前,基礎(chǔ)地理信息數(shù)據(jù)建庫(kù)的思路和方案有很多,多數(shù)以GIS數(shù)據(jù)作為基本數(shù)據(jù)進(jìn)行數(shù)據(jù)庫(kù)建設(shè)。但就我國(guó)的具體情況來(lái)看,各個(gè)城市院多沿用以前的作業(yè)模式,繼續(xù)采用AutoCAD生產(chǎn)地理信息數(shù)據(jù),在建庫(kù)前,需將DWG數(shù)據(jù)轉(zhuǎn)化成GIS數(shù)據(jù),這樣一來(lái)建庫(kù)的效率就降低了。
該文從另一個(gè)角度,利用AutoCAD Map和Oracle spatial的二次開(kāi)發(fā),探索出一種DWG數(shù)據(jù)直接建庫(kù)的方法,并且嘗試的解決了數(shù)據(jù)的存儲(chǔ)、更新和分析等問(wèn)題。
1 Oracle Spatial及其在空間數(shù)據(jù)存儲(chǔ)方面的應(yīng)用
1.1 Oracle Spatial簡(jiǎn)介
Oracle是一種對(duì)象—關(guān)系數(shù)據(jù)庫(kù),它支持自定義的數(shù)據(jù)類(lèi)型,可以用數(shù)組、結(jié)構(gòu)體或者帶有構(gòu)造函數(shù)、功能函數(shù)的類(lèi)來(lái)定義自己的對(duì)象類(lèi)型。這樣的對(duì)象類(lèi)型可以用于定義屬性列的數(shù)據(jù)類(lèi)型,也可以用來(lái)創(chuàng)建對(duì)象表。而Oracle Spatial也正是基于此種特性所開(kāi)發(fā)的一套空間數(shù)據(jù)處理系統(tǒng)。Oracle Spatial定義了一套用于存儲(chǔ)和操作空間數(shù)據(jù)的對(duì)象,可以存儲(chǔ)點(diǎn)、線、面和多點(diǎn)、多線、多面及弧、圓或者混合對(duì)象。Oracle定義的空間數(shù)據(jù)存儲(chǔ)對(duì)象與OGC定義的簡(jiǎn)單要素規(guī)范一致,對(duì)象涵蓋了空間對(duì)象的各種類(lèi)型。
1.2 Oracle Spatial用于空間數(shù)據(jù)存儲(chǔ)
Oracle Spatial主要通過(guò)元數(shù)據(jù)表、包含空間數(shù)據(jù)字段的要素類(lèi)表和空間索引來(lái)管理空間數(shù)據(jù),在此基礎(chǔ)上提供一系列空間查詢(xún)和空間分析的函數(shù),讓用戶(hù)進(jìn)行深層次的GIS開(kāi)發(fā)。
Oracle Spatial使用元數(shù)據(jù)表來(lái)記錄存儲(chǔ)每個(gè)要素類(lèi)的表,元數(shù)據(jù)表存儲(chǔ)了空間數(shù)據(jù)的數(shù)據(jù)表名稱(chēng)、空間字段名稱(chēng)、空間數(shù)據(jù)的坐標(biāo)范圍、坐標(biāo)參考信息以及坐標(biāo)維數(shù)說(shuō)明等信息。用戶(hù)必須通過(guò)查詢(xún)?cè)獢?shù)據(jù)表才能知道是否存在某個(gè)用于存儲(chǔ)空間數(shù)據(jù)的表。而每個(gè)存儲(chǔ)空間數(shù)據(jù)的表除了包括各個(gè)屬性字段以外,必須包括一個(gè)類(lèi)型為SDO_GEOMETRY的字段,用于存儲(chǔ)要素類(lèi)的空間數(shù)據(jù)。如圖1所示,SDO_GEOMETRY里面的元素包括:要素的類(lèi)型( SDO_GTYPE) ;要素的坐標(biāo)(SDO_ORDINATES或是SDO_POINT) ;要素坐標(biāo)的解析方式( SDO_ELEM_INFO);要素的空間坐標(biāo)參照系(SDO_SRID) 。SDO_GEOMETRY數(shù)據(jù)類(lèi)型是存儲(chǔ)空間數(shù)據(jù)的關(guān)鍵,通過(guò)對(duì)這一數(shù)據(jù)類(lèi)型的解析,可以把坐標(biāo)還原為要素,并顯示出來(lái)。
每個(gè)要素類(lèi)除了對(duì)應(yīng)一個(gè)存儲(chǔ)該要素類(lèi)型表以外,還需要有對(duì)應(yīng)的索引表,采用R樹(shù)索引或四叉樹(shù)索引的方式對(duì)該要素類(lèi)建立索引,用來(lái)提高空間查詢(xún)和空間分析的速度。
1.3 Oracle Spatial空間數(shù)據(jù)訪問(wèn)方法
Oracle除了提供Oracle Spatial用于存儲(chǔ)空間數(shù)據(jù)以外,對(duì)Oracle Spatial也提供多種訪問(wèn)方法,主要包含OCI、OO4O、ODP.Net等。
OCI是Oracle調(diào)用接口(Oracle Call Interface)的簡(jiǎn)寫(xiě),它是ORACLE提供的面向C語(yǔ)言程序員的編程接口,同時(shí)提供了用于Boland C++和MicrosoftVisual C++的庫(kù)。
OO4O是Oracle本身所提供的OLE對(duì)象(OracleObjects forOLE) ,可以用來(lái)快速訪問(wèn)Oracle Spatial數(shù)據(jù)。
ODP.Net是Oracle調(diào)用接口(Oracle Data Provider for.NET)的簡(jiǎn)寫(xiě),是ORACLE提供的面向C#語(yǔ)言程序員的編程接口,同時(shí)提供用于C#.Net的庫(kù)。
該文采用通過(guò)ODP.Net進(jìn)行二次開(kāi)發(fā),可以實(shí)現(xiàn)Oracle Spatial空間數(shù)據(jù)的解析、讀取和保存,并實(shí)現(xiàn)與客戶(hù)端所處理數(shù)據(jù)的交互,從而可以在多個(gè)客戶(hù)端實(shí)現(xiàn)對(duì)空間數(shù)據(jù)的互操作。
2 AutoCAD Map與Oracle Spatial互動(dòng)原理
Autodesk軟件提供了強(qiáng)大的ReaLDWG組件庫(kù)為二次開(kāi)發(fā)提供了便利,通過(guò)二次開(kāi)發(fā)可在脫離AutoCADMap軟件環(huán)境下讀取、修改dwg格式的數(shù)據(jù)文件的功能定制,在運(yùn)行時(shí)裝入自定義開(kāi)發(fā)的應(yīng)用程序,可實(shí)現(xiàn)與AutoCAD Map的交互。而我們也可以通過(guò)ODP.Net組件開(kāi)發(fā)的模式,實(shí)現(xiàn)與Oracle數(shù)據(jù)庫(kù)的交互。這樣,從理論來(lái)說(shuō),以二次開(kāi)發(fā)的程序?yàn)闃蛄壕涂墒沟肁utoCAD Map與Oracle Spatial進(jìn)行交互。例如,通過(guò)ODP.Net組件的開(kāi)發(fā),將Oracle Spatial表中的空間要素解析出來(lái),生成AutoCAD軟件定義的相應(yīng)對(duì)象,并放到相應(yīng)圖層來(lái)加載,如圖2所示。
3 Oracle Spatial與AutoCAD數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換
根據(jù)上述的分析,Oracle和AutoCAD都提供二次開(kāi)發(fā)組件允許定制開(kāi)發(fā),開(kāi)發(fā)人員通過(guò)統(tǒng)一的開(kāi)發(fā)平臺(tái)將這兩款軟件的功能納入到統(tǒng)一的系統(tǒng)架構(gòu)中是完全可行的。該文采用Visual Studio 2010開(kāi)發(fā)平臺(tái),引用ODP.Net組件和RealDWG組件,實(shí)現(xiàn)了AutoCAD數(shù)據(jù)與Oracle數(shù)據(jù)庫(kù)的交互。
AutoCAD數(shù)據(jù)和Oracle數(shù)據(jù)庫(kù)的交互實(shí)質(zhì)上是兩個(gè)系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)之間的轉(zhuǎn)換。
數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換分為空間信息的轉(zhuǎn)換和屬性信息的轉(zhuǎn)換。
3.1 空間信息轉(zhuǎn)換
AutoCAD的空間數(shù)據(jù)結(jié)構(gòu)有點(diǎn)(DBPoint),塊(BlockReference),文本(DBText),多重文本(MText),線段(Line),Arc(?。喽尉€(Polyline),二維多段線(Polyline2d),三維多段線(Polyline3d),圓(Circle),面(MPolygon),圖案填充(Hatch)等。
Oracle Spatial的空間數(shù)據(jù)結(jié)構(gòu)有點(diǎn)(Point),多點(diǎn)(MULTIPOI NT),線段(LINE),復(fù)雜線段(MULTILINE),曲線(CURVE),復(fù)雜曲線(MULTICURVE),面(POLYGON),復(fù)雜面(MULTIPOLYGON)。
根據(jù)兩種數(shù)據(jù)結(jié)構(gòu)的特點(diǎn),該文依據(jù)表1的對(duì)應(yīng)關(guān)系進(jìn)行空間數(shù)據(jù)結(jié)構(gòu)的底層轉(zhuǎn)換,用“圖形類(lèi)型”屬性區(qū)分幾何類(lèi)型。
3.2 屬性信息的轉(zhuǎn)換
以塊(BlockReference)為例,將oracle數(shù)據(jù)庫(kù)中的塊信息轉(zhuǎn)換成AutoCAD的實(shí)體,需將塊的屬性信息,如顏色,圖層,線型,線型比例,線寬,名稱(chēng),旋轉(zhuǎn),注釋性,X比例,Y比例,Z比例等信息記錄下來(lái),程序根據(jù)這些信息生產(chǎn)AutoCAD實(shí)體。
4 實(shí)驗(yàn)
該文以天津市全市域的1∶2000地形圖為實(shí)驗(yàn)數(shù)據(jù),根據(jù)地形圖的特點(diǎn),通過(guò)圖形和屬性的相互轉(zhuǎn)換,將地形圖存儲(chǔ)到在oracle數(shù)據(jù)庫(kù)表中,出庫(kù)時(shí),依據(jù)數(shù)據(jù)庫(kù)表中的空間和屬性信息自動(dòng)生成AutoCAD實(shí)體,輸出到dwg文件總,達(dá)到自動(dòng)符號(hào)化的目的,做到了AutoCAD數(shù)據(jù)完全無(wú)損的存儲(chǔ)。
參考文獻(xiàn)
[1] 曹云剛,范東明.Oracle Spatial 在GIS中的應(yīng)用[J].測(cè)繪, 2002,25(4):167-169.
[2] H Liang,RW Ding,HX Zheng.The design and application of oracle spatial database[J].Science of Surveying&Mapping,2005(3):92-94.
[3] 梁鴻,丁仁偉,鄭紅霞.Oracle Spatial空間數(shù)據(jù)庫(kù)的設(shè)計(jì)及應(yīng)用[J].測(cè)繪科學(xué),2005,30(3):91-93.
[4] R Kothuri,A Godfrind,E Beinct.Pro Oracle Spatial for Oracle Database 11 g[M].Apress Berkelg,2007.
[5] 郭朝勇.AutoCAD R14二次開(kāi)發(fā)技術(shù)[M].北京:清華大學(xué)出版社,1999.
[6] 董春橋.AutoCAD二次開(kāi)發(fā)技術(shù)[J].土木工程與管理學(xué)報(bào), 1999,16(3):45-49.
[7] 袁源琳,張新長(zhǎng),黃健鋒,等,AutoCAD地形圖數(shù)據(jù)規(guī)整入庫(kù)的研究與應(yīng)用[J].測(cè)繪通報(bào),2013(5):84-88.
[8] 王會(huì)然,蔄茂金,甘偉.AutoCAD中地形圖符號(hào)、線型及圖案填充的實(shí)現(xiàn)方法[J].地礦測(cè)繪,2009,25(1):38-40.