摘要:本文在傳統(tǒng)WebGIS技術(shù)的基礎(chǔ)上,采用J2EE體系結(jié)構(gòu)建立以PostgreSQL結(jié)合PostGIS作為空間數(shù)據(jù)庫、以GeoServer作為GIS服務(wù)器、以O(shè)penLayers作為客戶端地圖引擎的福州市區(qū)最優(yōu)路徑分析系統(tǒng),通過系統(tǒng)實(shí)現(xiàn),發(fā)現(xiàn)采用上述結(jié)構(gòu)構(gòu)建的WebGIS系統(tǒng)具有開源免費(fèi)、功能強(qiáng)大、實(shí)現(xiàn)簡便等優(yōu)點(diǎn),克服了WebGIS依靠商業(yè)軟件的瓶頸,能夠滿足中小企業(yè)對WebGIS系統(tǒng)功能上的需求。
關(guān)鍵詞:開源GIS;WebGIS;路徑分析
中圖分類號(hào):P208 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9599 (2012) 22-0000-02
在Internet不斷發(fā)展的今天,開放源代碼軟件憑借其自身免費(fèi)、功能強(qiáng)大的特點(diǎn)越來越受到軟件開發(fā)者的追捧,也將成為一種趨勢。這種趨勢在GIS領(lǐng)域表現(xiàn)尤為顯著,在OpenGIS(Open Geodata Interoperation Specification)規(guī)范的指引下,各種開源GIS軟件紛紛涌現(xiàn),從桌面GIS系統(tǒng)到WebGIS軟件多達(dá)300多種,雖然都是依標(biāo)準(zhǔn)開發(fā),但在數(shù)據(jù)交換和互操作方面良莠不齊,在功能上也不盡相同。因此,從種類繁多的開源GIS軟件中選擇適當(dāng)?shù)倪M(jìn)行開發(fā)能達(dá)到事半功倍的效果。
1 開源軟件的選擇
1.1 空間數(shù)據(jù)庫PostgreSQL/PostGIS
空間數(shù)據(jù)庫是WebGIS和核心和基礎(chǔ),采用高效的空間數(shù)據(jù)庫可以大大提高WebGIS的效率,目前在開源數(shù)據(jù)庫領(lǐng)域以加州大學(xué)伯克利分校計(jì)算機(jī)系開發(fā)的PostgreSQL、由瑞典MySQL AB公司開發(fā)、目前屬于Oracle公司的MySQL和以嵌入式開發(fā)為目標(biāo)、體積小巧的SQLite最為有名,由于MySQL缺乏強(qiáng)大的空間支持功能、SQLite較適合于嵌入式的開發(fā),加之PostgreSQL有PostGIS在空間上的強(qiáng)大支持,因此PostgreSQL/PostGIS是本文數(shù)據(jù)庫系統(tǒng)的不二選擇。
PostgreSQL是一個(gè)功能強(qiáng)大的對象-關(guān)系型數(shù)據(jù)庫系統(tǒng),在索引技術(shù)、規(guī)則、過程和數(shù)據(jù)庫擴(kuò)展方面都取得了顯著的成果,由于其被納入BSD版權(quán)體系中,使得其在各種科研機(jī)構(gòu)和公共服務(wù)組織得到廣泛的應(yīng)用。雖然PostgreSQL也定義了一些基本的集合實(shí)體類型和空間操作函數(shù),但其提供的空間特性、空間分析功能和投影轉(zhuǎn)換也很難達(dá)到GIS的要求,因此,PostGIS應(yīng)運(yùn)而生[1]。
PostGIS是在OpenGIS規(guī)范下開發(fā)的基于PostgreSQL的空間擴(kuò)展,為PostgreSQL提供空間對象、空間索引、空間操作函數(shù)等地理空間信息的服務(wù)功能。PostGIS支持OGC標(biāo)準(zhǔn)中定義的點(diǎn)(Point)、多點(diǎn)(MultiPoint)、線(LineString)、多線(MultiLineString)、面(Polygon)、多面(MultiPolygon)、集合對象集(GeometryCollection)等空間幾何特性[2],同時(shí),PostGIS在也提供了OpenGIS規(guī)范之外的一些功能,例如:空間聚集函數(shù)、柵格數(shù)據(jù)類型、三維幾何類型等,能夠滿足普遍GIS系統(tǒng)對數(shù)據(jù)類型和功能的需求。如今,PostgreSQL/PostGIS已經(jīng)成為一套成熟的空間數(shù)據(jù)庫管理系統(tǒng)被GIS開發(fā)者普遍認(rèn)可。
1.2 開源地圖服務(wù)器GeoServer
GeoServer是采用Java語言編寫的開放源代碼地圖服務(wù)器,目前GeoServer最新版本已經(jīng)對OGC(Open Geospatial Consortium)提出的WFS 1.0 (Web Feature Service)、WCS 1.0(Web Coverage Service)、WMS 1.1.1(Web Map Service)等標(biāo)準(zhǔn)具有良好的支持,通過GeoServer提供的可視化界面,用戶可以方便地對本地地圖進(jìn)行發(fā)布,實(shí)現(xiàn)網(wǎng)絡(luò)地圖共享及編輯功能,并且,GeoServer在設(shè)計(jì)之初采用OpenGIS規(guī)范,在數(shù)據(jù)交換和互操作性方面有很好表現(xiàn)。
1.3 開源前端地圖引擎OpenLayers
OpenLayers從本質(zhì)上說是用于開發(fā)WebGIS客戶端的JavaScript包,其采用Prototype.js和Rico中的一些組件、以面向?qū)ο蟮拈_發(fā)方式使用JavaScript進(jìn)行開發(fā)。OpenLayers實(shí)現(xiàn)了OGC制定了WMS、WFS、WCS、WMTS等網(wǎng)絡(luò)地圖服務(wù)標(biāo)準(zhǔn),可以方便地將使用OGC標(biāo)準(zhǔn)發(fā)布的各種網(wǎng)絡(luò)地圖服務(wù)加載在客戶端瀏覽器上,同時(shí),OpenLayers采用Ajax異步交互方式,使地圖訪問效率和用戶交互體驗(yàn)有很大增強(qiáng)。
2 系統(tǒng)體系結(jié)構(gòu)
本文在開源操作系統(tǒng)Linux上對福州市區(qū)最優(yōu)路徑分析系統(tǒng)進(jìn)行開發(fā),采用PostgreSQL/PostGIS作為空間數(shù)據(jù)庫來存儲(chǔ)福州道路、興趣點(diǎn)及路況數(shù)據(jù),在其上使用pgrouting插件作為網(wǎng)絡(luò)分析工具,對基于實(shí)時(shí)路況的福州市區(qū)最優(yōu)路徑進(jìn)行分析,檢索用戶請求的從起點(diǎn)到終點(diǎn)的最佳路徑。同時(shí),系統(tǒng)利用GeoServer作為地圖服務(wù)器,以PostgreSQL中存儲(chǔ)的地圖數(shù)據(jù)作為數(shù)據(jù)源對福州道路和路名數(shù)據(jù)進(jìn)行網(wǎng)絡(luò)發(fā)布。系統(tǒng)客戶端采用OpenLayers作為地圖引擎,接收GeoServer發(fā)布地圖服務(wù)以及用戶請求返回的最優(yōu)路徑數(shù)據(jù),并使用OpenLayers進(jìn)行客戶端顯示。
本系統(tǒng)Web服務(wù)器層使用Java語言編寫,采用Apache Tomcat作為溝通客戶端請求與空間數(shù)據(jù)庫溝通的橋梁,用戶提交在客戶端選擇的起點(diǎn)、終點(diǎn)位置,傳遞給Web服務(wù)器,服務(wù)器生成相應(yīng)SQL語句,對數(shù)據(jù)庫進(jìn)行檢索,并返回相應(yīng)查詢結(jié)果至Web服務(wù)器,Web服務(wù)器再將數(shù)據(jù)以特定格式發(fā)送至客戶端,使用OpenLayers接收并展示。
3 系統(tǒng)關(guān)鍵技術(shù)
3.1 使用pgrouting實(shí)現(xiàn)最優(yōu)路徑分析
pgRouting是PostgreSQL/PostGIS的擴(kuò)展,提供空間路徑分析功能[3]。本系統(tǒng)采用pgRouting提供的具備轉(zhuǎn)向限制的啟發(fā)式算法--A-Star算法對用戶請求的起點(diǎn)、終點(diǎn)進(jìn)行最優(yōu)路徑分析。A-Star算法使用其提供的astar_sp_delta_directed(character varying,integer,integer,double precision,boolean,boolean)方法調(diào)用,需傳入六個(gè)參數(shù),分別代表要查詢的數(shù)據(jù)表、起點(diǎn)sourceid、終點(diǎn)targetid、容限值、是否設(shè)置轉(zhuǎn)向和是否設(shè)置反向阻抗。
3.2 采用GeoJSON作為數(shù)據(jù)傳輸格式
JSON(JavaScript Object Notation)為Web應(yīng)用開發(fā)提供一種輕量級(jí)的數(shù)據(jù)交換格式。GeoJSON是能夠?qū)Ω鞣N地理數(shù)據(jù)框架進(jìn)行編碼的格式,是JSON在表達(dá)地理數(shù)據(jù)方面的分支,它支持OGC定義的大部分幾何類型。又因?yàn)槠渚哂斜磉_(dá)數(shù)據(jù)的簡潔性、JavaScript原生支持等特點(diǎn)[3]。
系統(tǒng)將客戶端輸入的起點(diǎn)和終點(diǎn)名稱通過Get請求像Web服務(wù)器端發(fā)送,Web服務(wù)器將獲取的請求參數(shù)轉(zhuǎn)換成SQL字符串使用JDBC像數(shù)據(jù)庫進(jìn)行請求,并將數(shù)據(jù)庫查詢的結(jié)果使用PostGIS中的ST_AsGeoJSON()方法轉(zhuǎn)換成JSON文件輸出,傳回客戶端再使用OpenLayers對返回結(jié)果進(jìn)行解析。
Web服務(wù)器端使用JDBC提供的PreparedStatement對象將發(fā)送請求的起點(diǎn)、終點(diǎn)接收,服務(wù)器端通過請求參數(shù)自動(dòng)生成SQL字符串對數(shù)據(jù)庫進(jìn)行查詢。
4 系統(tǒng)實(shí)現(xiàn)
系統(tǒng)實(shí)現(xiàn)了基本的放大、縮小、平移等基本地圖操作,瀏覽地圖流暢,并且,使用者可以通過本系統(tǒng)輸入起點(diǎn)位置和終點(diǎn)位置對最優(yōu)路徑進(jìn)行查詢,查詢返回GeoJSON文件在客戶端使用SVG畫出,方便使用者根據(jù)自身情況選擇道路。
5 結(jié)束語
采用開源平臺(tái)能夠輕松構(gòu)建高性能的WebGIS系統(tǒng),系統(tǒng)開銷小、功能強(qiáng),特別適合中小企業(yè)開發(fā)基于自身企業(yè)需要的WebGIS系統(tǒng)。并且,隨著開源軟件的不斷發(fā)展,開源GIS將成為未來WebGIS開發(fā)的主流。
參考文獻(xiàn):
[1]程昌秀.空間數(shù)據(jù)庫管理系統(tǒng)概論[M].科學(xué)出版社,2012.
[2]Arliss Whiteside, Jim Greenwood.OGC Web Services Common Standard[S]. United States: Open Geospatial Consortium Inc,2010-04-07.
[3]梁春雨,李新通.使用HTML5 Canvas構(gòu)建基于GeoJSON的輕量級(jí)WebGIS[J].計(jì)算機(jī)科學(xué)與應(yīng)用,2012,2,189-196
[作者簡介]
梁春雨,福建師范大學(xué)地理科學(xué)學(xué)院,研究生。