郭 勇 , 李 敏 , 黃偉杰
(1. 信息工程大學(xué) 地理空間信息學(xué)院,河南 鄭州 450052;2. 72946部隊,山東 淄博 255000;3. 77200部隊,云南 昆明 650000)
地理空間信息服務(wù)構(gòu)件是在當(dāng)前復(fù)雜的應(yīng)用模式和計算環(huán)境下提出的概念[1]。傳統(tǒng)的對象技術(shù)和構(gòu)件技術(shù)不能滿足面向服務(wù)計算環(huán)境下地理空間信息服務(wù)產(chǎn)品的應(yīng)用開發(fā),而面向服務(wù)框架雖然較好地解決了面向服務(wù)計算環(huán)境下跨平臺和異構(gòu)數(shù)據(jù)的互操作等問題[2],但其主要實現(xiàn)技術(shù)Web Service 基于SOAP協(xié)議和HTTP 協(xié)議,傳輸效率不高。地理空間信息服務(wù)構(gòu)件可提供地理信息服務(wù),并可提供本地調(diào)用和網(wǎng)絡(luò)遠程調(diào)用等訪問方式,通過地理空間信息服務(wù)構(gòu)件可以實現(xiàn)跨平臺訪問和地理空間數(shù)據(jù)操作。為了在復(fù)雜的應(yīng)用環(huán)境中滿足多樣化的需求,在基于服務(wù)構(gòu)件的地理空間信息服務(wù)產(chǎn)品設(shè)計和開發(fā)過程中涉及很多關(guān)鍵技術(shù)。本文對其中多源異構(gòu)條件下的空間數(shù)據(jù)庫引擎和面向服務(wù)的空間數(shù)據(jù)綜合查詢進行了研究。
空間數(shù)據(jù)庫引擎(spatial database engine,SDE)是地理空間信息服務(wù)構(gòu)件的底層支撐技術(shù)。SDE的工作原理是[3]:客戶端向服務(wù)器端發(fā)出請求,服務(wù)器端處理請求并將其轉(zhuǎn)換為關(guān)系數(shù)據(jù)庫能夠處理的事務(wù),然后由數(shù)據(jù)庫完成相應(yīng)的請求,服務(wù)器端再將處理結(jié)果實時傳遞給客戶端。
空間數(shù)據(jù)一般可分為矢量數(shù)據(jù)和柵格數(shù)據(jù)。對于空間數(shù)據(jù)的存儲,在關(guān)系數(shù)據(jù)庫中常用的有2種方式:一種是使用WKB(well-known binary)來存儲空間實體,另一種是使用規(guī)范化SQL92方案進行存儲[4]。
1)矢量數(shù)據(jù)存儲。根據(jù)SQL92標(biāo)準(zhǔn),BLOB類型是一種標(biāo)準(zhǔn)的二進制大對象類型,可以用來存儲WKB描述的空間實體,如表1。其中的Geometry字段可以是由WKBGeometry表示的BLOB字段,也可以是自定義的二進制字段。
表1 矢量數(shù)據(jù)存儲結(jié)構(gòu)
2)柵格數(shù)據(jù)存儲。針對海量的柵格數(shù)據(jù),一般采用分層、分塊的金字塔結(jié)構(gòu)進行存儲。金字塔存儲結(jié)構(gòu)是一種多分辨率層次(multi-resolution hierarchy)模型,采用金字塔結(jié)構(gòu)并進行分塊存儲的數(shù)據(jù)相關(guān)表結(jié)構(gòu)描述如表2所示。其中各數(shù)據(jù)塊都是整體數(shù)據(jù)的一個子集,是將柵格數(shù)據(jù)進行無損切割所得。分塊時將每塊都分成一個矩形,大小可以根據(jù)實際應(yīng)用進行調(diào)整,常見的大小有64×64、128×128和256×256等若干種。存儲時,將數(shù)據(jù)塊的數(shù)據(jù)和相應(yīng)級別、行列號、外接矩形坐標(biāo)等一并進行存放,以便按索引進行數(shù)據(jù)的快速提取。
表2 柵格數(shù)據(jù)存儲結(jié)構(gòu)
對于網(wǎng)絡(luò)應(yīng)用來說,數(shù)據(jù)可能以異構(gòu)的方式分布式地存儲于網(wǎng)絡(luò)上的各個節(jié)點,地理空間信息服務(wù)構(gòu)件的空間數(shù)據(jù)庫引擎應(yīng)該向上層應(yīng)用屏蔽底層數(shù)據(jù)存儲方式的異構(gòu)性,提供統(tǒng)一的訪問接口。
SQL語言是一種結(jié)構(gòu)化的查詢語言,其特點是不依賴于特定的操作系統(tǒng)和特定的關(guān)系數(shù)據(jù)庫;同時,SQL也是一種規(guī)范,是不同數(shù)據(jù)庫管理系統(tǒng)共同遵循的語言規(guī)范。但在實際中,各數(shù)據(jù)庫系統(tǒng)的實現(xiàn)仍存在很大差異,成為異構(gòu)數(shù)據(jù)庫統(tǒng)一訪問接口的障礙。
在實際應(yīng)用中,每種數(shù)據(jù)庫都有自己的一組基本數(shù)據(jù)類型,而且各數(shù)據(jù)庫對基本數(shù)據(jù)類型的定義存在著差異。表3為幾種常用數(shù)據(jù)庫的對應(yīng)參數(shù)類型。
表3 數(shù)據(jù)庫基本類型對比
圖1 統(tǒng)一SQL接口實現(xiàn)流程
同時,各數(shù)據(jù)庫在SQL語法的定義上存在差異,所采用的保留關(guān)鍵字也不盡相同。這些差異導(dǎo)致一些SQL語句在一個數(shù)據(jù)庫中能夠執(zhí)行,而在其他數(shù)據(jù)庫中變?yōu)榉欠ㄕZ句。為了解決這一問題,需要對SQL語句進行分解翻譯,然后再進行校驗和執(zhí)行,如圖1所示。
當(dāng)接收到查詢請求時,系統(tǒng)將其進行分解翻譯,并根據(jù)不同的數(shù)據(jù)庫類型將其翻譯為相應(yīng)的SQL語句;經(jīng)過校驗后進行執(zhí)行,并返回查詢結(jié)果。這一過程需要各數(shù)據(jù)庫參數(shù)的對應(yīng)關(guān)系,如圖2所示。
圖2 各數(shù)據(jù)庫SQL語法參數(shù)UML關(guān)系圖
從圖2中可以看出,類ParameterLisBase為參數(shù)列表的抽象基類,往下可以派生出針對各個數(shù)據(jù)庫的參數(shù)列表類,如OdbcParameterList類、OracleParameterList類等;如果需要擴充對一個新數(shù)據(jù)庫的支持,只需在ParameterLisBase基礎(chǔ)上再派生出一個相應(yīng)的類進行實現(xiàn)即可,對原結(jié)構(gòu)和系統(tǒng)的調(diào)用方式不需要改變。
用戶查詢涉及多個空間數(shù)據(jù)集是很常見的情況,需要對多樣化的數(shù)據(jù)進行分析和挖掘,從多個數(shù)據(jù)集中提取用戶關(guān)心的數(shù)據(jù),并提供從圖到文、從文到圖和從文到文等多種查詢方式,如圖3所示。
為了實現(xiàn)圖、文、庫的一體化查詢應(yīng)用,需要在空間數(shù)據(jù)庫基礎(chǔ)上建立專題信息庫和空間數(shù)據(jù)庫之間以及專題信息庫和專題信息庫之間的聯(lián)系。
例如,要查詢某區(qū)域內(nèi)影響裝甲車輛通行的橋梁隧道情況,就涉及公路、橋梁隧道及武器裝備屬性等3個數(shù)據(jù)集。當(dāng)這3個數(shù)據(jù)集分別位于3個不同的數(shù)據(jù)庫時,空間數(shù)據(jù)集成系統(tǒng)需要合并這3個數(shù)據(jù)服務(wù)的中間結(jié)果集才能得到一個滿足用戶需求的最終查詢結(jié)果,我們稱該過程為集成多元空間連接查詢。
空間數(shù)據(jù)庫中處理多元連接查詢一般采用兩階段處理方式,即查詢編譯階段和查詢執(zhí)行階段。在查詢編譯階段,對查詢命令進行分解和優(yōu)化,產(chǎn)生一個執(zhí)行代價最優(yōu)的查詢計劃;在查詢執(zhí)行階段,查詢執(zhí)行引擎嚴(yán)格執(zhí)行該查詢計劃。
在局域網(wǎng)或本地應(yīng)用中,通過服務(wù)構(gòu)件提供的API函數(shù)直接調(diào)用接口分別在不同的庫中進行查詢并將結(jié)果進行合并即可;而在面向地理數(shù)據(jù)服務(wù)的空間數(shù)據(jù)集成系統(tǒng)中,集成查詢處理器對空間數(shù)據(jù)的訪問是通過調(diào)用外部接口實現(xiàn)的,因此,常常需要對動態(tài)生成的GML文檔進行進一步空間連接查詢才能得到用戶需要的查詢結(jié)果。
圖4 專題信息和空間信息的關(guān)聯(lián)方式
圖5 關(guān)鍵字庫的應(yīng)用
地理空間信息查詢通常分為兩類:基于屬性的查詢和基于空間位置的查詢(空間關(guān)系查詢)?;趯傩圆樵兪峭ㄟ^對空間對象的屬性信息設(shè)定一定的條件來查詢空間位置,主要包括字符型字段查詢、數(shù)值型字段查詢和復(fù)合型查詢3種。基于字符型字段的語句通常使用“=”和“LIKE”進行SQL查詢。基于數(shù)值型字段的語句通常使用比較操作運算符(>,<,=,<=,>一)和運算符(+,-,*,/)完成。復(fù)合查詢通常采用“AND”、“OR”或“NOT”等邏輯運算符完成。
要實現(xiàn)不同空間數(shù)據(jù)庫之間的關(guān)聯(lián)查詢,特別是屬性數(shù)據(jù)庫和空間數(shù)據(jù)庫之間的關(guān)聯(lián)應(yīng)用,需要建立不同空間數(shù)據(jù)庫之間以及空間數(shù)據(jù)庫和屬性數(shù)據(jù)庫之間的關(guān)聯(lián)關(guān)系。如果所有的數(shù)據(jù)庫都由我們自己維護,則只需通過唯一的ID值建立空間數(shù)據(jù)和屬性數(shù)據(jù)之間的關(guān)聯(lián)即可,但在地理空間信息服務(wù)構(gòu)件的應(yīng)用中,空間數(shù)據(jù)庫和專題數(shù)據(jù)庫可能來自于遠程,由別人進行維護,我們不能預(yù)先建立它們之間的聯(lián)系,只有在應(yīng)用時才能動態(tài)地建立關(guān)聯(lián)。在動態(tài)關(guān)聯(lián)的過程中,如果專題信息帶有空間坐標(biāo)信息,則直接通過坐標(biāo)進行空間關(guān)聯(lián)即可;但有些應(yīng)用中,專題信息可能沒有空間定位信息,只有文本描述,這就需要我們從中挖掘出隱含的空間信息并進行關(guān)聯(lián)應(yīng)用。
對于沒有通過ID值和空間數(shù)據(jù)建立聯(lián)系的專題信息,需要通過全文檢索的方式從中挖掘文檔中隱含的地理空間信息,如地名等,將其和空間地理信息進行關(guān)聯(lián),如圖4所示。具體實現(xiàn)的方法是預(yù)先設(shè)定一定的關(guān)鍵字表,通過專題信息和關(guān)鍵字表的比對,找出其中和空間定位相關(guān)的信息,如圖5所示。
其算法偽碼描述如下:
表4 關(guān)鍵字庫表結(jié)構(gòu)
建立關(guān)鍵字庫,是從已有的地理空間數(shù)據(jù)庫中提取出關(guān)鍵字信息,并建立相應(yīng)的索引。其數(shù)據(jù)表結(jié)構(gòu)如表4所示。有了關(guān)鍵字表之后,就可以對專題信息中的文本信息進行檢索匹配,并進行地理編碼,從而建立和空間信息的關(guān)聯(lián)。
[1]龍明.地理空間信息服務(wù)構(gòu)件研究與實踐[D].鄭州:信息工程大學(xué),2010
[2]吳信才.面向網(wǎng)絡(luò)的新一代地理信息系統(tǒng)[M].北京:科學(xué)出版社,2009
[3]何雄.空間數(shù)據(jù)庫引擎關(guān)鍵技術(shù)研究[D].北京:中國科學(xué)院,2006
[4]唐桂芬.面向地理數(shù)據(jù)服務(wù)的集成空間查詢處理技術(shù)[D].長沙:國防科技大學(xué),2007
[5]Gareia-Molina H,Jeffrey U,Widom J.數(shù)據(jù)庫系統(tǒng)實現(xiàn)[M].北京:機械工業(yè)出版社, 2001
[6]楊芙清,梅宏.構(gòu)件化軟件設(shè)計與實現(xiàn)[M].北京:清華大學(xué)出版社,2008
[7]毛新生.SOA原理、方法、實踐[M].北京:電子工業(yè)出版社,2007
[8]倪光南.SOA標(biāo)準(zhǔn)與構(gòu)件技術(shù)的結(jié)合[R].SOA國際標(biāo)準(zhǔn)全球路演中國站,2007