摘 要: WebGIS網(wǎng)絡(luò)地理信息系統(tǒng)是Internet技術(shù)應(yīng)用于GIS地理信息系統(tǒng)開發(fā)的產(chǎn)物。在互聯(lián)網(wǎng)環(huán)境下,以Web頁(yè)面作為GIS軟件的用戶界面,把Internet和GIS技術(shù)結(jié)合在一起,可為各種地理信息應(yīng)用提供GIS功能,以提高系統(tǒng)性能,使用戶共享互聯(lián)網(wǎng)資源。為此,在開源軟件的基礎(chǔ)上,通過(guò)使用GeoServer、PostGIS數(shù)據(jù)庫(kù)和OpenLayers實(shí)現(xiàn)了WebGIS的展示層、處理層和數(shù)據(jù)層三層體系框架。
關(guān)鍵詞: WebGIS; GeoServer; 空間數(shù)據(jù)庫(kù); 體系框架
中圖分類號(hào):TP39 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-8228(2013)12-45-03
Design of WebGIS framework based on open source software
Li Dan
(Computer Department, Sichuan Univercity, Chengdu, Sichuan 610065, China)
Abstract: WebGIS Internet geographical information system is the product of the Internet technology applied to GIS. Based on Internet environment, taking the web page as the user interface of GIS software, combining the Internet with GIS technology, GIS function is offered for various geographic information applications, in order to improve performance, satisfy users' needs and share the Internet resources. A three-layer framework (presentation layers, processing layers, data layers) about WebGIS on the basis of open source software such as GeoServer, PostGIS and OpenLayers is implemented.
Key words: WebGIS; GeoServer; spatail database; framework
0 引言
GIS是基于數(shù)據(jù)庫(kù)管理系統(tǒng)的分析和管理空間對(duì)象的信息系統(tǒng),WebGIS即網(wǎng)絡(luò)地理信息系統(tǒng),是基于Internet平臺(tái),客戶端應(yīng)用軟件采用網(wǎng)絡(luò)協(xié)議,并運(yùn)用在Internet上的地理信息系統(tǒng)。一般有多主機(jī),多數(shù)據(jù)庫(kù)和多個(gè)客戶端分布式地連接在Internet上而組成。WebGIS是利用Web技術(shù)來(lái)擴(kuò)展和完善地理信息系統(tǒng)的一項(xiàng)技術(shù)[1-2],是基于網(wǎng)絡(luò)的客戶機(jī)/服務(wù)器系統(tǒng);利用因特網(wǎng)來(lái)進(jìn)行客戶端和服務(wù)器之間的信息交換;是一個(gè)分布式系統(tǒng),用戶和服務(wù)器可以分布在不同的地點(diǎn)和不同的計(jì)算機(jī)平臺(tái)上。WebGIS主要用于空間數(shù)據(jù)發(fā)布,空間查詢與檢索,空間模型服務(wù),Web資源的組織等。WebGIS是基于Internet的GIS,可以有多種方法實(shí)現(xiàn),主要有兩種模式:客戶端/服務(wù)器模式(C/S)和瀏覽器/服務(wù)器模式(B/S)。
1 設(shè)計(jì)思想
廣義WebGIS有兩種主要架構(gòu):C/S架構(gòu)的GIS和B/S架構(gòu)的GIS,狹義上的WebGIS是通過(guò)網(wǎng)頁(yè)瀏覽器訪問(wèn)空間數(shù)據(jù),進(jìn)行空間操作。而WebGIS需要滿足空間數(shù)據(jù)和屬性數(shù)據(jù)的傳輸瀏覽、專業(yè)應(yīng)用和空間分析等功能,所以采取C/S和B/S混合模式的WebGIS架構(gòu)。
開源軟件是指開放源代碼的軟件,它最大的優(yōu)勢(shì)是源代碼免費(fèi),能更好地實(shí)現(xiàn)代碼重用及資源改造。本文設(shè)計(jì)的WebGIS框架就是在開源軟件的基礎(chǔ)上進(jìn)行的。
美國(guó)OGC(OpenGIS協(xié)會(huì),OpenGIS Consortium)提出了OpenGIS(Ope Geodata Interopetation Specification)開放的地理數(shù)據(jù)互操作規(guī)范,OpenGIS是為了使不同的地理信息系統(tǒng)軟件之間具有更良好的互操作性,以及在異構(gòu)分布數(shù)據(jù)庫(kù)中實(shí)現(xiàn)信息共享的途徑[3]。OpenGIS致力于建立一個(gè)無(wú)“邊界”的、分布的、基于構(gòu)件的地理數(shù)據(jù)互操作環(huán)境,與傳統(tǒng)的地理信息處理技術(shù)相比,基于該規(guī)范的GIS軟件將具有很好的可擴(kuò)展性、可升級(jí)性、可移植性、開放性、互操作性和易用性。開源的WebGIS設(shè)計(jì)思想就來(lái)源于OpenGIS。
2 工具的選擇
2.1 空間數(shù)據(jù)庫(kù)
空間數(shù)據(jù)庫(kù)是隨著地理信息系統(tǒng)GIS的開發(fā)和應(yīng)用發(fā)展起來(lái)的數(shù)據(jù)庫(kù)新技術(shù),主要用來(lái)處理空間數(shù)據(jù),一般是以一系列特定結(jié)構(gòu)的文件形式組織在存儲(chǔ)介質(zhì)之上。本文所設(shè)計(jì)的WebGIS框架選用的是PostGIS數(shù)據(jù)庫(kù)。
PostGIS是空間數(shù)據(jù)庫(kù)PostgreSQL的一個(gè)擴(kuò)展,它是一種對(duì)象-關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),在PostgreSQL上增加了存儲(chǔ)管理空間數(shù)據(jù)的能力。PostGIS提供如下空間信息服務(wù)功能:空間對(duì)象、空間索引、空間操作函數(shù)和空間操作符等。PostGIS的版權(quán)被納入到GNU(GNU's Not Unix,革奴計(jì)劃)的GPL(General Public License,通用許可證)中,也就是說(shuō),任何人可以自由得到PostGIS的源碼并對(duì)其做研究和改進(jìn)。PostGIS支持所有的空間數(shù)據(jù)類型,包括:點(diǎn)(POINT)、線(LINESTRING)、多邊形(POLYGON)和集合對(duì)象集(GEOMETRYCOLLECTION)等。支持所有的數(shù)據(jù)存取和構(gòu)造方法,如GeomFromText()、AsBinary()以及GeometryN()等。提供簡(jiǎn)單的空間分析函數(shù)(如Area和Length),同時(shí)也提供其他一些具有復(fù)雜分析功能的函數(shù),比如Distance。提供了空間操作符(如Union和Difference)用于空間數(shù)據(jù)操作。比如,Union操作符融合多邊形之間的邊界,兩個(gè)交迭的多邊形通過(guò)Union運(yùn)算就會(huì)形成一個(gè)新的多邊形,這個(gè)新的多邊形的邊界為兩個(gè)多邊形中最大邊界。
2.2 地圖服務(wù)器
目前較流行的地圖服務(wù)器有兩款,一款是MapServer,MapServer的內(nèi)核使用C++編寫,基于CGI(Common Gateway Interface,通用接口)腳本實(shí)現(xiàn),頁(yè)面調(diào)用支持PHP(Hypertext Preprocessor,超文本處理語(yǔ)言)、JSP(Java Server Page)等多種語(yǔ)言,并且對(duì)OGC的WMS(Web Map Server,網(wǎng)絡(luò)地圖服務(wù))和WFS(Web Feature Server,網(wǎng)絡(luò)要素服務(wù))規(guī)范提供支持。另一款是GeoServer,它是OpenGIS Web服務(wù)器規(guī)范的J2EE(Java 2 Enterprise Edition,Java2平臺(tái)企業(yè)版)實(shí)現(xiàn),基于Java和Geotools庫(kù)開發(fā)。GeoServer功能全面且遵循OGC開放標(biāo)準(zhǔn),并同時(shí)擁有PostGIS與uDig的Refractions公司的技術(shù)支持,GoServer對(duì)發(fā)布WFS和WMS服務(wù)提供便捷的支持,并以XML(Extensible Map Language,可擴(kuò)展標(biāo)記語(yǔ)言)文件描述所有地圖服務(wù),利用GeoServer可以方便地發(fā)布地圖數(shù)據(jù),允許用戶對(duì)特征數(shù)據(jù)進(jìn)行更新、刪除、插入操作,通過(guò)GeoServer可以比較容易地在用戶之間迅速共享空間地理信息。GeoServer安裝文件有兩種,一種是常見的.EXE安裝文件,這種安裝方式最簡(jiǎn)單,只要確保在電腦上安裝了JDK并且8080端口是開的,按照安裝步驟就可以完成安裝;另一種是以.WAR的形式安裝,開發(fā)者電腦上得先安裝有Tomcat,然后將此WAR導(dǎo)入即可[3]。
比較而言,MapServer對(duì)WMS的支持更為高效,而GeoServer則更擅長(zhǎng)于結(jié)合WFS規(guī)范的屬性查詢,但就發(fā)展趨勢(shì)來(lái)看,J2EE的架構(gòu)明顯要占據(jù)優(yōu)勢(shì),并且GeoServer擁有基于Eclipse RCP平臺(tái)的開源客戶端uDig,隨著GeoServer的版本更新,其有實(shí)力成為今后開源WebGIS解決方案的主流,因此本文選擇了GeoServer作為地圖服務(wù)器。
2.3 地圖客戶端
OpenLayers是由MetaCarta公司開發(fā)的,用于WebGIS客戶端的JavaScript包,它實(shí)現(xiàn)訪問(wèn)地理空間數(shù)據(jù)的方法都符合行業(yè)標(biāo)準(zhǔn),比如OpenGIS的WMS和WFS規(guī)范,OpenLayers采用面向?qū)ο蠓绞介_發(fā),并使用來(lái)自Prototype.js和Rico中的一些組件。OpenLayers所能夠利用的地圖數(shù)據(jù)資源有很多,可提供給用戶選擇,比如WMS、WFS、GoogleMap等,當(dāng)然,用戶還可以用簡(jiǎn)單的圖片地圖作為背景圖。采用OpenLayers作為客戶端不會(huì)產(chǎn)生瀏覽器依賴性。由于OpenLayers采用JavaScript語(yǔ)言實(shí)現(xiàn),而應(yīng)用于Web瀏覽器中的DOM(文檔對(duì)象模型)用JavaScript實(shí)現(xiàn),同時(shí),Web瀏覽器(比如IE,F(xiàn)F等)都支持DOM。OpenLayers APIS采用動(dòng)態(tài)類型腳本語(yǔ)言JavaScript編寫,實(shí)現(xiàn)了類似于Ajax功能的無(wú)刷新更新頁(yè)面,能夠帶給用戶豐富的桌面體驗(yàn)[4-7]。
在操作方面,OpenLayers除了可以在瀏覽器中幫助開發(fā)者實(shí)現(xiàn)地圖瀏覽的基本效果,比如放大(Zoom In)、縮?。╖oom Out)、平移(Pan)等常用操作之外,還可以進(jìn)行選取面、選取線、要素選擇、圖層疊加等不同的操作,甚至可以對(duì)已有的OpenLayers 操作和數(shù)據(jù)支持類型進(jìn)行擴(kuò)充,為其賦予更多的功能。例如,它可以為OpenLayers添加網(wǎng)絡(luò)處理服務(wù)WPS的操作接口,從而利用已有的空間分析處理服務(wù)來(lái)對(duì)加載的地理空間數(shù)據(jù)進(jìn)行計(jì)算。同時(shí),在OpenLayers提供的類庫(kù)當(dāng)中,它還使用了類庫(kù)Prototype.js和Rico中的部分組件,為地圖瀏覽操作客戶端增加Ajax效果。
3 框架體系結(jié)構(gòu)
本文所開發(fā)的WebGIS是在原有的GIS系統(tǒng)的基礎(chǔ)上所做的網(wǎng)絡(luò)化開發(fā),把WebGIS框架分為三個(gè)部分:基于OpenLayers開發(fā)的地圖客戶端和web瀏覽器為展示層;以GeoServer地圖服務(wù)器和Web服務(wù)器作為處理層,這里的Web服務(wù)器選用的是Tomcat,當(dāng)然也可以選用WebLogic以及GeoServer自帶的Jetty,選用Tomcat是因?yàn)镺penLayers是PHP的,所以只有安裝在支持PHP的Tomcat上了;最后以文件系統(tǒng)與PostGIS空間數(shù)據(jù)庫(kù)作為數(shù)據(jù)層[4-7]。
框架體系結(jié)構(gòu)如圖1所示,首先,客戶端輸入信息或請(qǐng)求并提交給處理層,通過(guò)Web服務(wù)器處理客戶端的請(qǐng)求,并通過(guò)地圖服務(wù)器GeoServer提供的接口與數(shù)據(jù)層通信,數(shù)據(jù)層主要是存儲(chǔ)空間數(shù)據(jù),系統(tǒng)數(shù)據(jù)等,然后將最終查詢到的結(jié)果通過(guò)地圖服務(wù)器GeoServer、Web服務(wù)器Tomcat、地圖客戶端OpenLayers,最后顯示在瀏覽器上。
[GeoServer][WFS] [WMS] [地圖服務(wù)器
][Web服務(wù)器][Tomcat] [文件系統(tǒng)] [PostgreSQL
空間數(shù)據(jù)庫(kù)][瀏覽器][地圖客戶端
OpenLayers] [展示層][處理層][數(shù)據(jù)層]
圖1 框架體系結(jié)構(gòu)圖
4 框架展示
本文所采用的是C/S和B/S混合的WebGIS框架,平臺(tái)搭建過(guò)程主要按照以下步驟完成。
4.1 空間數(shù)據(jù)庫(kù)配置
PostgreSQL的安裝比較簡(jiǎn)單,在官網(wǎng)下載最新的版本,按照提示進(jìn)行安裝,但是在出現(xiàn)application list這一步時(shí)要注意,勾選上要安裝的 application,這里必須勾選上PostGIS,安裝完成后,就可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作了。PostgreSQL數(shù)據(jù)庫(kù)提供了存儲(chǔ)空間地理數(shù)據(jù)的模板template_PostGIS,可以以此建立自己的GIS數(shù)據(jù)庫(kù)testgis,具體代碼如下:
CREATE DATABASE testgis
WITH OWNER=postgres
ENCODING='UTF8'
TABLESPACE=pg_default
LC_COLLATE='C'
LC_CTYPE='C'
CONNECTION LIMIT=-1;
ALTER DATABASE template_PostGIS_20 SET search_path=
\"$user\", public, topology;
4.2 將SHP格式地圖數(shù)據(jù)導(dǎo)入空間數(shù)據(jù)庫(kù)
uDig是一款開源桌面GIS軟件,基于Java和Eclipse平臺(tái),可以進(jìn)行shp格式地圖文件的編輯和查看。在這里使用這款開源軟件,是為了生成地圖樣式(SLD)文件,Udig支持可視化調(diào)整地圖圖形元素的配色方案。
利用PostgreSQL自帶的shp2pgsql.exe工具把shp轉(zhuǎn)換成sql語(yǔ)句,然后在管理窗口執(zhí)行C:\Program Files\PostgreSQL\9.1\bin>shp2pgsql.exe G:\shapefiles\test.shp test> G:\shapefiles\test.sql,這樣就完成了地理信息數(shù)據(jù)的建立,然后要將該數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)testgis中,這一步的執(zhí)行代碼是:C:\Program Files\PostgreSQL\9.1\bin>psql -d testgis -f G:\shapefiles\test.sql postgre
4.3 搭建地圖服務(wù)器GeoServer
在安裝GeoServer之前,必須安裝JDK,并配置好Java的環(huán)境變量,我們要把GeoServer發(fā)布在Web服務(wù)器Tomcat上,所以需要先安裝好Tomcat,然后從官方網(wǎng)下載最新版本的geoserver.war包,把geoserver.war包直接復(fù)制到Tomcat的安裝目錄webapps下,啟動(dòng)Tomcat就可以了。
4.4 使用OpeanLayers實(shí)現(xiàn)Web客戶端
Web端顯示地圖數(shù)據(jù)的實(shí)現(xiàn)是基于OpenLayers.js的js實(shí)現(xiàn)方法。建立testgis工程,把OpenLayers.js導(dǎo)入到web中,主要實(shí)現(xiàn)代碼如下:
//地圖和頁(yè)面加載函數(shù)
function init() {
//設(shè)置地圖縮放范圍和縮放等級(jí),0級(jí)比例尺最小
map=new OpenLayers.Map( $('map'),
{ maxScale:500, minScale:500000, numZoomLevels:5 });
//加載WMS
var base=new OpenLayers.Layer.WMS(\"OpenLayers WMS\",
\"http://localhost:8081/geoserver/wms\",
{layers: \"topp:states\"});
map.addLayer(base);
//加載行政區(qū)圖層,WFS柵格圖像
var wfs=new OpenLayers.Layer.Vector(\"States\", {
strategies: [new OpenLayers.Strategy.BBOX()],
protocol: new OpenLayers.Protocol.WFS({
//version: \"1.0.0\",
//srsName: \"EPSG:4326\",
url: \"http://localhost:8081/geoserver/wfs\",
featureType: \"states\",
featureNS: \"http://www.openplans.org/topp\"
})
});
map.addLayer(wfs);
完成上述步驟,就可以基本實(shí)現(xiàn)圖層的顯示、放大等功能,基本功能實(shí)現(xiàn)如圖2所示,后續(xù)工作只需添加一些通過(guò)控件完成用戶功能需求的代碼即可。
圖2
5 結(jié)束語(yǔ)
WebGIS是地理信息系統(tǒng)GIS在Web上的實(shí)現(xiàn),是利用網(wǎng)絡(luò)和Web技術(shù)對(duì)傳統(tǒng)地理信息系統(tǒng)的改造和實(shí)現(xiàn)。WebGIS正朝著分布式、標(biāo)準(zhǔn)化、大眾化和開放式的方向發(fā)展,在信息技術(shù)迅速發(fā)展的推動(dòng)下,WebGIS將會(huì)給我們帶來(lái)一個(gè)更加方便、快捷、靈活的信息世界。本文設(shè)計(jì)的WebGIS框架是基于開源軟件技術(shù),極大地節(jié)約了經(jīng)濟(jì)成本,而且操作簡(jiǎn)單方便,當(dāng)然還有一些地方需要改進(jìn)和優(yōu)化,如用戶與瀏覽器的交互還比傳統(tǒng)的桌面GIS遜色,響應(yīng)速度受寬帶影響等,這些將是下一步需要研究的。
參考文獻(xiàn):
[1] 百度百科.http://baike.baidu.com/view/41463.htm,2012.11.
[2] 顧進(jìn).基于開源的WebGIS平臺(tái)研究與地理信息LCD實(shí)現(xiàn)[D].中國(guó)
礦業(yè)大學(xué),2007.
[3] 李新通,何建邦.GIS互操作與OGC規(guī)范[J].地理信息世界,2003.5.
[4] 徐立新,趙蕾.開源WebGIS 設(shè)計(jì)與研究[J].電腦編程技巧與維護(hù),
2012.8:18-19
[5] 任品德,牟健,姜峰.基于WebGIS 技術(shù)開發(fā)浮標(biāo)綜合管理平臺(tái)系統(tǒng)
的研究[J].海洋技術(shù),2011.9:5-8
[6] 周波,李琦.基于數(shù)字城市系統(tǒng)平臺(tái)的GIS Server服務(wù)器研究與設(shè)計(jì)[J].
計(jì)算機(jī)科學(xué),2005.10:100-102
[7] 鄔倫,唐大仕,劉瑜.基于Web Service分布式互操作的GIS.地理信息
科學(xué),2003.19(4):29
[8] GeoServer,the perfect tool to reduce the unemployment rate[EB/OL].
[2012-11-10].http://blog.geoserver.org/.
[9] OpenLayers: Free Maps for the Web[EB/OL].[2012-11-12].
http://www.openlayers.org/.