唐桂彬,周 波,劉 帥
(1.楊凌職業(yè)技術(shù)學(xué)院,陜西 楊凌712100;2.紅河學(xué)院 工學(xué)院,云南 蒙自 661100)
MapGIS是面向國(guó)土、地質(zhì)、水利水電、巖土、測(cè)繪等行業(yè)的國(guó)產(chǎn)地理信息系統(tǒng)優(yōu)選平臺(tái)。但是MapGIS在拓?fù)湓靺^(qū)時(shí)對(duì)區(qū)塊的處理采取隨機(jī)賦色的方式,想要將區(qū)塊分類顯示,需要給每個(gè)區(qū)塊逐一修改圖形參數(shù),這樣使得操作過(guò)程繁瑣而且容易出錯(cuò)[1-5]。作者經(jīng)過(guò)實(shí)踐,摸索出一種快速分類賦色的新方法,這種方法主要是通過(guò)修改MapGIS明碼文件,同時(shí)結(jié)合Excel的VLOOKUP函數(shù)及VBA編程語(yǔ)言來(lái)實(shí)現(xiàn)。
用MapGIS軟件的文件轉(zhuǎn)換功能可生成一種交換文件,可以通過(guò)Excel或是記事本對(duì)它進(jìn)行數(shù)據(jù)讀?。?-7],這種文件就是 MapGIS的明碼文件。點(diǎn)、線、區(qū)的明碼文件都是由文件頭和數(shù)據(jù)區(qū)組成。而區(qū)明碼文件的結(jié)構(gòu)最為復(fù)雜,除去文件頭之外,它總體上劃分成3部分,分別為弧段數(shù)據(jù)、節(jié)點(diǎn)數(shù)據(jù)和區(qū)數(shù)據(jù)[8-9]。表1給出了區(qū)明碼文件中弧段、節(jié)點(diǎn)和區(qū)的文件結(jié)構(gòu)。
從表1中可知,各區(qū)塊的填充顏色由區(qū)參數(shù)信息行的首行第1個(gè)數(shù)據(jù)項(xiàng)決定,其數(shù)值代表著具體的顏色號(hào)。而這個(gè)值則是由軟件在拓?fù)湓靺^(qū)的時(shí)候隨機(jī)賦給的,所以各個(gè)區(qū)塊的填充顏色基本上不一樣,要使得屬性值一樣的區(qū)塊能夠按照同一種顏色填充,就必須先將各區(qū)的屬性信息引入到區(qū)明碼文件中,建立區(qū)圖形參數(shù)與其屬性值的一一對(duì)應(yīng)關(guān)系。
圖1為某區(qū)域1∶1萬(wàn)土地利用現(xiàn)狀圖,且已經(jīng)完成了拓?fù)湓靺^(qū)、圖斑注記、屬性錄入和屬性檢查等,其已經(jīng)包含一個(gè)“地類碼”屬性項(xiàng)。由圖1可以看出地類碼相同(如52)的區(qū)塊顯示不同的隨機(jī)顏色。
表1 MapGIS的區(qū)明碼文件結(jié)構(gòu)
圖1 生成隨機(jī)色的土地利用現(xiàn)狀圖
1)在“區(qū)顏色”表中建立地類碼與顏色號(hào)的關(guān)系,即一個(gè)地類碼只與一個(gè)的顏色值匹配,且分別將地類碼和顏色號(hào)置于表內(nèi)第1列和第2列,其中,地類碼字段將會(huì)起到一個(gè)分類索引的作用。
2)在 MapGIS的區(qū)明碼文件中,除了區(qū)塊的ID、面積和周長(zhǎng)外,沒(méi)有記錄其他的屬性信息,同樣地,經(jīng)過(guò)分類賦色處理后新生成的明碼文件里面也只有默認(rèn)的3個(gè)屬性項(xiàng)。所以在編輯明碼文件之前,必須用原區(qū)文件來(lái)創(chuàng)建一個(gè)Label點(diǎn),把已經(jīng)錄好的屬性數(shù)據(jù)提取并保存下來(lái),方便后面給新的區(qū)文件賦屬性。
1)導(dǎo)出區(qū)明碼文件。進(jìn)入MAPGIS的“文件轉(zhuǎn)換”子系統(tǒng),利用其中的“MapGIS明碼格式”功能項(xiàng),輸出后綴名為WAP的區(qū)明碼文件。
2)導(dǎo)出屬性表文件。再進(jìn)入MapGIS的“屬性庫(kù)管理”子系統(tǒng),輸出以“區(qū)屬性.DBF”命名的區(qū)屬性表文件。用Excel打開(kāi)該文件,表中應(yīng)包含ID、面積、周長(zhǎng)和用于分類的屬性字段(此例中分類字段為地類碼)。
3)用Excel以逗號(hào)為分隔符號(hào)打開(kāi)區(qū)明碼文件。跳轉(zhuǎn)至區(qū)參數(shù)信息的首行,即第一個(gè)區(qū)的起始記錄位置,文件中A、I、J、K列分別表示區(qū)顏色、區(qū)ID號(hào)、面積和周長(zhǎng)(見(jiàn)圖2)。
在區(qū)明碼表中,選中第2行,并以K列(周長(zhǎng))為關(guān)鍵字進(jìn)行數(shù)據(jù)的自動(dòng)篩選,篩選條件為K列值非空,篩選出來(lái)的數(shù)據(jù)行將會(huì)以I列(ID號(hào))升序排列,數(shù)據(jù)行數(shù)與原區(qū)文件中的圖斑個(gè)數(shù)一致,即一行數(shù)據(jù)代表對(duì)一個(gè)區(qū)塊的記錄(見(jiàn)圖3)。再將區(qū)明碼表和區(qū)屬性表對(duì)照,表內(nèi)關(guān)于區(qū)塊ID號(hào)、面積和周長(zhǎng)的各條記錄均相同。
圖2 Excel中打開(kāi)的區(qū)明碼文件
圖3 Excel中篩選出的數(shù)據(jù)
Excel中的VLOOKUP函數(shù)能夠在表格或數(shù)組首列進(jìn)行縱向查找,并且返回當(dāng)前行中指定列序的數(shù)值。函數(shù)語(yǔ)法:VLOOKUP(查找值,查找區(qū)域,返回列序號(hào),邏輯值)[8],具體參看表2。VLOOKUP函數(shù)可以將明碼表分別與屬性表和顏色表進(jìn)行關(guān)聯(lián),先后引入地類碼值和顏色值到明碼表中,同時(shí)確保地類碼與ID號(hào)、地類碼與顏色號(hào)的對(duì)應(yīng)。
先于表中找一列空白位置,比如L列,在此列被篩選出來(lái)的各個(gè)單元格內(nèi)編寫(xiě)公式"=VLOOKUP(I∶I,區(qū)屬性 .DBF!$A∶$D,4,0)",其中,第1項(xiàng)查找值為一整列數(shù)值,即區(qū)明碼表中的I列(區(qū)ID號(hào))值;第2項(xiàng)指定搜索范圍控制在屬性表的A、B、C、D 4列中,即在這個(gè)區(qū)域內(nèi)尋找與I列匹配的同行數(shù)值;第3項(xiàng)給定列序號(hào)4,即取同行第4列值,這列值正好指代的是地類碼;第4項(xiàng)設(shè)定邏輯值0。執(zhí)行VLOOKUP函數(shù)后,地類碼值即可被引入到區(qū)明碼表中,如圖4所示。
表2 VLOOKUP函數(shù)
接下來(lái)在區(qū)明碼表的A列位置引入?yún)^(qū)顏色表中與地類碼匹配的顏色號(hào),因?yàn)锳列值控制的是各個(gè)區(qū)塊的填充顏色。類似地,在A列被篩選出來(lái)的各個(gè)單元格內(nèi)編寫(xiě)另一公式"=VLOOKUP(L∶L,[區(qū)顏色.xls]Sheet1!$A∶$B,2,0)",這時(shí)各區(qū)塊原來(lái)的顏色值被修改掉,取而代之的是從區(qū)顏色表中引進(jìn)來(lái)的與地類碼匹配的顏色號(hào),而不同的區(qū)塊有可能被賦上相同的顏色,這是由其地類碼是否具有同一性決定的(見(jiàn)圖5)。此處,第1項(xiàng)查找值也是一列數(shù)值,即區(qū)明碼表中的L列(地類碼)值;第2項(xiàng)指定搜索范圍控制在顏色表的A、B列,即在這個(gè)區(qū)域內(nèi)尋找與L列匹配的同行數(shù)值;第3項(xiàng)給定列序號(hào)2,即取同行第2列值,這列值正好指代的是顏色值;第4項(xiàng)仍然設(shè)定邏輯值0。
圖4 地類碼的引入
圖5 區(qū)塊顏色的修改
區(qū)塊顏色修改完畢后,取消掉明碼表中的自動(dòng)篩選,使所有數(shù)據(jù)行全部展開(kāi),將顏色號(hào)所在的A列內(nèi)容由公式轉(zhuǎn)換為數(shù)值形式,并清空L列(地類碼),將文件以CSV格式另存后再轉(zhuǎn)換為DAT數(shù)據(jù)格式。
圖6 VBA程序?qū)崿F(xiàn)流程圖
為了進(jìn)一步提高工作效率,在明確了手動(dòng)分類填色基本方法后,可將整個(gè)過(guò)程編寫(xiě)成VBA程序代碼,整個(gè)程序流程如圖6所示。
程序先從區(qū)屬性表中關(guān)聯(lián)地類碼,再?gòu)念伾碇幸肱c地類碼對(duì)應(yīng)的顏色號(hào),實(shí)現(xiàn)區(qū)的自動(dòng)賦色。下面給出了部分實(shí)現(xiàn)代碼:
完成程序編寫(xiě)后,可創(chuàng)建Excel的個(gè)人宏工作簿,多次執(zhí)行可對(duì)不同的區(qū)明碼文件進(jìn)行操作。圖7給出了程序執(zhí)行結(jié)果。
圖7 程序運(yùn)行結(jié)果
1)前述操作得到的是一個(gè)由CSV格式轉(zhuǎn)換而來(lái)的DAT數(shù)據(jù)文件,區(qū)塊分類賦色的結(jié)果僅保存在這個(gè)文件當(dāng)中,而區(qū)明碼文件的結(jié)構(gòu)內(nèi)容和導(dǎo)出時(shí)一樣,沒(méi)有發(fā)生改變,仍是標(biāo)準(zhǔn)的MapGIS區(qū)明碼文件格式,其中的區(qū)塊顏色也仍然是隨機(jī)色。因此,用記事本同時(shí)打開(kāi)區(qū)明碼文件和DAT數(shù)據(jù)文件,用DAT文件中的區(qū)數(shù)據(jù)部分替換掉明碼文件中的區(qū)數(shù)據(jù)部分,再刪除與明碼文件格式不符的多余逗號(hào),保存并退出程序,這時(shí)得到才是進(jìn)行過(guò)分類賦色處理的、格式標(biāo)準(zhǔn)的區(qū)明碼文件。
2)在“文件轉(zhuǎn)換”子系統(tǒng)中將區(qū)明碼文件轉(zhuǎn)換成區(qū)文件,導(dǎo)入到編輯子系統(tǒng)中后可以看到分類賦色的效果,如圖8所示,同類型的地塊顯示的是同一種顏色。然而,在這個(gè)區(qū)文件中沒(méi)有除默認(rèn)字段外的其他任何屬性,這就需要找到之前備份的Label點(diǎn),通過(guò)合并Label點(diǎn)的方式來(lái)恢復(fù)屬性數(shù)據(jù)。
1)該操作方法既能夠達(dá)到圖形對(duì)象分類符號(hào)化的目的,又能夠保持原始區(qū)文件的完整性,使它不會(huì)因?yàn)檫B串的編輯處理而受到破壞。
圖8 分類賦色后的土地利用現(xiàn)狀圖
2)該方法以MapGIS的交換文件作為編輯處理的對(duì)象,結(jié)合Excel的VLOOKUP函數(shù)及VBA編程語(yǔ)言,能達(dá)到使區(qū)塊快速分類賦色的效果,不僅效率較高,而且不會(huì)出現(xiàn)遺漏圖斑的情況,在某種程度上保證了作圖的質(zhì)量。特別是圖幅數(shù)量較大,圖件復(fù)雜程度較高時(shí),利用VBA程序來(lái)實(shí)現(xiàn)自動(dòng)分類填色更顯得方便、準(zhǔn)確。
3)MapGIS明碼文件還可以應(yīng)用于其他方面,比如面積的量算和統(tǒng)計(jì)、圖形數(shù)據(jù)的提取及飛點(diǎn)的清除等,這對(duì)于解決一些實(shí)際問(wèn)題是非常有幫助的。
[1]孫中原,李永樹(shù).基于MapGIS的土地儲(chǔ)備信息系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].測(cè)繪工程,2012,21(4):78-81.
[2]劉美松,吳新林,王滿春.充分利用MAPGIS的分析功能提高作圖效率[J].貴州地質(zhì),1998,15(4):377-380.
[3]汪玉瓊,趙傳明.MAPGIS制圖經(jīng)驗(yàn)二則[J].地礦測(cè)繪,2003,19(2):39-40.
[4]孫國(guó)慶,溫迎慶.基于 MAPGIS明碼文件實(shí)現(xiàn)區(qū)域自動(dòng)填充的實(shí)踐[J].西部探礦工程,2007(7):97-98.
[5]張印廷,何苗,張曉棠,等.MAPGIS明碼文件的研究與應(yīng)用[J].科技資訊,2009(16):9.
[6]段青梅,龍文華,丁天才,等.基于 MAPGIS明碼文件的繪圖轉(zhuǎn)換系統(tǒng)開(kāi)發(fā)及應(yīng)用[J].物探與化探,2005,29(1):50-52.
[7]王榮亮,曹代勇,戈連柱.基于 MAPGIS明碼文件的CBM組件開(kāi)發(fā)與應(yīng)用[J].中國(guó)礦業(yè)大學(xué)學(xué)報(bào),2002,31(4):392-395.
[8]王星捷.MapGIS點(diǎn)文件數(shù)據(jù)分析與讀取實(shí)驗(yàn)[J].測(cè)繪科學(xué),2013,38(1):112-115.
[9]葉志榮.MAPGIS點(diǎn)文件數(shù)據(jù)自動(dòng)導(dǎo)入CARIS的研究[J].海洋測(cè)繪,2007,27(6):68-70.