劉 輝,劉 星,鄭 靜
(東北大學(xué) 信息科學(xué)與工程學(xué)院,遼寧 沈陽(yáng) 110819)
DXF到SVG圖元轉(zhuǎn)換關(guān)鍵問(wèn)題分析
劉 輝,劉 星,鄭 靜
(東北大學(xué) 信息科學(xué)與工程學(xué)院,遼寧 沈陽(yáng) 110819)
為了實(shí)現(xiàn)礦圖的重新發(fā)布,通過(guò)分析AutoCAD數(shù)據(jù)格式(DXF文件)和SVG格式標(biāo)準(zhǔn),建立DXF文件中的實(shí)體和SVG中的元素之間的對(duì)應(yīng)關(guān)系.詳細(xì)分析了關(guān)鍵的復(fù)雜圖元對(duì)象(文字,多線)以及非圖元對(duì)象(坐標(biāo)系,顏色)到SVG的轉(zhuǎn)換,以便更方便地運(yùn)用到WebGIS的礦圖發(fā)布.編程測(cè)試證明,重新發(fā)布的礦圖與原圖基本相同.
DXF;圖元;SVG
DXF文件是AUTODESK公司提出的一種專用的CAD數(shù)據(jù)交換格式,是一種具有專門格式的ASCII碼文本文件,比較好讀,易于被其它程序處理,主要用于實(shí)現(xiàn)高級(jí)語(yǔ)言編寫的程序與AutoCAD系統(tǒng)的連接,或其它CAD系統(tǒng)與AutoCAD之間的圖形文件交換[1].但是由于DXF不能描述空間信息的完整幾何模型,難以進(jìn)一步發(fā)展;其信息定義不完整,僅保留了原有系統(tǒng)數(shù)據(jù)結(jié)構(gòu)中的幾何和部分屬性信息,而大量的拓?fù)湫畔⒁巡粡?fù)存在;其信息描述方面也有許多缺陷,致使一些信息量過(guò)分冗長(zhǎng),文件格式比較復(fù)雜而且不盡合理[2].而XML(Extended Markup Language,可擴(kuò)展標(biāo)記語(yǔ)言)作為目前互聯(lián)網(wǎng)上廣泛流行的數(shù)據(jù)交換標(biāo)準(zhǔn),具有結(jié)構(gòu)化、可擴(kuò)展性以及靈活性等特點(diǎn),所以設(shè)計(jì)一種基于XML模式的可描述礦圖圖形的標(biāo)記語(yǔ)言對(duì)礦圖進(jìn)行描述.利用所生成的礦圖標(biāo)記語(yǔ)言(XML文件),作為中性文件可實(shí)現(xiàn)礦圖數(shù)據(jù)的交換和發(fā)布,還可利用關(guān)系數(shù)據(jù)庫(kù)實(shí)現(xiàn)對(duì)XML文件的管理.為了實(shí)現(xiàn)礦圖的重新發(fā)布,必須把礦圖標(biāo)記語(yǔ)言文件通過(guò)XSLT轉(zhuǎn)換語(yǔ)言轉(zhuǎn)換為另一種XML格式的文件——SVG.使用SVG可以在網(wǎng)頁(yè)上顯示出各種各樣的高質(zhì)量二維矢量圖形,包括圖像處理中常見的許多功能,如圖形、文字、動(dòng)畫、色彩和濾鏡效果等.但SVG不同于傳統(tǒng)的二維(平面)圖形,而是使用簡(jiǎn)單的一維(文本)指令,完成矢量圖形特征的描述[3].盡管DXF文件和SVG文件在表示方式上有一定的相似之處,都通過(guò)記錄圖形的特征數(shù)據(jù)來(lái)描述矢量圖形,但在有些實(shí)體的描述上,兩者存在差異,比如坐標(biāo)系、文字等[4].本文在此基礎(chǔ)上著重分析了關(guān)鍵圖元的轉(zhuǎn)換問(wèn)題.
DXF文件描述了AutoCAD圖形數(shù)據(jù)庫(kù)中所包含的全部信息,是圖形完全等價(jià)的矢量表達(dá)形式.DXF本質(zhì)上由代碼及關(guān)聯(lián)值對(duì)組成,稱為組碼和組值.每個(gè)組碼和組值各占一行,組碼是一個(gè)整數(shù),表明了其后數(shù)據(jù)元素的類型,也指出了數(shù)據(jù)元素對(duì)于給定對(duì)象(或記錄)類型的含意;組值是數(shù)據(jù)類型,根據(jù)組碼的數(shù)值可以是字符串型、整型或浮點(diǎn)數(shù)型等.通過(guò)使用這些配對(duì)的組碼和組值,DXF文件被組織成段,這些段由記錄組成,而記錄又由依次排列的組碼和數(shù)據(jù)條目組成.完整的DXF文件由7段SECTION組成,每段由一行組碼0及一行字符串SECTION開始,緊接著組碼2及一行表示段名稱的字符串;段的結(jié)束由一行組碼0及一行字符ENDSEC表示.這些段中的內(nèi)容由對(duì)象或圖元組成,而這些對(duì)象或圖元由標(biāo)志它們屬性的組碼和組值組成.整個(gè)文件以一行組碼0及一行EOF結(jié)束[5],其文件結(jié)構(gòu)如圖1所示.
SVG是一種標(biāo)準(zhǔn)、開放、可縮放的矢量圖形規(guī)范,是一種基于XML來(lái)描述二維矢量圖形和矢量/點(diǎn)陣混合圖形的置標(biāo)語(yǔ)言,是一種全新的矢量圖形規(guī)范.SVG圖形包括框架元素和圖形元素,框架元素能夠包含圖形元素和其他框架元素.
(1)主要的框架元素有