羅 泉,陳寧江
基于GeoServer的等值面圖服務實現
羅泉,陳寧江
(廣西大學計算機與電子信息學院,南寧530004)
根據OGC WMS標準,對GeoServer的WMS服務進行擴展,實現基于IDW算法的動態生成等值面功能,并封裝成WMS服務,使用戶可以從網絡進行調用和瀏覽等值面圖。應用實例表明,具有實時插值,生成等值面圖像,動態與地圖數據疊加等特點,是對GeoServer軟件的有益補充。
GeoServer;Web Map Service;等值面
國家科技支撐計劃課題(No.2015BAH55F02)、廣西高校優秀人才資助計劃(No.[2011]40)、廣西科學研究與技術開發計劃項目(桂科軟13180015)
等值面的生成是GIS空間分析中常用的方法。文獻[1]利用商業軟件ArcGIS的功能,實現了降雨量等值面的繪制,功能滿足需求但方案的實施成本高。文獻[2]提出基于OGC WPS(Web Processing Service)標準[3]實現常用空間分析功能,并利用免費開源的GeoServer實現了緩沖區分析功能。然而,依據WPS標準,經過空間分析后生成的柵格圖像以超鏈接的形式返回,無法供瀏覽器直接與其他地圖數據結合顯示。在實際應用中,等值面圖,如溫度分布圖、降水量分布圖等,都需要與實際地圖影像進行疊加,以便下一步的分析。使用WPS標準生成的柵格圖像,不便直接在地圖上進行定位并與地圖影像進行疊加。
針對以上問題,本文依據OGC(Open GIS Consortium)WMS(Web Map Service)標準,使用IDW插值算法,設計并實現動態生成等值面的功能,制作成GeoServer軟件插件,封裝成WMS服務,供用戶通過網絡進行調用。
為解決各種異構平臺中的GIS空間數據共享問題,開放地理空間信息聯盟OGC推出了一系列基于WebService技術的空間數據交互操作標準,如WMS、WFS(Web Feature Service)、WCS(Web Coverage Service)、WPS等。WMS即網絡地圖服務,提供了一個標準統一的數據訪問接口,定義了客戶端通過HTTP協議從地圖服務器獲取地圖圖像的標準規范。WMS服務既可動態生成地圖,也可直接返回靜態地圖數據。這些地圖既可以使用PNG、JPEG等圖像格式來呈現,也可以使用KML、SVG等矢量圖形來呈現。一個基本的WMS服務包括三個基礎操作:GetCapabilities、GetMap、Get-FeatureInfo。GetCapabilities返回服務的元數據信息,元數據包括服務支持的操作、參數以及有效的圖層;GetMap返回指定區域的地圖圖像;GetFeatureInfo則返回用戶指定的地理要素信息。客戶端可同時請求多個WMS服務,并將返回的地圖圖像疊加,在一個視圖內顯示。
GeoServer是OGC標準的一個J2EE實現[4],采用Spring Web MVC開源框架,所有的WMS請求均由Spring Web MVC的核心控制類DispatcherServlet進行派發,轉到GeoServer的核心類ows.Dispatcher中處理。下圖的UML時序圖描述是一個默認的WMS的GetMap請求響應過程:
(1)瀏覽器利用HTTP協議,發起GetMap請求。
(2)ows.Dispatcher接收到請求后,調用wms.DefaultWebMapService的GetMap函數進行處理,并最終獲得一個WebMap對象,該對象封裝了用戶所請求的地圖空間數據。
(3)ows.Dispatche選用合適的策略,調用ows.Response的Write函數,將WebMap對象渲染成PNG或JPEG等格式的圖片,返回給瀏覽器顯示。
wms.DefaultWebMapService由GeoServer核心根據服務名稱,利用反射技術動態加載,通過GetMap操作,向瀏覽器返回請求區域的地圖圖像。若實現等值面的動態生成、定位及顯示,則需要依照WMS標準,實現GetMap操作,在GetMap中完成空間插值、圖形渲染等功能。

圖1 WMS GetMap請求響應UML時序圖
等值面是以空間為定義域的連續函數的等位集,一個等值面里的每一個點,其數值是一樣的,使用同樣的顏色表示。單獨的等值面圖能表示數值的空間分布及空間變化趨勢,連續的等值面圖能表示數值的空間、時間內的分布及變化趨勢,常用于水文、氣象、勘探等行業中。生成等值面其難點在于插值算法,受空間多種因素的影響,同一個樣本集采用不同的插值算法,其預測值與實測值的誤差不同[5]。為提高插值的精度,需要事先對樣本集進行分析以選擇合適插值算法。本文使用IDW算法闡述基于GeoServer設計和實現等值面服務的過程。
等值面動態生成服務被設計成為一個通用的WMS服務,參數支持:INTERVALS(分級量值)、INTERVAL_COLORS(分級顏色)、INTERPOLATE(插值方法),實現WMS的三個基本操作,依賴于空間插值算法和渲染類,UML類圖如下:

圖2 等值面服務UML類圖
等值面服務的核心在于GetMap操作,在GetMap中使用空間插值算法插值、分級,并使用渲染類將結果分級著色,渲染成PNG圖像。為今后能支持更多的空間插值算法、方便擴展,在設計上采用了工廠模式,運用Spring框架的IoC(Inversion of Control控制反轉)機制,可以做到在不修改原有源代碼的情況下新增空間插值方法。同時,使用緩存類來緩存渲染的結果,在插值前判斷緩存中是否有渲染結果,如果有則直接返回,如果沒有則進行插值并渲染,利用空間來縮短響應時間。GetMap的偽代碼片段如下:
public WebMap GetMap(GetMapRequest request)throws ServletException,
IOException{
String cachekey=getCacheKey(request);//根據輸入參數來獲取緩存的索引值
if(ResultCache.InCache(cachekey)){
return ResultCache.Get(cachekey);//緩存中有處理結果,可直接返回
}else{
//獲取需要使用的插值算法名稱
String iName=GetParam(request,”INTERPOLATE”);
//根據算法名稱,獲取插值算法對象實例
IInterpolate interpolator=InterpolateFactory.GetInterpolation(iName);
……
//執行插值操作
interpolateResult=interpolator.Interpolate(param1,param2,…);
……
//將插值結果渲染成圖像并返回
Return Image.RenderImage(interpolateResult);
}
}
該服務根據瀏覽器提交參數,使用IDW(Inverse Distance Weighted,反距離權重插值)算法,對瀏覽器視圖范圍內的離散點進行插值、分級、著色,并返回PNG格式的地圖圖像,最后由瀏覽器完成地圖的顯示。
根據上述設計完成代碼,實現服務程序。此外,還須依據GeoServer的二次開發要求,使用application-Context.xml文件,將該服務注冊到GeoServer中:
〈bean id="contoursurfaceService"class="com.geoExtension.wms.ContoursurfaceService"〉
〈bean id="contoursurfaceDescriptor"class="org.geoserver. platform.Service"〉
〈constructor-arg index="0"value="contoursurface"/〉
〈constructor-arg index="1"ref="contoursurfaceService"/〉
〈constructor-arg index="2"value="1.1.1"/〉
〈constructor-arg index="3"〉
〈list〉
〈value〉GetCapabilities〈/value〉
〈value〉GetMap〈/value〉
〈value〉GetFeatureInfo〈/value〉
〈/list〉
〈/constructor-arg〉
〈/bean〉
該配置片段告訴GeoServer,等值面服務名為contoursurface,對應的類為com.geoExtension.wms.ContoursurfaceService,支持WMS 1.1.1,包含GetCapabilities、GetMap、GetFeatureInfo操作。最后,將編譯的程序集打包為jar格式文件,拷貝到GeoServer的WEB-INFLib目錄中,重啟GeoServer,即完成了等值面動態生成服務的安裝。
用戶只需在瀏覽器地址欄中輸入給定地址,即可調用等值面服務。GeoServer從地址中解析出所需信息,包括:請求的圖層、請求的服務名、請求的操作,以及請求的區域坐標、投影等信息,并根據服務名查找對應的類,執行其中的GetMap函數。最后,GeoServer向瀏覽器響應請求區域內的等值面圖形。流程如圖3所示意。

圖3 GeoServer加載、執行等值面服務流程
為驗證能否利用等值面服務生成等值面圖像,驗證該等值面圖像能否和其他地圖疊加顯示,設計如下實驗方案:
(1)使用PC作為服務器,配置為CPU 2.5GHz 4核,內存4G
(2)支撐軟件為Win 7操作系統,Java 7運行庫,Jetty 6.1,GeoServer 2.5
(3)選用800個離散點作為測試數據,包含坐標值和離散點值,以Shape文件格式存儲,并導入GeoServer的新圖層中,命名為sf:contours;
(4)根據離散數值的頻數分布,將離散點值分級;
(5)瀏覽器端使用開源js框架OpenLayers請求等值面服務,獲取相應圖像并顯示。
在實驗中,使用了某地的日降雨量數據,依據數值的頻數分布,將數據分為5級:1級[0~0.1]、2級[0.1~1]、3級[1~2]、4級[2~5]、5級[5~15],并為每個取值區間設置一種顏色。最后,用戶使用OpenLayers調用等值面生成服務,OpenLayers獲得等值面圖像并顯示。
圖4為樣本集在二維平面上的分布情況,每一個點代表一個樣本的位置。從圖中可以看到,樣本并不是均勻分布,部分區域密集,而右上角區域、底部區域只有零星的幾個樣本。點擊樣本熱點可以查看樣本的數值,但無法獲知圖中任意空白區域的大概數值,無法根據樣本集直觀分析出數值變化趨勢。
圖5為等值面服務根據樣本集的數值,在可視范圍內使用IDW算法插值而動態生成的等值面圖,圖中的5種顏色代表5種取值區間,顏色由淺到深依次按低到高次序表示不同的樣本值區間。根據該圖像,可明顯看出西北方向區域降雨量較小,東南方向區域降雨量較大。圖6為等值面圖和樣本集地區的地形圖實時疊加顯示的效果。根據該圖像,很直觀看出該地區在當日的降雨量分布情況。

圖4 樣本集分布圖

圖5 等值面圖

圖6 等值面、地圖疊加效果
通過實驗可以看到,該等值面服務能夠根據樣本集的離散數據,以及用戶的輸入參數,動態生成等值面圖像,并能實時與樣本集所在地區的地形圖疊加顯示,直觀地表現出區域內的數值變化趨勢,已達到了最初的設計目標。
隨著計算機網絡技術發展,WebGIS技術已普遍應用于人們生活中。GeoServer軟件作為一個開源的J2EE應用,遵循OGC標準,支持插件式的二次開發,廣泛應用于科學研究、小型的商業WebGIS應用中,是各類WebGIS解決方案中的一個廉價的選擇。等值面是GIS應用中常用的空間分析技術,但GeoServer并未提供相關功能。本文針對此問題,根據GeoServer二次開發接口和WMS規范,設計并實現了一個等值面生成服務,供瀏覽器調用并顯示。實驗結果顯示,該服務實現了預期的效果,是GeoServer軟件的一個有益補充。
[1]任斌,吳可,陳潔.基于ArcGIS的降雨量等值面生成系統研究[J].信息技術,2013(9):125~128
[2]姜超,徐青,等.基于OGC WPS的GIS空間分析方法[J].測繪科學,2011,11,36(6):198~200
[3]OGC.OGC Standard[EB/OL].http://www.opengeospatial.org/standards/
[4]張大鵬,張錦,等.開源WebGIS軟件應用開發技術和方法研究[J].測繪科學,2011.09,36(5):193-196
[5]胡剛,趙剛,宋慧.不同插值方法對降水量空間不確定性的影響[J].濟南大學學報(自然科學版),2012.10,26(4):428~432
[6]張凡,胡春陽,韓軍.高性能互操作的OGC WMS系統的研究與實現[J].計算機應用研究,2010,27(5):1732~1736
GeoServer;Web Map Service;Contour Surface
Implementation of Contour Surface Service Based on GeoServer
LUO Quan,CHEN Ning-jiang
(School of Computer and Electronic Information,Guangxi University,Nanning 530004)
According to OGC WMS standards,extends the GeoServer WMS,and implements a GeoServer plugin which is used generating contour surface based on IDW algorithm and encapsulated into a WMS Service.Users can call the WMS Service from the network and browse the result.The experimental results show that the plug-in with real-time interpolation,it can produce the equivalent surface image,superimpose with map data dynamically.It is good for GeoServer software.
1007-1423(2015)12-0066-05
10.3969/j.issn.1007-1423.2015.12.015
羅泉(1979-),男,廣西南寧人,在讀碩士研究生,研究方向為軟件工程、Web服務
陳寧江(1975-),男,廣西南寧人,博士,教授,研究方向為軟件工程、中間件、網絡分布式計算
2015-02-26
2015-04-07