詹 昊,張?jiān)奇?/p>
(中水北方勘測(cè)設(shè)計(jì)研究有限責(zé)任公司航測(cè)遙感院,天津300222)
MapGIS主要的數(shù)據(jù)格式包括點(diǎn)、線及區(qū)數(shù)據(jù),對(duì)應(yīng)的明碼文件格式為WAT、WAL、WAP文件。
點(diǎn)的明碼文件內(nèi)包含6種數(shù)據(jù)的信息,常用的有兩種,即子圖與注記。子圖數(shù)據(jù)和注記所包含的信息量、各項(xiàng)的意義都不同。因此,算法將它們分開存儲(chǔ),分別定義子圖point結(jié)構(gòu)體和注記annotation結(jié)構(gòu)體,各項(xiàng)具體的描述作為結(jié)構(gòu)體的屬性。同一類型的結(jié)構(gòu)體實(shí)例添加到同一個(gè)ArrayList中,如將每一個(gè)point結(jié)構(gòu)體實(shí)體添加到pointArrayList中,以便于數(shù)據(jù)的檢索和查詢。同理,分別定義用于存儲(chǔ)線、弧段及區(qū)數(shù)據(jù)的結(jié)構(gòu)體和相應(yīng)的ArrayL-ist,對(duì)數(shù)據(jù)進(jìn)行有序的管理。
CASS中定義了 POINT、LINE、ARC、CIRCLE、PLINE、SPLINE,TEXT、SPECIAL等 8 種實(shí)體類型,對(duì)于每種實(shí)體類型建立結(jié)構(gòu)體,每種實(shí)體類型的具體描述作為結(jié)構(gòu)體的屬性。再根據(jù)CASS的圖層名定義ArrayList,如名稱為JMD的ArrayList,將屬于該圖層的結(jié)構(gòu)體(如point、pline等)添加到該ArrayList中。
以下為對(duì)PLINE實(shí)體類型結(jié)構(gòu)體的定義
要將MapGIS匹配為CASS格式,就需要源數(shù)據(jù)中包含標(biāo)示地物類型的國(guó)標(biāo)碼,該國(guó)標(biāo)碼以屬性的形式存儲(chǔ)在數(shù)據(jù)庫中。因此,點(diǎn)、線、注記的數(shù)據(jù)轉(zhuǎn)換就需要明碼文件和DBF屬性表。明碼文件用于提取數(shù)據(jù)的圖形信息,DBF表用來提取圖元的國(guó)標(biāo)碼以及高程信息。
有了圖元的國(guó)標(biāo)碼還不能確定其在CASS中的表現(xiàn)形式,需要建立國(guó)標(biāo)碼和CASS碼的聯(lián)系,即制作CASS對(duì)照表。
對(duì)照表采用文本文檔格式,內(nèi)容包括4列:“CASS碼國(guó)標(biāo)碼圖層名實(shí)體類型角度”。算法要根據(jù)MapGIS數(shù)據(jù)屬性庫中的國(guó)標(biāo)碼先在對(duì)照表中找到對(duì)應(yīng)的CASS碼、圖層名、實(shí)體類型,以及角度;然后根據(jù)實(shí)體類型結(jié)構(gòu)體的定義在明碼文件中提取相應(yīng)信息,再按照?qǐng)D層的順序?qū)懗?.cas文件。
1)MapGIS中點(diǎn)符號(hào)的角度起算位置和CASS中不盡相同,如一個(gè)點(diǎn)狀地物,在MapGIS中旋轉(zhuǎn)一定的角度,在CASS中并不旋轉(zhuǎn),這就需要將該點(diǎn)的旋轉(zhuǎn)角全部減掉。這時(shí)要在對(duì)照表的最后一列,“角度”中進(jìn)行標(biāo)注,如“-all”為不旋轉(zhuǎn),“-90”為在原角度的基礎(chǔ)上減掉90°。
2)若PLINE的圖層名為“DGX”,則該P(yáng)LINE的“nihe”參數(shù)應(yīng)為“F”,即進(jìn)行樣條曲線擬合。
3)高程點(diǎn)、等高線需要在屬性數(shù)據(jù)庫中提取高程數(shù)據(jù)。
4)注記可以CASS碼“140009”表示,統(tǒng)一放在“ZJ”圖層。
轉(zhuǎn)換區(qū)文件時(shí),簡(jiǎn)單的區(qū),即由一個(gè)環(huán)構(gòu)成的區(qū),可以通過為其賦予CASS碼,以PLINE線或其他形式寫到*.cas中進(jìn)行轉(zhuǎn)換;復(fù)雜的區(qū),即由多個(gè)環(huán)構(gòu)成的區(qū),*.cas中則不包含由多個(gè)環(huán)構(gòu)成區(qū)的表示方法。如圖1所示,圖(a)為在CASS中以AutoCAD的繪圖命名畫的polyline線并填充;圖(b)為將其生成*.cas交換文件再讀入到CASS中的效果,可以看到只有polyline線完成導(dǎo)入,填充部分丟失。
圖1 部分動(dòng)畫制作界面
因此,本文提出了將MapGIS區(qū)文件寫成Auto-CAD的交換文件 DXF格式的方法,將 DXF導(dǎo)入CASS再匹配CASS碼,能夠?qū)?shù)據(jù)正確、完整地導(dǎo)入CASS軟件。
DXF文件是由成對(duì)的整數(shù)代碼和與代碼關(guān)聯(lián)的值組成的,AutoCAD將代碼稱為組碼,代碼關(guān)聯(lián)的值稱為組值,每個(gè)組碼和組值都各占一行。
完整的DXF文件由6個(gè)段和結(jié)束標(biāo)志組成,每段都是以一個(gè)其后跟隨著字符串SECTION的組碼0開始,接著是組碼2和表示段名稱的字符串(如HEADER)。每個(gè)段內(nèi)容都是由元素的組碼和組值組成。其后跟著字符串ENDSEC的組碼0表示該段結(jié)束。文件結(jié)束標(biāo)志用組碼0和字符串EOF。
以下為DXF對(duì)一個(gè)環(huán)狀填充的描述實(shí)例。如表1所示。
表1
續(xù)表1
本文將試驗(yàn)數(shù)據(jù)進(jìn)行轉(zhuǎn)換,將區(qū)數(shù)據(jù)轉(zhuǎn)換成的DXF文件以塊的形式插入由點(diǎn)、線轉(zhuǎn)換成的DWG中,打散,匹配CASS碼即可完成全部數(shù)據(jù)的轉(zhuǎn)換。如圖2所示。
圖2
1)本文提出的將MapGIS點(diǎn)、線、注記數(shù)據(jù)寫成*.cas導(dǎo)入 CASS,將區(qū)數(shù)據(jù)寫成 DXF導(dǎo)入 Auto-CAD的轉(zhuǎn)換方法,數(shù)據(jù)轉(zhuǎn)換正確、完整,算法正確。
2)本數(shù)據(jù)轉(zhuǎn)換方法中決定數(shù)據(jù)轉(zhuǎn)換質(zhì)量的關(guān)鍵是CASS對(duì)照表的制作,制作過程中應(yīng)綜合參考CASS安裝目錄下的work.def文件及國(guó)家地類碼標(biāo)準(zhǔn)來決定地物類型。
3)CASS對(duì)照表可在一次次的數(shù)據(jù)轉(zhuǎn)換中不斷完善。因此,后期的工作量會(huì)越來越小。況且,本方法將點(diǎn)、線、注記寫為*.cas文件,轉(zhuǎn)換后編輯工作量較小,只需要手工為區(qū)數(shù)據(jù)匹配CASS碼。因此,本方法對(duì)于大批量的數(shù)據(jù)轉(zhuǎn)換,能夠較大程度的縮減工作量,提高工作效率。
[1]申娜,張福利,王輝.南方CASS交換文件的結(jié)構(gòu)分析和應(yīng)用[J].城市勘測(cè),2008(6):129-131.
[2]陳浩,陳宏.解讀AUTOCAD的DXF文件[J].貴州科學(xué),2002,20(4):125-127.