陳月娟,張 錦
(1. 太原理工大學(xué)礦業(yè)工程學(xué)院,山西 太原 030024; 2. 內(nèi)蒙古工業(yè)大學(xué)礦業(yè)學(xué)院,內(nèi)蒙古 呼和浩特 010051)
開源地理信息網(wǎng)絡(luò)服務(wù)中異步數(shù)據(jù)處理性能優(yōu)化研究與實(shí)現(xiàn)
陳月娟1,2,張 錦1
(1. 太原理工大學(xué)礦業(yè)工程學(xué)院,山西 太原 030024; 2. 內(nèi)蒙古工業(yè)大學(xué)礦業(yè)學(xué)院,內(nèi)蒙古 呼和浩特 010051)
針對(duì)地理信息網(wǎng)絡(luò)服務(wù)數(shù)據(jù)交互中存在的問題,利用AJAX網(wǎng)頁(yè)開發(fā)技術(shù)異步處理的特點(diǎn),采用輕量級(jí)JavaScript庫(kù)jQuery,提高開源地理信息服務(wù)GeoServer和地理信息數(shù)據(jù)訪問JavaScript庫(kù)OpenLayers處理數(shù)據(jù)過程中的傳輸效率;通過某市路網(wǎng)更新、地名查詢等服務(wù)系統(tǒng),進(jìn)一步驗(yàn)證AJAX技術(shù)在開源地理信息網(wǎng)絡(luò)服務(wù)中的有效性,可改善地理信息服務(wù)中用戶的交互,提高應(yīng)用性能,加快訪問速度。
開源地理信息網(wǎng)絡(luò)服務(wù);GeoServer;OpenLayers;AJAX;jQuery
地理信息網(wǎng)絡(luò)服務(wù)[1]是通過互聯(lián)網(wǎng)對(duì)地理空間數(shù)據(jù)進(jìn)行發(fā)布和應(yīng)用,以實(shí)現(xiàn)空間數(shù)據(jù)的共享和互操作,主要是進(jìn)行空間數(shù)據(jù)發(fā)布、空間查詢與檢索、空間模型服務(wù)等。
開源地理信息網(wǎng)絡(luò)服務(wù)采用GeoServer發(fā)布地圖數(shù)據(jù)服務(wù),由于GeoServer是純Java的,因此更適合于復(fù)雜的環(huán)境要求,而且基于本身的開源特性,開發(fā)人員可以基于GeoServer靈活實(shí)現(xiàn)特定的目標(biāo)要求,而這些都是商業(yè)GIS組件所缺乏的。因此本文采用開源軟件GeoServer和OpenLayers實(shí)現(xiàn)基于天地圖的某市路網(wǎng)發(fā)布與查詢、更新等功能。采用此方式在服務(wù)傳輸處理過程中,尤其是在大數(shù)據(jù)環(huán)境下,服務(wù)器端的大量地理信息圖形圖像數(shù)據(jù)處理傳輸?shù)娇蛻舳诉^程中會(huì)造成傳輸過程中的數(shù)據(jù)延遲甚至網(wǎng)絡(luò)癱瘓等嚴(yán)重問題;引入AJAX異步處理技術(shù),可以有效地解決上述問題。同時(shí),針對(duì)查詢處理過程中的技術(shù)特點(diǎn),采用jQuery輕量級(jí)JavaScript庫(kù)實(shí)現(xiàn)。
GeoServer是一個(gè)功能齊全[2],遵循OGC[3-5]開放標(biāo)準(zhǔn)的開源WFS和WMS服務(wù)器,利用GeoServer可以把空間矢量數(shù)據(jù)通過OGC WMS規(guī)范作為maps/images來發(fā)布,也可以直接將實(shí)際的數(shù)據(jù)利用OGC的WFS規(guī)范實(shí)現(xiàn),通過OGC的WFS-T,GeoServer同時(shí)也提供了修改、刪除和新增等更新功能。GeoServer支持的數(shù)據(jù)格式非常廣泛,包括商業(yè)、開源的數(shù)據(jù)庫(kù),如PostGIS、Shapefile、ArcSDE、Oracle、VPF、MySQL、MapInfo等;同時(shí)支持上百種投影;能夠?qū)⒕W(wǎng)絡(luò)地圖輸出為JPEG、GIF、PNG、SVG、KML等格式,能夠運(yùn)行在任何基于J2EE/Servlet的容器之上。本文采用開源服務(wù)器Apache Tomcat作為GeoServer容器。
OpenLayers是一個(gè)專門為Web GIS客戶端開發(fā)提供的JavaScript類庫(kù)包,用于實(shí)現(xiàn)標(biāo)準(zhǔn)格式發(fā)布的地圖數(shù)據(jù)訪問,通過標(biāo)準(zhǔn)規(guī)范(如OGC WMS及WFS規(guī)范)進(jìn)行訪問GeoServer發(fā)布的空間數(shù)據(jù)并進(jìn)行交互。OpenLayers采用面向?qū)ο蠓绞介_發(fā),通過使用Prototype.js和Rico中的一些組件組成OpenLayers.js,使其作為客戶端不再受瀏覽器的限制,可擴(kuò)展性更強(qiáng)[4]。
在OpenLayers的基礎(chǔ)上,以天地圖服務(wù)和GeoServer地圖服務(wù)為例構(gòu)建地理信息網(wǎng)絡(luò)服務(wù),采用AJAX技術(shù),應(yīng)用jQuery實(shí)現(xiàn)具體的道路網(wǎng)及地名查詢定位的瀏覽平臺(tái)。
AJAX(asynchronous JavaScript and XML)[5]是基于XML的異步JavaScript技術(shù),可以在不刷新整個(gè)瀏覽器頁(yè)面的前提下實(shí)現(xiàn)局部的頁(yè)面刷新功能,主要解決用戶頁(yè)面交互過程較多,頻繁讀取數(shù)據(jù)造成的頁(yè)面壓力問題;通過AJAX引擎,使得用戶操作與服務(wù)器響應(yīng)異步化,無(wú)需所有的用戶請(qǐng)求都提交給服務(wù)器,有些AJAX可以自行處理的不必提交給服務(wù)器,有更新數(shù)據(jù)時(shí)才需向服務(wù)器提交請(qǐng)求。這樣,給用戶帶來的感覺是所有請(qǐng)求都能很快地得到響應(yīng),沒有頁(yè)面重新加載,如白屏等待。
AJAX主要通過XmlHttpRequest對(duì)象進(jìn)行以上操作,使頁(yè)面中的腳本可以在不刷新頁(yè)面的前提下直接與服務(wù)器通信。
在網(wǎng)絡(luò)服務(wù)程序開發(fā)尤其是地理信息網(wǎng)絡(luò)服務(wù)開發(fā)與應(yīng)用過程中,實(shí)現(xiàn)高效、快捷、交互性能良好的開發(fā)方式是業(yè)界努力的方向。jQuery[13]是輕量級(jí)的JavaScript庫(kù),兼容各種瀏覽器,有助于簡(jiǎn)化JavaScript及AJAX編程[6]。引入jQuery后,簡(jiǎn)化了開發(fā)人員的工作,并且腳本代碼與頁(yè)面代碼分離,便于維護(hù)。
根據(jù)上文的描述,繪制出整個(gè)應(yīng)用實(shí)例的技術(shù)框架圖。本文采用MVC(model view controller,模型-視圖-控制器)方式設(shè)計(jì)并實(shí)現(xiàn)該應(yīng)用實(shí)例。
圖1為本實(shí)例所采用的基本技術(shù)架構(gòu)體系。
圖1 地理信息網(wǎng)絡(luò)服務(wù)技術(shù)框架
本系統(tǒng)主要是通過在線調(diào)用天地圖與筆者發(fā)布服務(wù)結(jié)合,完成整個(gè)地理信息服務(wù)過程。
(1) 矢量數(shù)據(jù)入庫(kù)
使用PostgreSQL數(shù)據(jù)庫(kù)中的支持空間數(shù)據(jù)的PostGIS來儲(chǔ)存空間數(shù)據(jù),將矢量數(shù)據(jù)中的點(diǎn)、線、面進(jìn)行存儲(chǔ)。
(2) 矢量數(shù)據(jù)發(fā)布服務(wù)
由于GeoServer提供了滿足本例要求的OGC WMS、WFS服務(wù)等標(biāo)準(zhǔn)服務(wù)體系,因此采用開源服務(wù)器GeoServer[14]讀取PostGIS中的矢量數(shù)據(jù)進(jìn)行服務(wù)發(fā)布;發(fā)布的過程中需要注意的是包括圖層樣式的建立與選擇、坐標(biāo)系的選擇,這里采用WGS-84坐標(biāo)系統(tǒng)。
原始的PostGIS數(shù)據(jù)庫(kù)中的矢量數(shù)據(jù)不存在樣式的使用,為使用戶更加清晰形象地得到地理信息服務(wù),需要進(jìn)行STYLE的設(shè)計(jì),即矢量數(shù)據(jù)的樣式。
(3) OpenLayers訪問地圖服務(wù)
由上節(jié)可知,GeoServer支持OGC的WMS、WFS,實(shí)現(xiàn)空間數(shù)據(jù)的可視化和查詢編輯;OpenLayers經(jīng)由服務(wù)層的WMS進(jìn)行調(diào)用GeoServer發(fā)布的矢量數(shù)據(jù)服務(wù)并進(jìn)行顯示;由WFS[15]提供的要素服務(wù)(WFS包括5個(gè)操作:GetCapabilites、DescribeFeatureType、GetFeature、Transaction、LockFeature)中的基本操作GetFeature獲取要素實(shí)例,完成查詢矢量數(shù)據(jù)要素,完成本例中查詢及定位路網(wǎng)的操作。
(4) 查 詢
根據(jù)第二節(jié)的說明,采用AJAX快速動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)實(shí)現(xiàn)數(shù)據(jù)的異步傳輸完成服務(wù)層與應(yīng)用層的交互訪問,為進(jìn)一步加快訪問速度,使用jQuery實(shí)現(xiàn)查詢地名及路網(wǎng)操作。AJAX的具體實(shí)現(xiàn)步驟如下:
1) Web表單獲取數(shù)據(jù);
var inputing=document.getElementById("datetime");
2) 建立XmlHttpRequest;
var xmlhttp;
if (window.XMLHttpRequest)
{∥code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else {∥code for IE6, IE5
xmlhttp=new ActiveXobject("Microsoft.XMLHTTP");}
3) 根據(jù)XmlHttpRequest中的open方法來確定發(fā)送的請(qǐng)求方式和URL,以及是否同步執(zhí)行;
XmlHttp.open("POST",TAIYUANURL,true);
4) 設(shè)置響應(yīng)接受后運(yùn)行操作函數(shù);
var TAIYUANURL="http:∥localhost:8080......soutputFormat=application/ison";
∥具體處理過程
});
5) 用XmlHttpRequest中的send方法來發(fā)送請(qǐng)求。
xmlhttp.open("POST",TAIYUANURL,ture);
xmlhttp.send();
步驟4)為AJAX引擎響應(yīng)后的具體查詢處理過程,需要注意的是,WFS操作GetFeature返回的數(shù)據(jù)格式采用GeoJSON而不是XML格式。
在WebGIS中,傳統(tǒng)的頁(yè)面查詢方式需通過OGC的WMS或WFS返回XML文檔,但是XML因?yàn)樽陨砀袷降南拗疲枰M(jìn)行復(fù)雜的DOM解析,并且也帶來一定的信息冗余;JSON[10]為Web開發(fā)人員提供了一種輕量級(jí)的數(shù)據(jù)交換格式,GeoJSON[11]是基于此的一種用來對(duì)地理要素進(jìn)行編碼的新的數(shù)據(jù)格式,由key/value組成,適合于地理信息網(wǎng)絡(luò)服務(wù)中的頁(yè)面?zhèn)鬏敗8甙姹镜腉eoServer已經(jīng)可以支持WFS返回格式為GeoJSON格式,標(biāo)準(zhǔn)的GeoJSON為key/value形式,本例返回的GeoJSON格式如圖2所示。
圖2 WFS要素服務(wù)返回GeoJSON數(shù)據(jù)
從圖2中可以看出,數(shù)據(jù)形式簡(jiǎn)單,減少了解析過程的復(fù)雜度,使用jQuery使代碼更加簡(jiǎn)潔。
① 查 詢
查詢格式如下:
s.getJSON(TAIYUANURL,function(data){
var found=false;
var markers=new OpenLayers.Layer.Markers("Markers");
map.addLayer(markers);
var sx;
var sy;
∥具體處理代碼
}
② 定 位
定位功能是完成用戶點(diǎn)擊發(fā)布的矢量數(shù)據(jù),該矢量數(shù)據(jù)的詳細(xì)信息進(jìn)行頁(yè)面顯示,此功能主要涉及調(diào)用WMS服務(wù),格式如下:
S(′#selectedDatadiv′).show();
S(′#selecdtedDatadiv′).parent(S("#map_e"));
document.getElementById(′nodelist′).innerHTML=response.responseText;
document.getElementById(′selectedlayers′).innerHTML="";
document.getElementById(′layersdata′).innerHTML=′′;
∥具體代碼
(5) 在線調(diào)用天地圖
所有以上發(fā)布的矢量數(shù)據(jù)全部基于天地圖,本文采用Java Servlet結(jié)合OpenLayers API調(diào)用天地圖服務(wù)。
Java Servlet是用Java編寫的服務(wù)端程序[8]。Java Servlet具有動(dòng)態(tài)擴(kuò)展服務(wù)的能力,并采用請(qǐng)求—響應(yīng)模式提供Web服務(wù)。實(shí)例主要通過Java Servlet實(shí)現(xiàn)后臺(tái)調(diào)用天地圖服務(wù),即首先在服務(wù)器端建立一個(gè)框架,通過客戶端OpenLayers提出瓦片調(diào)用請(qǐng)求,此時(shí),服務(wù)器將請(qǐng)求的信息傳遞給Java Servlet并等待Servlet作出響應(yīng),將結(jié)果返回到客戶端,最終在OpenLayers客戶端進(jìn)行顯示,完成調(diào)用天地圖的工作。
本文主要實(shí)現(xiàn)了基于天地圖的某市路網(wǎng)、地名信息查詢及定位功能。圖3為本實(shí)例系統(tǒng)實(shí)現(xiàn)界面。
圖3 基于天地圖的某市路網(wǎng)、地名系統(tǒng)查詢定位系統(tǒng)
進(jìn)行地名搜索時(shí),圖4所示為頁(yè)面響應(yīng)處理過程時(shí)間序列圖,下面的條狀時(shí)間分別為處理過程中關(guān)鍵步驟的時(shí)間軸,從圖中可以看出整個(gè)過程的頁(yè)面響應(yīng)時(shí)間<3500 ms,證明采用AJAX技術(shù)處理異步數(shù)據(jù)能大大提高運(yùn)行效率,進(jìn)而優(yōu)化了整個(gè)系統(tǒng)的性能。
圖4 頁(yè)面查詢響應(yīng)時(shí)間
開源地理信息網(wǎng)絡(luò)服務(wù)采用GeoServer發(fā)布地圖數(shù)據(jù)服務(wù),可以方便定制自己的服務(wù)需求,但是由于地理信息數(shù)據(jù)量大,在查詢等處理過程中存在瓶頸問題。本文采用Ajax技術(shù)應(yīng)用于開源地理信息網(wǎng)絡(luò)服務(wù),通過jQuery應(yīng)用于OpenLayers實(shí)現(xiàn)了空間數(shù)據(jù)的瀏覽、查詢及分析:市區(qū)路網(wǎng)、地名的查詢,使用戶即使請(qǐng)求大數(shù)據(jù)量的空間信息服務(wù)數(shù)據(jù)時(shí),也沒有頁(yè)面過度延遲的體會(huì),可以較流暢地與頁(yè)面進(jìn)行交互,表明采用本方案有效地提高了地理信息網(wǎng)路服務(wù)傳輸效率。
[1] 李德仁,眭海剛,單杰.論地理國(guó)情監(jiān)測(cè)的技術(shù)支撐[J].武漢大學(xué)學(xué)報(bào)(信息科學(xué)版),2012,37(5):505-513.
[2] 趙艷,唐誠(chéng),張華,等.基于GeoServer海底數(shù)據(jù)RIA WebGIS系統(tǒng)設(shè)計(jì)與建立[J]. 環(huán)境科學(xué)與技術(shù),2014,37(120):507-510.
[3] SHELESTOV A Y,KRAVCHENKO A N,SKAKUN S V,et al.Geospatial Information System for Agricultural Monitoring [J].Cybernetics and Systems Analysis, 2013,49(1):123-132.
[4] 王麗,謝剛生,肖慧琴.基于開源技術(shù)構(gòu)建房產(chǎn) GIS 圖形管理系統(tǒng)[J].測(cè)繪通報(bào),2009(12):57-59.
[5] 苗立志,胥婕,周亞,等. 應(yīng)用描述詞匯約簡(jiǎn)的OGC地理信息服務(wù)演繹推理[J].測(cè)繪學(xué)報(bào),2015,44(9):1029-1035.
[6] 江源通,蘇會(huì)衛(wèi),陸琳.基于OpenLayers的應(yīng)急物流決策支持平臺(tái)構(gòu)建及應(yīng)用[J].網(wǎng)絡(luò)與信息化,2015,2(84):275-277.
[7] 游麗貞,郭宇春,李純喜.Ajax引擎的原理和應(yīng)用[J].微計(jì)算機(jī)信息,2006,22(23):205- 207.
[8] 鄧立苗,楊信廷.農(nóng)產(chǎn)品安全生產(chǎn)管理系統(tǒng)新框架——Ajax+jQuery[J].農(nóng)機(jī)化研究,2011(6):125-128.
[9] 張大鵬,張錦,郭敏泰,等.開源WebGIS 軟件應(yīng)用開發(fā)技術(shù)和方法研究[J].測(cè)繪科學(xué),2011,36(5):193-196.
[10] 張曉芳,李國(guó)徽,蘭小玲,等.Java Servlet模式的WEBGIS性能優(yōu)化研究[J].計(jì)算機(jī)應(yīng)用研究,2011,28(11):4222-4224.
[11] 孫明,王碩.基于JSON的Ajax數(shù)據(jù)通信快速算法 [J].計(jì)算機(jī)應(yīng)用與軟件,2015,32(1): 263-266.
[12] 鄔群勇,唐曙光,黃君毅.基于GeoJSON的突發(fā)性大氣污染模擬災(zāi)情移動(dòng)可視化方法[J].自然災(zāi)害學(xué)報(bào),2015,24(2):166-171.
[13] 李志秀,張軍,陳光,等.JQuery Ajax異步處理JSON數(shù)據(jù)在項(xiàng)目管理系統(tǒng)中的應(yīng)用[J].云南大學(xué)學(xué)報(bào),2011,33(S2):247-250.
[14] 張令奎,張小靜,高凱.開源地理信息網(wǎng)絡(luò)服務(wù)平臺(tái)構(gòu)建[J].測(cè)繪與空間地理信息,2015,38(1):181-184.
[15] 張建博,劉紀(jì)平,劉恒飛,等.利用本體的WFS要素語(yǔ)義檢索研究[J].測(cè)繪與空間地理信息,2015,37(5):520-524.
TheOptimizationandRealizationofProcessingofAsynchronousDataintheOpen-sourceGEO-InformationWebService
CHEN Yuejuan,ZHANG Jin
陳月娟,張錦.開源地理信息網(wǎng)絡(luò)服務(wù)中異步數(shù)據(jù)處理性能優(yōu)化研究與實(shí)現(xiàn)[J].測(cè)繪通報(bào),2016(9):35-37.
10.13474/j.cnki.11-2246.2016.0287.
P208
B
0494-0911(2016)09-0035-03
2015-11-27;
2016-03-02
國(guó)家自然科學(xué)基金(41371373);國(guó)家重點(diǎn)研發(fā)計(jì)劃項(xiàng)目(2016YFB0502601)
陳月娟(1983—),女,博士生,講師,主要研究方向?yàn)榈乩硇畔⒕W(wǎng)絡(luò)服務(wù)。E-mail:hellochenyj@163.com
張 錦