吳多朋 王 錚 王曉輝
(吉林省基礎(chǔ)地理信息中心,吉林 長春130062)
“天地圖”是國家測(cè)繪地理信息局主導(dǎo)建設(shè)的,為政府、企業(yè)、公眾提供權(quán)威、可信、統(tǒng)一的地理信息服務(wù)平臺(tái)。截止2014年底,全國共有30個(gè)省份建成了天地圖省級(jí)節(jié)點(diǎn),145個(gè)市(含縣級(jí)市)建立了市級(jí)節(jié)點(diǎn),天地圖省級(jí)節(jié)點(diǎn)僅在政府部門的應(yīng)用達(dá)684個(gè)[1]?!疤斓貓D·吉林”是天地圖省級(jí)節(jié)點(diǎn)之一,項(xiàng)目成果應(yīng)用推廣過程中因商業(yè)GIS軟件平臺(tái)使用和維護(hù)成本高,導(dǎo)致應(yīng)用推廣難度大,針對(duì)該情況探索基于開源GIS軟件構(gòu)建前置服務(wù)平臺(tái)的可行性,實(shí)現(xiàn)從數(shù)據(jù)存儲(chǔ)管理、服務(wù)發(fā)布管理到應(yīng)用展現(xiàn)的一套技術(shù)解決方案。平臺(tái)構(gòu)建模式是:數(shù)據(jù)庫存儲(chǔ)管理-PostgreSQL+PostGIS;地圖服務(wù)發(fā)布與管理-GeoServer;應(yīng)用端地圖表現(xiàn)-Openlayers.基于該技術(shù)架構(gòu)設(shè)計(jì)開發(fā)了吉林省地理省情信息系統(tǒng)應(yīng)用項(xiàng)目,運(yùn)行效果表明,基于開源GIS平臺(tái)的前置平臺(tái)能夠滿足天地圖中小規(guī)模應(yīng)用需求,具有成本優(yōu)勢(shì),值得推廣。
近年開源GIS發(fā)展迅速,國外FreeGIS網(wǎng)站統(tǒng)計(jì)約有356種開源GIS軟件[3],產(chǎn)品涉及桌面應(yīng)用軟件、數(shù)據(jù)庫、類庫、中間件、移動(dòng)GIS和WebGIS等。具有代表性的開源GIS項(xiàng)目有:GIS桌面軟件GRASS、QGIS,空間數(shù)據(jù)庫PostgreSQL/Post GIS、MySQL/MySQL Spatial,Web地圖服務(wù)器Geoserver、Mapserver,Web客戶端軟件Openlayers、Mapbuilder,中間件Geo Tools、Mapwindow,類庫GDAL等等。以下主要介紹前置平臺(tái)開發(fā)技術(shù)路線中使用的開源GIS軟件。
Geoserver是一個(gè)J2EE開發(fā)的Open GIS Web服務(wù)器,它遵循OGC多項(xiàng)開放地理信息服務(wù)規(guī)范,如網(wǎng)絡(luò)地圖服務(wù)(WMS)、網(wǎng)絡(luò)要素服務(wù)(WFS)和網(wǎng)絡(luò)覆蓋服務(wù)(WCS)等,實(shí)現(xiàn)數(shù)據(jù)作為maps/images來發(fā)布(WMS),矢量要素?cái)?shù)據(jù)也可以直接發(fā)布實(shí)際數(shù)據(jù)形式(WFS),支持用戶通過網(wǎng)絡(luò)訪問如遙感影像、數(shù)字高程模型等柵格數(shù)據(jù)(WCS),同時(shí)提供了對(duì)數(shù)據(jù)修改、刪除和新增功能(WFS-T)。通過GeoServer可以比較容易在不同用戶之間迅速共享空間地理信息。
Opnelayers是一個(gè)專為WebGIS客戶端開發(fā)提供的JavaScript類庫包,用于實(shí)現(xiàn)標(biāo)準(zhǔn)格式發(fā)布的地圖數(shù)據(jù)訪問,它支持多種來源的地圖數(shù)據(jù),如OpenGIS的WMS、WFS等及商業(yè)性地圖服務(wù)(如 Google Maps,Bing Maps等),Openlayers實(shí)現(xiàn)在網(wǎng)絡(luò)瀏覽器上顯示瀏覽地圖,并實(shí)現(xiàn)地圖放大、縮小、漫游等基本操作,同時(shí)還可進(jìn)行點(diǎn)線面選取、要素查詢、圖層疊加等不同操作,也可對(duì)它已有的操作和數(shù)據(jù)支持類型進(jìn)行開發(fā)擴(kuò)充,實(shí)現(xiàn)更多的功能。
Post GIS是基于PostgreSQL開發(fā)的功能強(qiáng)大的開源空間數(shù)據(jù)庫,實(shí)現(xiàn)對(duì)關(guān)系型數(shù)據(jù)庫系統(tǒng)PostgreSQL存儲(chǔ)空間數(shù)據(jù)能力的擴(kuò)展,類似于Oracle中的Oracle Spatial,它提供空間對(duì)象、空間索引、空間操作函數(shù)和空間操作符等空間信息服務(wù)功能,同時(shí)實(shí)現(xiàn)并遵循OpenGIS規(guī)范,是目前比較著名的開源GIS數(shù)據(jù)庫。
平臺(tái)采用B/S結(jié)構(gòu)體系,主要分為表現(xiàn)層、服務(wù)層和數(shù)據(jù)層三層架構(gòu),集成方案選擇GeoServer為地圖服務(wù)器,Apache+Tomcat為Web服務(wù)器,PostgreSQL+Post GIS為業(yè)務(wù)數(shù)據(jù)和空間數(shù)據(jù)管理平臺(tái),Open Layers為客戶端開發(fā)包。
平臺(tái)集成架構(gòu)各層基本功能:
1)表現(xiàn)層:主要是基于web瀏覽器實(shí)現(xiàn)數(shù)據(jù)信息的可視化表現(xiàn),為用戶提供一個(gè)交互界面。如可利用開源JavaScript類庫包Openlayers向服務(wù)器端發(fā)出服務(wù)請(qǐng)求,返回請(qǐng)求結(jié)果在瀏覽器中顯示,同時(shí)也可以基于桌面端請(qǐng)求數(shù)據(jù)服務(wù),比如udig,qgis等桌面客戶端。
2)服務(wù)層:主要由GIS服務(wù)器和 WEB服務(wù)器構(gòu)成,對(duì)外提供標(biāo)準(zhǔn)的數(shù)據(jù)服務(wù)。GIS服務(wù)采用GeoServer構(gòu)建并對(duì)其進(jìn)行集成擴(kuò)展,可對(duì)外提供地圖服務(wù)符合OGC標(biāo)準(zhǔn)的空間數(shù)據(jù)互操作接口規(guī)范(WMS、WMTS、WFS),業(yè)務(wù)邏輯通過WEB服務(wù)方式實(shí)現(xiàn)。
3)數(shù)據(jù)層:實(shí)現(xiàn)對(duì)業(yè)務(wù)數(shù)據(jù)和空間數(shù)據(jù)統(tǒng)一化存儲(chǔ)和管理,業(yè)務(wù)關(guān)系數(shù)據(jù)采用PostgreSQL關(guān)系表存儲(chǔ)管理,空間數(shù)據(jù)使用Post GIS進(jìn)行存儲(chǔ)管理,其中地圖瓦片數(shù)據(jù)采用文件形式管理。
在Post GIS中,數(shù)據(jù)層對(duì)應(yīng)空間數(shù)據(jù)表,可以支持點(diǎn)、線、多邊形、多點(diǎn)、多線、多多變形和集合對(duì)象集等空間數(shù)據(jù)類型,可以通過四種方式實(shí)現(xiàn)數(shù)據(jù)庫數(shù)據(jù)的讀寫;①使用PostgreSQL內(nèi)嵌的命令行工具psql語言實(shí)現(xiàn)讀寫;②使用一些小工具,如自身安裝目錄下的shp2pgsql和pgsql2shp,例如導(dǎo)入命令:PostgreSQL\bin>shp2pgsql-s 4236-c D:\test.shp public.vector|psql-d postgis-U postgres-W;③其他GIS軟件讀寫,使用QGIS連接Post GIS實(shí)現(xiàn)讀寫,其他軟件也可如u Dig,Grass等;④利用接口在應(yīng)用程序中讀寫,利用PostgreSQL的jdbc庫或者libpq使用Java和C進(jìn)行數(shù)據(jù)讀寫。系統(tǒng)空間數(shù)據(jù)使用shp2pgsql批量導(dǎo)入,實(shí)現(xiàn)空間數(shù)據(jù)的數(shù)據(jù)庫管理。另外,也探索了基于Arc-GIS直連開源關(guān)系數(shù)據(jù)庫PostgreSQL,實(shí)現(xiàn)空間數(shù)據(jù)在關(guān)系數(shù)據(jù)庫中的存儲(chǔ)。測(cè)試版本ArcGIS 10.1直連Postgres9.0(64位)數(shù)據(jù)庫。
利用Geoserver實(shí)現(xiàn)OGC標(biāo)準(zhǔn)地圖服務(wù)的發(fā)布,服務(wù)發(fā)布需要進(jìn)行名稱空間、數(shù)據(jù)、樣式類型的配置,實(shí)現(xiàn)地圖數(shù)據(jù)在客戶端的顯示效果的定義。對(duì)于WFS和WFS-T服務(wù)發(fā)布樣式顯示配置采用開源桌面軟件Udig,利用udig對(duì)地圖顯示樣式文件SLD進(jìn)行編輯設(shè)置。對(duì)于WMS和WMTS服務(wù)發(fā)布采用GeoWebCache預(yù)緩存文件,GeoWebCache相當(dāng)于是客戶端與服務(wù)器端之間的中介,實(shí)現(xiàn)提高地圖顯示速度,減輕GeoServer服務(wù)器工作負(fù)荷,對(duì)天地圖已有的瓦片成果通過開發(fā)工具轉(zhuǎn)換成預(yù)緩存支持的瓦片結(jié)構(gòu),修改geowebcache.xml配置文件實(shí)現(xiàn)緩存數(shù)據(jù)服務(wù)發(fā)布。前置服務(wù)中基礎(chǔ)要素底圖數(shù)據(jù)和遙感影像數(shù)據(jù)發(fā)布為WMTS服務(wù),要素查詢與分析的地名地址、道路等發(fā)布為WFS服務(wù)。
基于Openlayers在瀏覽器端實(shí)現(xiàn)數(shù)據(jù)服務(wù)顯示,業(yè)務(wù)信息與空間信息集成表現(xiàn)。對(duì)于弱GIS部門的Web GIS應(yīng)用系統(tǒng)主要實(shí)現(xiàn)數(shù)據(jù)服務(wù)加載顯示、客戶端服務(wù)聚合、業(yè)務(wù)與空間的關(guān)聯(lián)查詢定位與要素分析等基本功能。
4.3.1 地圖服務(wù)數(shù)據(jù)加載
加載 WMS、WFS、WMTS等OGC服務(wù)數(shù)據(jù)源。
var wms=new Open Layers.Layer.WMS
(“l(fā)ayername”,”url”,”params”,”options”)
var wfs=new Open Layers.Layer.Vector
(“WFS”,{strategies:[],projection:new Open Layer.Projection(“”),protocol:new Open-Layers.Protocol.WFS({Version:””,
url:””,……}})
var wmts=new Open Layers.Layers.
WMTS ({name:””, url:””,layer:””,style:””
Matrixset:””})
4.3.2 客戶端服務(wù)聚合
客戶端服務(wù)聚合是通過客戶端服務(wù)訪問組件獲取第三方地圖服務(wù)信息,然后客戶端服務(wù)聚合器將系統(tǒng)本身的服務(wù)和第三方服務(wù)進(jìn)行整合,提供給當(dāng)前客戶端或其他客戶端訪問[4]。實(shí)現(xiàn)客戶端GeoServer、ArcGISSever、百度地圖地圖、Google地圖等不同數(shù)據(jù)服務(wù)的聚合。聚合天地圖數(shù)據(jù)服務(wù)地址信息:
get URL:function(bounds){
var level=this.get LevelFor Resolution(this
.map.get Resolution());
var coef=360/Math.pow(2,level);
var x_num=this.top TileFrom X<this.top Tile ToX?Math.round((bounds.leftthis.top TileFrom X )/coef ): Math.round((this.top TileFrom X-bounds.right)/coef);
var y_num=this.top TileFrom Y<
this.top TileTo Y? Math.round((bounds.bottom
-this.top TileFrom Y)/coef):Math.round ((this.top TileFrom Y -bounds.top)/coef);
4.3.3 業(yè)務(wù)與空間關(guān)聯(lián)查詢
業(yè)務(wù)數(shù)據(jù)與空間數(shù)據(jù)通過關(guān)聯(lián)字段建立關(guān)聯(lián),實(shí)現(xiàn)業(yè)務(wù)與空間的掛接,指定條件進(jìn)行查詢定位,關(guān)鍵實(shí)現(xiàn)代碼為:
markslayer=new Open Layers.Layer.Vector (″ WFS″, { strategies : [ new Open Layers.Strategy.BBOX()],
protocol:new Open Layers.Protocol.WFS({
url:″″ }),style Map:new Open Layers.Style Map({externalGraphic : 'img/markertarget.png',
graphicWidth:20,graphic Height:24,
graphic YOffset:-24,
}),//顯示樣式
filter:new Open Layers.Filter.Comparison({
type:
Open Layers.Filter.Comparison.LIKE,
property:″NAME″,
value:"*"+searchstr+"*"
})//查詢條件
});
map.add Layer(markslayer);
結(jié)合2014年“天地圖·吉林”應(yīng)用示范項(xiàng)目建設(shè)內(nèi)容,利用以上技術(shù)路線,采用桌面GIS(QGIS)+數(shù)據(jù)庫(postgis+Postgres)+GIS服務(wù)器(GeoServer)+客戶端應(yīng)用(Openlayers)的技術(shù)路線,開發(fā)構(gòu)建了“吉林省地理省情信息系統(tǒng)”。系統(tǒng)基于B/S的三層架構(gòu),以J2EE技術(shù)規(guī)范作為標(biāo)準(zhǔn),利用“天地圖·吉林”基本數(shù)據(jù)服務(wù)資源,采用空間數(shù)據(jù)服務(wù)前置的方式,構(gòu)建地理省情信息發(fā)布系統(tǒng)。系統(tǒng)顯示效果如圖1所示:
本文通過對(duì)基于開源GIS軟件系統(tǒng)架構(gòu)和功能進(jìn)行深入探討和研究,選擇GeoServer+PostGIS+Openlayers等開源軟件技術(shù)路線構(gòu)建天地圖前置服務(wù)系統(tǒng),并應(yīng)用在吉林省地理省情信息系統(tǒng)建設(shè)中,探索建設(shè)了一套可將“天地圖·吉林”和數(shù)字城市建設(shè)成果應(yīng)用到前置服務(wù)機(jī)上的地圖服務(wù)發(fā)布平臺(tái)和與之相配套的客戶端軟件系統(tǒng),探索研究了各開源軟件實(shí)現(xiàn)原理和機(jī)制,并基于開源地理信息軟件實(shí)現(xiàn)從數(shù)據(jù)存儲(chǔ)管理、數(shù)據(jù)服務(wù)發(fā)布到應(yīng)用展現(xiàn)的一整套技術(shù)解決方案。利用開源項(xiàng)目,搭建GIS應(yīng)用系統(tǒng),在系統(tǒng)開發(fā)和測(cè)試過程中,表現(xiàn)出極大的靈活性。隨著國內(nèi)外開源項(xiàng)目的不斷發(fā)展,其在小、巧離線、準(zhǔn)在線和在線GIS應(yīng)用系統(tǒng)中的應(yīng)用將更加突顯。