李 哲, 姜占華+, 秦 俊, 余雪崗, 曲良東
(1.吉林大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院,吉林長春130012;2.吉林大學(xué)符號計算與知識工程教育部重點(diǎn)實(shí)驗室,吉林長春130012)
地理信息系統(tǒng)(geographic information system,GIS)應(yīng)用涉及很廣,例如交通、軍事等許多領(lǐng)域,人們已經(jīng)不滿足單機(jī)操作的GIS系統(tǒng),要求進(jìn)行信息的交流[1]。如何實(shí)現(xiàn)在線電子地圖傳輸,是實(shí)現(xiàn)GIS信息交流的核心問題之一。目前國內(nèi)外對在線電子地圖傳輸有一定研究成果,Buttenfield于2002年提出了一種傳輸單層矢量數(shù)據(jù)的方法,由于該方法只能處理簡單曲線,所以該方法局限性很大。Bisheng Yang于2005年提出了一種用于電子地圖數(shù)據(jù)傳輸?shù)姆椒ǎ撍惴ǖ臅r間效率不高[2]。由于目前的研究,時間效率都不是很高,針對此問題筆者提出一種基于數(shù)據(jù)庫預(yù)處理的在線電子地圖傳輸方法。
如圖1所示,本系統(tǒng)主要包括兩部分:電子地圖數(shù)據(jù)庫系統(tǒng)和多線程數(shù)據(jù)傳輸服務(wù)器。
(1)電子地圖數(shù)據(jù)庫系統(tǒng):將電子地圖以二進(jìn)制數(shù)據(jù)的形式存入數(shù)據(jù)庫,數(shù)據(jù)包括電子地圖圖元的經(jīng)緯度坐標(biāo)、圖元的屬性信息和圖元的標(biāo)注信息等。
(2)多線程數(shù)據(jù)傳輸服務(wù)器:接收和解析客戶端請求[3],服務(wù)器根據(jù)請求從數(shù)據(jù)庫提取數(shù)據(jù)傳輸給客戶端。
圖1 系統(tǒng)總體結(jié)構(gòu)
電子地圖數(shù)據(jù)庫系統(tǒng)預(yù)處理的電子地圖是Mapinfo格式的電子地圖。這種格式的電子地圖是由多個透明的圖層疊加到一起的。每個圖層包含了整個電子地圖的一個不同方面。例如:第一個圖層包含國道,第二個圖層包含省道等等,把它們疊加到一起就形成一幅完整的電子地圖[4]。在創(chuàng)建圖層時,都要為其建立一張表,使表與電子地圖建立起聯(lián)系。每個表包含兩部分:地圖信息和屬性信息。
電子地圖預(yù)處理采用的數(shù)據(jù)庫為SQL Server 2000。根據(jù)Mapinfo的MIF電子地圖公開格式,電子地圖的圖元數(shù)據(jù)信息包括:圖元的經(jīng)緯度坐標(biāo)、圖元的屬性(圖元的樣式、顏色等)、圖元標(biāo)注信息也就是圖元的名稱、圖元標(biāo)注信息的屬性(標(biāo)注的顏色、傾斜角等)。系統(tǒng)將整張電子地圖分成多個塊,每塊為300m*300m。將該塊內(nèi)的圖元數(shù)據(jù)信息提取出來,按照自定義協(xié)議將數(shù)據(jù)轉(zhuǎn)化成二進(jìn)制存儲到數(shù)據(jù)庫里。電子地圖數(shù)據(jù)按照協(xié)議存儲,服務(wù)器向客戶發(fā)送電子地圖數(shù)據(jù)時直接從數(shù)據(jù)庫里讀出數(shù)據(jù)傳輸給客戶,不需要再進(jìn)行協(xié)議轉(zhuǎn)化,節(jié)省處理時間。數(shù)據(jù)庫表字段定義如表1和表2所示。
表1 MapSummary(電子地圖塊集合)
表2 MapDataNum(電子地圖數(shù)據(jù)信息集合)
表1存儲的是電子地圖分塊的一些屬性信息。表2存儲的是電子地圖分塊內(nèi)的圖元數(shù)據(jù)信息,如果圖元僅有部分內(nèi)容在某一分塊內(nèi),存儲的信息則只包括在該分塊內(nèi)的信息。電子地圖數(shù)據(jù)信息在數(shù)據(jù)庫里以二進(jìn)制形式存儲,這樣存儲的原因是:電子地圖數(shù)據(jù)里有些信息是無法以單字節(jié)形式存儲的,例如-10,在單字符存儲時顯示為問號。當(dāng)我們存入數(shù)據(jù)庫時,數(shù)據(jù)庫顯示為問號,從數(shù)據(jù)庫讀出來時如果不經(jīng)過轉(zhuǎn)化也就成了問號,而轉(zhuǎn)化數(shù)據(jù)需要花費(fèi)比較多的時間,所以選擇不進(jìn)行轉(zhuǎn)化而是將字符數(shù)組里的圖元信息轉(zhuǎn)化成二進(jìn)制的形式直接存到數(shù)據(jù)庫里,這樣讀出來就以二進(jìn)制數(shù)據(jù)進(jìn)行傳輸而不會發(fā)生解析錯誤。
本協(xié)議基于TCP協(xié)議設(shè)計,因此,數(shù)據(jù)傳輸基本上認(rèn)為是可靠的了。在應(yīng)用層的協(xié)議設(shè)計過程中不再考慮可靠性問題。具體電子地圖傳輸協(xié)議如下所示:
type標(biāo)識,一個字節(jié)長,可以表示0~255,取3位數(shù),個位、十位和百位賦予不同的含義。
type的個位:0表示一個圖層或地圖數(shù)據(jù)傳輸完畢;1表示傳輸數(shù)據(jù)類型為點(diǎn)圖元;2表示傳輸數(shù)據(jù)類型為直線圖元;3表示傳輸數(shù)據(jù)類型為折線圖元;4表示傳輸數(shù)據(jù)類型為區(qū)域圖元。
type的十位:0表示一個圖層傳完;1表示一個圖層正在傳送;2表示新傳一個圖層。
type的百位:0表示電子地圖傳完;1表示一個電子地圖正在傳送中;2表示新傳電子地圖。
len兩個字節(jié)長,數(shù)據(jù)長度,表示數(shù)據(jù)的總長度為trilen的長度+dataxy的長度+propertydata的長度。
trilen兩個字節(jié)長,屬性數(shù)據(jù)的長度。
dataxy四個字節(jié)長,表示坐標(biāo),是由圖元的經(jīng)緯度坐標(biāo)轉(zhuǎn)化而得到的平面坐標(biāo),可以有多個坐標(biāo)。
propertydata兩個字節(jié)長,表示屬性數(shù)據(jù),例如圖元的名稱等。
本系統(tǒng)采用的軟件平臺為:MapX控件、VisualStudio2005和SQL Server 2000。MapX提供快速、易用、功能強(qiáng)大的電子地圖化組件,只需要設(shè)計階段將MapX控件加載到Visual Studio 2005,就可以對其編程,操作方便、簡單[5]。
在VisualStudio2005里把MapX控件加載到項目里,這樣我們就可以調(diào)用MapX里的函數(shù)對電子地圖進(jìn)行操作。通過調(diào)用MapX函數(shù)可以讀出圖元數(shù)據(jù)信息,其中圖元的經(jīng)緯度坐標(biāo)需要轉(zhuǎn)化成平面坐標(biāo),經(jīng)緯度坐標(biāo)為double類型,轉(zhuǎn)化成unsignedshort類型,減少了存儲數(shù)據(jù)量,可以提高傳輸效率[6]。將數(shù)據(jù)信息按照協(xié)議存儲到字符數(shù)組里,之后將字符數(shù)組存儲的數(shù)據(jù)轉(zhuǎn)化成二進(jìn)制形式存儲數(shù)據(jù)庫里。
下面主要介紹電子地圖圖元數(shù)據(jù)信息提取存入數(shù)據(jù)庫的流程,如圖2所示:
(1)取出地圖起始點(diǎn)(xs,ys)和終點(diǎn)(xe,ye)經(jīng)緯度坐標(biāo),令x1=xs,y1=ys。
(2)以(x1,y1)為起始點(diǎn)計算出大于x1且距x1為300m處的經(jīng)度坐標(biāo)設(shè)為x2,同理計算出緯度坐標(biāo)為y2,(x1,y1)、(x2,y2)就構(gòu)成了一個300m*300m的矩形,設(shè)為矩形A。
(3)選擇圖層,選擇矩形A區(qū)域內(nèi)的所有圖元,包括任何部分在區(qū)域內(nèi)的圖元,得到一個圖元集合。
(4)綁定數(shù)據(jù)源,使圖層與屬性數(shù)據(jù)庫建立一個索引關(guān)系,通過圖層里的圖元,就可以讀出圖元所對應(yīng)該的屬性信息。畫一個和矩形A一樣經(jīng)緯度的矩形圖元。
(5)從圖元集合中取出一個圖元,判斷是否為點(diǎn)圖元,如果不是,則求這個圖元與新畫矩形圖元的交集,并返回這個交集,其實(shí)是一個新圖元,如果是點(diǎn)圖元,什么也不操作。
(6)把由步驟(5)得到的圖元的數(shù)據(jù)信息按協(xié)議放到緩沖區(qū)里,經(jīng)緯度坐標(biāo)需要轉(zhuǎn)化成平面坐標(biāo),并判斷圖元集合內(nèi)的全部圖元數(shù)據(jù)信息是否放到緩沖區(qū)里,如果不是則跳到步驟(5)。
(7)刪除在步驟(4)畫的矩形圖元。把緩沖區(qū)里的信息轉(zhuǎn)化成二進(jìn)制形式,之后把相應(yīng)的信息存入數(shù)據(jù)庫里。
(8)x1=x2,x1是否大于xe,如果不大于則轉(zhuǎn)步驟(2)。
(9)y1=y2,y1是否大于ye,如果不大于則轉(zhuǎn)步驟(2),否則結(jié)束。
圖2 地圖數(shù)據(jù)存入數(shù)據(jù)庫系統(tǒng)流程
線圖元和區(qū)域圖元很有可能與新畫矩形圖元部分相交。如圖3所示,區(qū)域圖元A與矩形1和2都部分相交,如果矩形1存儲圖元A的信息,矩形2也存儲了圖元A的信息,圖元A的信息被重復(fù)存儲,有的區(qū)域圖元面積很大,可能跨越很多矩形塊,由于存在大量重復(fù)圖元信息,傳輸時間會加長,所以將圖元分割,只存儲圖元在矩形內(nèi)的部分。因此需要求圖元的交集,求圖元的交集調(diào)用MapX控件里函數(shù)。
[Feature=]OBJECT.IntersectFeatures(feature1[feature2])函數(shù)。此方法取Feature或Features對象和另一個Feature或Features對象的交集,返回的結(jié)果對象作為獨(dú)立的圖元。在求圖元交集時,遵循如下規(guī)則:
(1)如果區(qū)域重疊,則由此返回的圖元也是區(qū)域;
(2)區(qū)域覆蓋了線的一部分,則交集是由該區(qū)域覆蓋的線的一部分,返回的圖元為線圖元。
圖3 圖元相交
(3)如果兩個圖元相交于一點(diǎn),如圖3中矩形圖元1和線圖元B,返回的圖元為線圖元,但是只有一組坐標(biāo)點(diǎn),也就相交點(diǎn)的經(jīng)緯度坐標(biāo),線圖元至少有兩組坐標(biāo)點(diǎn),這樣我們認(rèn)為這是一個非法圖元,對于這樣的圖元我們需要添加缺失的坐標(biāo)點(diǎn)[7]。對于只有一個交點(diǎn)的兩個圖元求交,如果返回線圖元則補(bǔ)齊一組和交點(diǎn)一樣的經(jīng)緯度坐標(biāo),如果返回區(qū)域圖元則補(bǔ)齊3組和交點(diǎn)一樣的經(jīng)緯度坐標(biāo)。
傳輸系統(tǒng)主要是從數(shù)據(jù)庫里讀出電子地圖的二進(jìn)制數(shù)據(jù),直接發(fā)送發(fā)客戶端。具體如圖4所示:
(1)由于電子地圖數(shù)據(jù)在傳送過程中要保證數(shù)據(jù)完整性,如果數(shù)據(jù)丟失客戶端將無法解析,所以采用TCP協(xié)議,這樣能保證數(shù)據(jù)的完整。首先創(chuàng)建SOCKET。
(2)當(dāng)客戶端連接服務(wù)器時,電子地圖服務(wù)器產(chǎn)生一個子線程,在子線程里打開數(shù)據(jù)庫。
(3)接收客戶端數(shù)據(jù),按照協(xié)議解析數(shù)據(jù)。
(4)如果是初始化電子地圖,需要傳送81小塊電子地圖,也就是9大塊電子地圖,每一大塊電子地圖為900m*900m。根據(jù)客戶端傳送汽車坐標(biāo)來定位電子地圖塊號,再以這塊為中心,根據(jù)塊號來計算出它周圍的80塊的塊號,把這81塊地圖數(shù)據(jù)從數(shù)據(jù)庫中取出傳送給客戶端以畫出電子地圖,這81塊的范圍為2700m*2700m。如果是更新電子地圖則同理算出9小塊地圖傳送給客戶端。之后跳到步驟(2)等待接收客戶端數(shù)據(jù)。
圖4 多線程數(shù)據(jù)傳輸系統(tǒng)流程
實(shí)驗環(huán)境的搭建主要有兩臺PC機(jī),它們都安裝了Windows XP。硬件配置:CPU:Interl? Core?2 Dou CPU E7500,主頻:2.93GHz,內(nèi)存:2G。
如表 3所示,第 2行到第 9行每一行表示 9塊面積300m*300m電子地圖(相當(dāng)于一塊900m*900m)的數(shù)據(jù)量、傳輸時間及由此得出的傳輸效率,第10行表示這8次傳輸?shù)目倲?shù)據(jù)量、總傳輸時間和平均傳輸效率。由于采用了基于數(shù)據(jù)庫預(yù)處理方法,傳輸時間主要集中在讀取數(shù)據(jù)庫表,所以數(shù)據(jù)庫的設(shè)計直接影響傳輸時間,而與電子地圖本身基本無關(guān)。
表3 預(yù)取時間測試結(jié)果
目前在線電子地圖傳輸主要有兩種方式:方法1,是把Mapinfo的.DAT格式電子地圖轉(zhuǎn)化為.MIF,.DAT電子地圖格式是不公開的,所以有些電子地圖信息我們是得不到的,而.MIF電子地圖格式是公開的,通過這種格式我們可以得到我們想要的一些電子地圖信息[8]。方法2,是直接從Mapinfo電子地圖里讀出圖元數(shù)據(jù)信息傳送給客戶端。如表4所示:對于這兩種方法我做了一下時間測試,這兩種方我提取圖元的數(shù)據(jù)信息是相同的,所以傳輸數(shù)據(jù)量是一樣的。第2行到第9行每一行表示地圖面積為900m*900m的數(shù)據(jù)量、傳輸時間及由此得出的傳輸效率,電子地圖經(jīng)緯度范圍與表3對應(yīng)行地圖的經(jīng)緯度范圍相同,因為表3把面積為900m*900m的地圖又分割成9塊,每塊面積為300m*300m,所以數(shù)據(jù)量是不同的,分割電子地圖調(diào)用求圖元交集函數(shù)時添加一些坐標(biāo)和產(chǎn)生一部分新圖元,數(shù)據(jù)量有所增加。由表3、表4比較可知,本文所寫的方法雖然存儲數(shù)據(jù)量有所增加,但其平均預(yù)取數(shù)據(jù)效率大約是方法1的700倍,是方法2的130倍。
表4 傳統(tǒng)方法預(yù)取時間測試結(jié)果
從實(shí)驗結(jié)果來看,與傳統(tǒng)方法相比較,該方法有更好的性能,更高的數(shù)據(jù)提取效率,在保證了傳輸?shù)膶?shí)時性的前提下,提高了在線電子地圖的傳輸效率。
本文提出的基于數(shù)據(jù)庫預(yù)處理的在線電子地圖數(shù)據(jù)庫存儲方法,與前人方法對比,時間效率有明顯提高,達(dá)到預(yù)期效果。該方法已經(jīng)在車載信息系統(tǒng)項目中獲得應(yīng)用,針對電子地圖的預(yù)處理和電子地圖傳輸達(dá)到良好的效果。隨著研究的深入,今后還將在以下幾方面做深入的研究:研究電子地圖坐標(biāo)系統(tǒng),使經(jīng)緯度坐標(biāo)轉(zhuǎn)化平面坐標(biāo)更精確;壓縮電子地圖數(shù)據(jù)等。
[1]張立亭,祝國瑞,周世健.基于WebGIS的地圖數(shù)據(jù)傳輸關(guān)鍵技術(shù)[J].測繪通報,2004(4):52-55.
[2]劉建忠,齊華.矢量地圖數(shù)據(jù)漸進(jìn)式傳輸?shù)难芯縖J].鐵路計算機(jī)應(yīng)用,2007,16(3):5-7.
[3]霍佳,王英杰,王映輝,等.基于Web的統(tǒng)計電子地圖發(fā)布系統(tǒng)設(shè)計[J].計算機(jī)工程,2009,35(4):258-264.
[4]李勝樂,陸遠(yuǎn)忠.MapInfo地理信息系統(tǒng)二次開發(fā)實(shí)例[M].北京:電子工業(yè)出版社,2004.
[5]楊必勝,李清泉.World Wide Web(WWW)上矢量地圖數(shù)據(jù)的多分辨率傳輸算法[J].測繪學(xué)報,2005,34(4):355-360.
[6]胡鋼,徐緒堪,沈波,等.基于mapinfo三層結(jié)構(gòu)水利地理信息系統(tǒng)設(shè)計[J].計算機(jī)工程與設(shè)計,2006,27(22):4319-4321.
[7]王景存,陳彬,陳和平.GIS系統(tǒng)地圖快速顯示模型設(shè)計與實(shí)現(xiàn)[J].計算機(jī)工程與設(shè)計,2007,28(5):1179-1181.
[8]陳志軍,王丹.基于MapX的WebGIS系統(tǒng)[J].沈陽航空工業(yè)學(xué)院學(xué)報,2005,22(1):49-51.