摘要:針對(duì)當(dāng)今地圖搜索服務(wù)存在的問題,充分考慮Lucene全文檢索的高效性以及XML在數(shù)據(jù)交換、傳輸、集成和互操作方面的優(yōu)勢,提出了一種結(jié)合Lucene、GML、SVG的地圖搜索服務(wù)模型,解釋了其原理以及實(shí)現(xiàn)過程,最后在MapGoo地圖服務(wù)項(xiàng)目中得到實(shí)現(xiàn),證明了該模型的可行性和優(yōu)越性。
關(guān)鍵詞:地圖搜索引擎; Lucene; 地理標(biāo)記語言; 可縮放矢量圖像; 地圖服務(wù); MapGoo
中圖分類號(hào):TP79文獻(xiàn)標(biāo)志碼:A
文章編號(hào):1001-3695(2008)04-1275-03
隨著網(wǎng)絡(luò)技術(shù)和地理信息獲取技術(shù)的飛速發(fā)展,面向網(wǎng)絡(luò)的地圖服務(wù)得到了越來越廣泛的應(yīng)用。例如基于空間位置的網(wǎng)絡(luò)服務(wù)已經(jīng)引入到數(shù)字城市、電子政務(wù)、信息服務(wù)等系統(tǒng)中,擴(kuò)充了原有的信息服務(wù)手段,給具有海量信息的信息服務(wù)系統(tǒng)提供更方便使用的平臺(tái)。同時(shí)越來越多的企業(yè)和行業(yè)通過網(wǎng)絡(luò)向社會(huì)提供專門的地圖服務(wù),或者在資源管理、智能交通、物流配送、電子商務(wù)、GPS等系統(tǒng)中納入地圖服務(wù)的支持。特別是當(dāng)今社會(huì)大眾對(duì)空間搜索的需求與日俱增,因此通過Web平臺(tái)向社會(huì)大眾提供一個(gè)高效的地圖搜索服務(wù)平臺(tái)很有意義。傳統(tǒng)的地圖服務(wù)模式主要有兩類:以文件目錄模式向客戶端提供服務(wù);以數(shù)據(jù)庫模式提供服務(wù)。然而文件目錄服務(wù)模式不支持并發(fā)性,對(duì)海量數(shù)據(jù)存儲(chǔ)缺乏有效管理和檢索,缺乏安全控制;數(shù)據(jù)庫服務(wù)模式很難滿足當(dāng)今人們對(duì)空間信息搜索的需求,特別是針對(duì)模糊查詢的地圖搜索服務(wù)效率低。目前雖然有很多網(wǎng)站提供地圖搜索服務(wù),但是大都通過調(diào)用一些大型地圖搜索服務(wù)諸如Google Map、Baidu Map等來實(shí)現(xiàn)地圖搜索。對(duì)于一個(gè)有很多子網(wǎng)站的門戶網(wǎng)站來說,通用搜索引擎存在著很多缺陷;同時(shí)當(dāng)今主流的地圖搜索服務(wù)存在的問題有:a)客戶端GIS功能擴(kuò)展與升級(jí)較差;b)地理數(shù)據(jù)的共享性差,GIS基礎(chǔ)平臺(tái)之間相互封閉和獨(dú)立;c)沒有實(shí)現(xiàn)基于地圖內(nèi)容的搜索;d)基于站點(diǎn)內(nèi)的地圖搜索。因此研究一個(gè)自主定制的地圖搜索引擎系統(tǒng)具有重要意義。國內(nèi)學(xué)者對(duì)地圖搜索模型進(jìn)行了研究[1,2],但沒有很好地解決以上存在的問題。針對(duì)前三個(gè)主要問題,本文提出了一個(gè)結(jié)合Lucene、GML、SVG的地圖搜索服務(wù)模型。該模型在實(shí)際的地圖服務(wù)項(xiàng)目的良好運(yùn)行,較好地解決了當(dāng)今地圖搜索服務(wù)存在的問題,不僅平衡了客戶端和服務(wù)器端負(fù)載,而且改善了數(shù)據(jù)在交換、傳輸、集成和互操作性能。
1關(guān)鍵技術(shù)介紹
1.1GM-L/SVG標(biāo)準(zhǔn)
1.1.1GML
GML(geography markup language)是由OGC開發(fā)的一種用于建模、傳輸和存儲(chǔ)地理及與地理相關(guān)信息的XML編碼語言,它包括了地理要素(feature)、層(coverage)的空間和非空間特征[3]。GML建立在W3C系列標(biāo)準(zhǔn)之上, 以一種互聯(lián)網(wǎng)上容易共享的方式來描述、表達(dá)地理信息。OGC發(fā)布了GML的多個(gè)版本。當(dāng)前的最新版本是2004年發(fā)布的GML3.1。它采用要素來描述地理實(shí)體和地理現(xiàn)象。GML要素是通過其屬性(property)來描述的,這些屬性包括空間屬性、時(shí)態(tài)屬性及其他非空間時(shí)態(tài)屬性;同時(shí)支持復(fù)雜的幾何實(shí)體、拓?fù)?、空間參照系統(tǒng)、元數(shù)據(jù)、時(shí)間特征和動(dòng)態(tài)要素等,使其更加適合描述現(xiàn)實(shí)世界問題。GML3.1是基于XML schema的,用schema對(duì)以上類型和屬性等元素進(jìn)行定義。它提供了33個(gè)基本的schema,它們之間的相互依賴關(guān)系可以參閱GML3.1執(zhí)行規(guī)范。同時(shí)GML3.1作為一個(gè)空間數(shù)據(jù)編碼規(guī)范提供了一套基本的標(biāo)簽、公共的數(shù)據(jù)模型,可以使用戶構(gòu)建自己的應(yīng)用模式(GML application schemas)。同時(shí)GML可以使用XLink和XPointer實(shí)現(xiàn)地理數(shù)據(jù)的分布式存儲(chǔ)。GML對(duì)地理數(shù)據(jù)的分發(fā)是非常方便的技術(shù)手段,同樣可以成為地理數(shù)據(jù)分布式存儲(chǔ)的重要手段。
然而GML并不描述怎樣顯示其封裝的地理空間信息。不過可以使用可擴(kuò)展樣式表語言轉(zhuǎn)換XSLT(eXtensible stylesheet language transformation)將GML轉(zhuǎn)換為其他基于XML的易于瀏覽的圖像格式。因此,在WebGIS的地圖服務(wù)中,GML策略常用于服務(wù)器端數(shù)據(jù)的存儲(chǔ)。
1.1.2SVG
SVG[4](scalable vector graphics)是可縮放矢量圖像格式的簡稱。它由W3C 組織制定并推薦,是基于 XML的一種全新的標(biāo)準(zhǔn)開放的矢量圖像和動(dòng)畫格式。可以用SVG瀏覽器讀取這些文件進(jìn)行顯示。目前大多數(shù)Web瀏覽器都支持用插件或ActiveX控件(如Adobe SVG browser) 。SVG 規(guī)范為圓形、線條、矩形、多邊形、折線、橢圓形定義了一套標(biāo)記。另外還定義了比較復(fù)雜的〈path〉元素,可以畫出不規(guī)則形狀的輪廓。與其他格式比較,SVG的優(yōu)越主要在于:a)SVG是一種專業(yè)的 Web 圖像標(biāo)準(zhǔn),用文本來描述圖像,易于編輯,易于Web 發(fā)布、傳輸,跨平臺(tái)。b)可以在SVG圖像中查找字符,很容易對(duì)各種復(fù)雜的地理信息進(jìn)行查詢和升級(jí)。c)SVG具有質(zhì)量和性能的優(yōu)勢。矢量圖形特性使SVG無論放大/縮小或以何分辨率顯示都可以保證圖像或者電子地圖的高質(zhì)量。而基于XML的文本特性使得用SVG描述較復(fù)雜的矢量圖像時(shí)可以獲得更小的文件尺寸。SVG具有數(shù)據(jù)驅(qū)動(dòng)的特性,可以直接從提供的數(shù)據(jù)中創(chuàng)建圖像。d)交互性強(qiáng)。SVG支持交互和動(dòng)畫,可以通過聲明(如在SVG內(nèi)容中插入animation元素)或腳本與DOM 輕松實(shí)現(xiàn)。e)SVG 既是一種靜態(tài)圖像,又是一種動(dòng)態(tài)圖像,可以很方便地實(shí)現(xiàn)動(dòng)態(tài)模擬。它可以作為對(duì)象嵌入到HTML或XHTML文檔中與其他Web元素協(xié)同工作。f)數(shù)據(jù)量少,傳輸效率高。
1.2Lucene全文索引
Lucene是Jakarta Apache的開源項(xiàng)目。它是一個(gè)用Java寫的全文索引引擎工具包,可以方便地嵌入到各種應(yīng)用中來實(shí)現(xiàn)針對(duì)全文檢索功能。Lucene的API接口設(shè)計(jì)得比較通用,很多傳統(tǒng)的應(yīng)用文件、數(shù)據(jù)庫等都可以比較方便地映射到Lucene的存儲(chǔ)結(jié)構(gòu)和接口中。這里可以將Lucene當(dāng)成一個(gè)支持全文索引的數(shù)據(jù)庫系統(tǒng),輸入/輸出結(jié)構(gòu)類似數(shù)據(jù)庫的表、記錄、字段,它由七個(gè)主要的類組成,分別是Document、Field、IndexWriter、Analyzer、QueryParser、Searcher和Hits[5]。Lucene的檢索機(jī)制以及系統(tǒng)結(jié)構(gòu)關(guān)系可以參考圖1[5] 。
2M-apGoo地圖搜索模型研究與設(shè)計(jì)
2.1M-apGoo介紹
MapGoo是中國科學(xué)院遙感應(yīng)用研究所國家遙感工程研究中心獨(dú)立研發(fā)的一個(gè)大型網(wǎng)絡(luò)服務(wù)平臺(tái)。系統(tǒng)由客戶端瀏覽器、Web服務(wù)器、應(yīng)用服務(wù)器和后臺(tái)數(shù)據(jù)庫組成。采用的是B/S結(jié)構(gòu)的網(wǎng)絡(luò)發(fā)布模式,Web服務(wù)器為Tomcat 5.5, 后臺(tái)數(shù)據(jù)庫是Oracle。該平臺(tái)的主要服務(wù)模塊描述如圖2所示。
2.2M-apGoo地圖搜索模式
本文的地圖搜索模型是針對(duì)上述功能服務(wù)模塊中的地圖搜索服務(wù)模塊而設(shè)計(jì)的,其系統(tǒng)結(jié)構(gòu)如圖3所示。它是一個(gè)以O(shè)racle數(shù)據(jù)庫存儲(chǔ)、基于Lucene檢索的以GML格式交換、以SVG形式傳輸和顯示的空間信息存儲(chǔ)與發(fā)布體系。主要實(shí)現(xiàn)的原理是:客戶端向Web服務(wù)器發(fā)出以關(guān)鍵詞為組合的地圖搜索請(qǐng)求,Web服務(wù)器接到請(qǐng)求后,將請(qǐng)求分發(fā)給Lucene,Lucene對(duì)GML文檔進(jìn)行全文檢索。GML文檔是經(jīng)GML引擎從Oracle空間數(shù)據(jù)庫中的相關(guān)數(shù)據(jù)轉(zhuǎn)換得到的,對(duì)檢索到的相關(guān)GML文檔集在應(yīng)用服務(wù)器端通過XSLT解析器,將GML解析成SVG,經(jīng)壓縮后返回給客戶端,在客戶端解壓用SVG插件完成對(duì)矢量數(shù)據(jù)的顯示工作。
2.2.1服務(wù)器端實(shí)現(xiàn)
1)針對(duì)GML的全文檢索
Lucene檢索的數(shù)據(jù)來源可以是關(guān)系數(shù)據(jù)庫、Word、Excel、文本文檔、XML、Html等。對(duì)于這些數(shù)據(jù)源,必須將它們內(nèi)部的數(shù)據(jù)讀取出來,并封裝成Lucene的document實(shí)例,然后讓Lucene來構(gòu)建索引。在這里要實(shí)現(xiàn)對(duì)GML文檔的全文檢索,因?yàn)镚ML是基于XML構(gòu)建的,對(duì)GML的檢索原理同XML的檢索,首先得實(shí)現(xiàn)針對(duì)GML的DocumentHandler接口。它是一種Simple API for XML (SAX)方式的數(shù)據(jù)導(dǎo)入。SAX定義了事件驅(qū)動(dòng)接口,這些事件包括GML的文檔或者元素的開始和結(jié)束等。例如當(dāng)某一parse事件發(fā)生時(shí),parser就可以調(diào)用其中的方法。Lucene 2.0支持中文全文檢索,因此結(jié)合Lucene in action對(duì)XML的檢索方法[5]與Apache XML工程項(xiàng)目包Xer-ces2 Java parser(該項(xiàng)目實(shí)現(xiàn)了SAX API 2.0.1,可以參考http://xml.apache.org/xerces2-j),對(duì)GML元素〈NAME〉和〈CITY〉內(nèi)容讀取,并封裝document實(shí)例。主要函數(shù)如下:
public class SAXGMLHandler extends DefaultHandler implements DocumentHandler {
……
public Document getDocument(InputStream is)//實(shí)現(xiàn)接口開始分析
public void startDocument ( )//分析開始時(shí)調(diào)用
public void startElement(String uri, String localName,String qName, Attributes atts)//GML元素開始調(diào)用
public void characters(char[] text, int start, int length)
// 附加元素內(nèi)容到buffer
public void endElement(String uri, String localName, String qName)
//元素結(jié)束時(shí)調(diào)用
……
}
因此對(duì)客戶端提交的搜索請(qǐng)求參數(shù),提交給搜索引擎MapGooSearch(String city, String key, String belong, int page, int limit)來檢索元素〈NAME〉和〈CITY〉,結(jié)果hits中為有關(guān)關(guān)鍵詞的中文名稱、圖層名、經(jīng)度、緯度等。
2)GML文檔生成
在服務(wù)器端,數(shù)據(jù)的檢索和交換均采用GML格式。本項(xiàng)目采用非GML格式的數(shù)據(jù)存儲(chǔ)方式,因此需要GML轉(zhuǎn)換引擎將空間數(shù)據(jù)轉(zhuǎn)換成基于GML格式的空間數(shù)據(jù),對(duì)外提供統(tǒng)一的數(shù)據(jù)格式,以屏蔽底層數(shù)據(jù)庫設(shè)計(jì)的細(xì)節(jié)。例如可以將存儲(chǔ)在Oracle空間數(shù)據(jù)庫中的數(shù)據(jù)轉(zhuǎn)換成GML文檔。下面是根據(jù)GML應(yīng)用模式生成的GML例子片段:
〈?xml version=\"1.0\" encoding=\"utf-8\" ?〉
〈CityOrganization
xmlns=\"http://www.mapgoo.cn/ns\"
xmlns:gml=\"http://www.opengis.net/gml\"
xmlns:xsi=http://www.w3c.org/2001/XMLSchema-instance
xsi:schemaLocation=\" http://www.mapgoo.cn/nsinstitutes.xsd\"〉
……
〈ml:featureMember〉
〈nstitutes fid=\"1\"〉
〈NAME〉中國科學(xué)院遙感應(yīng)用研究所〈/NAME〉
〈CITY〉北京〈/CITY〉
〈LEVEL〉1〈/LEVEL〉
……
〈gml:location〉〈gml:Point〉〈gml:coordinates〉39.9021,116.4632〈/gml:coordinates〉〈/gml:Point〉〈/gml:location〉
……
〈/institutes〉
〈/gml:featureMember〉
……
〈/ CityOrganization 〉
3)GML的解析
服務(wù)器對(duì)用戶請(qǐng)求的響應(yīng)是GML數(shù)據(jù)文件,它結(jié)合XSLT樣式表,被XSLT處理器轉(zhuǎn)換成了SVG,最后才返回到客戶端瀏覽器。XSLT是一種用來轉(zhuǎn)換XML文檔結(jié)構(gòu)的語言。它可以將一個(gè)XML文檔轉(zhuǎn)換成另一個(gè)XML文檔,還能將XML文檔轉(zhuǎn)換成HTML和許多其他基于文本的格式。由于GML、SVG都是基于XML的語法集,應(yīng)用XSLT、XPath(XML路徑語言)等技術(shù),然后經(jīng)過XSLT處理器即可將GML方便地轉(zhuǎn)換為SVG 顯示。XPath是一種表達(dá)式語言,XSLT使用它來選擇和尋址XML文檔的各個(gè)部分。關(guān)于XSLT處理器,有免費(fèi)處理器如Saxon、Xalan、DOM4J、JDOM等可以選擇。不少學(xué)者對(duì)這些轉(zhuǎn)換的方法進(jìn)行了研究[6]。在本文的處理中,服務(wù)端采取JSP和servlet技術(shù)調(diào)用XSLT處理器API,實(shí)現(xiàn)GML到SVG的動(dòng)態(tài)轉(zhuǎn)換,從而動(dòng)態(tài)返回用戶的地圖搜索結(jié)果。
4)SVG壓縮
SVG圖形由于包含的信息量較大,文件尺寸通常較大,然而文檔采用文本格式具有很高的壓縮率,并支持gzip數(shù)據(jù)壓縮標(biāo)準(zhǔn),數(shù)據(jù)壓縮后即可提高數(shù)據(jù)傳輸?shù)乃俣?,加快用戶瀏覽速度。解壓是在客戶端進(jìn)行的,解壓縮后圖形可直接在Web上顯示。
2.2.2客戶端實(shí)現(xiàn)
根據(jù)服務(wù)器端的特點(diǎn),筆者采用SVG格式,由客戶端瀏覽器負(fù)責(zé)解釋并顯示地理空間信息。首先對(duì)返回請(qǐng)求的壓縮文件進(jìn)行解壓處理;然后對(duì)SVG文件進(jìn)行顯示。在客戶端瀏覽器,用戶可以進(jìn)行簡單的地理信息操作,如地圖的放大/縮小、平移、文本信息的查詢等。而復(fù)雜的操作由服務(wù)端完成后將結(jié)果返回給客戶端瀏覽器,這在一定程度上減輕了服務(wù)器的負(fù)擔(dān)。同時(shí)由于SVG文件的性能優(yōu)勢,有利于客戶端用戶與地圖的交互以及功能擴(kuò)展或升級(jí),并且SVG支持gzip格式壓縮傳輸,造成的網(wǎng)絡(luò)負(fù)載是輕量級(jí)的。不過瀏覽SVG需要插件,像Adobe SVG Viewer、Apache的Batik SVG Viewer等均支持SVG文件的直接瀏覽。在很多最新版本的瀏覽器中也內(nèi)置了對(duì)SVG的支持。
3地圖搜索模式實(shí)現(xiàn)
結(jié)合本文提出的地圖搜索模式,并基于Sun JDK 1.5.0、Jakarta Tomcat 5.5、Eclipse、Jakarta Lucene 2.0等平臺(tái)與工具實(shí)現(xiàn)了地圖搜索服務(wù)。系統(tǒng)主要實(shí)現(xiàn)以下幾方面的功能:響應(yīng)客戶端的輸入關(guān)鍵詞的地圖搜索服務(wù),以及對(duì)地圖進(jìn)行基本操作包括放縮、漫游、全圖顯示等。啟動(dòng)Tomcat后,訪問該服務(wù)就會(huì)出現(xiàn)如圖4所示的搜索界面。在文本框中輸入關(guān)鍵字,就可以進(jìn)行搜索了。例如輸入“頤和園”的搜索結(jié)果如圖5所示。
4結(jié)束語
本文提出了基于Lucene、 GML和SVG的地圖空間搜索模型,在MapGoo這個(gè)實(shí)際項(xiàng)目得到了很好的應(yīng)用,系統(tǒng)運(yùn)行良好,進(jìn)一步證實(shí)了這種結(jié)合Lucene和XML技術(shù)的模型的可行性和穩(wěn)定性;模型的提出與實(shí)現(xiàn)解決了當(dāng)今地圖搜索服務(wù)中存在的問題;針對(duì)GML的全文檢索實(shí)現(xiàn)了基于地圖內(nèi)容的搜索;數(shù)據(jù)的交換、傳輸集成、共享和互操作方面比傳統(tǒng)的地圖服務(wù)更加有優(yōu)勢,不僅平衡了客戶端和服務(wù)器端負(fù)載,同時(shí)客戶端GIS功能擴(kuò)展性得到加強(qiáng)。
模型還有不足之處,由于模型針對(duì)站內(nèi)地圖搜索而設(shè)計(jì),針對(duì)整個(gè)網(wǎng)絡(luò)的搜索還需要進(jìn)一步研究。
參考文獻(xiàn):
[1]白玉琪,楊崇俊,劉冬林,等. 基于OpenGIS WMS的空間信息搜索引擎系統(tǒng)原型[J].中國圖象圖形學(xué)報(bào),2004,9(1):105-111.
[2]汪意革,彭琪,王乘. 基于SVG的WebGIS地圖搜索研究與實(shí)現(xiàn)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用, 2004(1):45-47.
[3]OpenGIS Consortium Inc. OpenGIS geography markup language (GML) implementation specification 3.1[EB/OL]. (2004). http://www.opengis.org.
[4]陳傳波,段紅華. 基于GML與SVG的WebGIS模型研究[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2006(6):64-66.
[5]HATCHER E. Otis Gospodnetic ,Lucene in action[M]. New York:Manning, 2005: 68-230.
[6]劉旭軍,關(guān)佶紅. WebGIS應(yīng)用中GML文檔到SVG的轉(zhuǎn)換[J].計(jì)算機(jī)應(yīng)用, 2004,24(2):157-161.
[7]余旭,鄧躍進(jìn),胡圣武, 等. 基于GML3.1的空間數(shù)據(jù)共享研究[J].地球信息科學(xué),2006,8(3):52-57.
[8]畢建濤,面向網(wǎng)絡(luò)共享的地理信息服務(wù)研究 [D].北京: 中國科學(xué)院地理科學(xué)與資源研究所,2005.
[9]GOLDFARB C F. The XML handbook[M]. 5ed. New Jerseys:Prentice Hall,2003.
“本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文”