袁 濤,田明璐,馬 超,李琳一*,王 笑,葉有燦
(1上海市農(nóng)業(yè)科學(xué)院農(nóng)業(yè)科技信息研究所,上海 201403;2上海市浦東新區(qū)農(nóng)村改革發(fā)展服務(wù)中心,上海 201202;3上海市農(nóng)業(yè)農(nóng)村委員會(huì)信息中心,上海 200335)
進(jìn)入21 世紀(jì),農(nóng)業(yè)信息化對(duì)于發(fā)展現(xiàn)代農(nóng)業(yè)產(chǎn)業(yè)和實(shí)現(xiàn)現(xiàn)代化農(nóng)業(yè)管理的重要作用日益彰顯,且已成為國(guó)際上農(nóng)業(yè)發(fā)展的熱點(diǎn)之一[1]。農(nóng)業(yè)生產(chǎn)以農(nóng)業(yè)用地為載體,表現(xiàn)為農(nóng)作物在地理空間上的覆蓋與蔓延。地理信息系統(tǒng)(Geographic information system,GIS)是20世紀(jì)60年代開(kāi)始迅速發(fā)展起來(lái)的集地理空間數(shù)據(jù)處理與計(jì)算機(jī)技術(shù)于一體的一門(mén)交叉技術(shù)學(xué)科,它是在計(jì)算機(jī)軟、硬件支持下,對(duì)空間對(duì)象的地理分布以及與之相關(guān)的屬性實(shí)現(xiàn)采集、存儲(chǔ)、管理、處理、檢索、分析和顯示等功能,為用戶(hù)解決各種應(yīng)用問(wèn)題的技術(shù)系統(tǒng)[2]。農(nóng)業(yè)生產(chǎn)的空間占有性天然地具有與地理信息系統(tǒng)這種地理空間數(shù)據(jù)管理技術(shù)相結(jié)合的內(nèi)在需求,因此,利用農(nóng)業(yè)地理信息系統(tǒng)對(duì)農(nóng)業(yè)生產(chǎn)進(jìn)行管理就成為一種必然。
我國(guó)的農(nóng)業(yè)學(xué)者和技術(shù)人員在研究和實(shí)踐過(guò)程中開(kāi)發(fā)了很多農(nóng)業(yè)地理信息系統(tǒng)。如王培等[3]開(kāi)發(fā)的昌吉農(nóng)業(yè)基礎(chǔ)地理信息系統(tǒng),提出了基于鄉(xiāng)鎮(zhèn)一級(jí)農(nóng)業(yè)地理信息系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)思路,為實(shí)現(xiàn)鄉(xiāng)鎮(zhèn)的無(wú)紙化辦公和為鄉(xiāng)鎮(zhèn)基層領(lǐng)導(dǎo)提供相關(guān)決策提供了新的解決辦法;范幸龍等[4]提出了基于3S技術(shù)并應(yīng)用于現(xiàn)代煙草種植管理的農(nóng)業(yè)地理信息系統(tǒng)設(shè)計(jì)方案,為煙草行業(yè)更好地利用3S技術(shù),加快推進(jìn)行業(yè)數(shù)字化、信息化提供了參考;張會(huì)波[5]探討了一種應(yīng)用于黑龍江墾區(qū)的農(nóng)業(yè)地理信息系統(tǒng)架構(gòu)解決方案,并利用ArcGIS平臺(tái)進(jìn)行了實(shí)現(xiàn)。此外,將農(nóng)業(yè)地理信息系統(tǒng)應(yīng)用于耕地質(zhì)量管理、土壤重金屬污染評(píng)價(jià)和預(yù)警、土地資源管理方面等也都比較常見(jiàn)[6-8]。由于不同區(qū)域的農(nóng)業(yè)特征和需求不同,這些農(nóng)業(yè)地理信息系統(tǒng)的特點(diǎn)也不盡相同,但也有一些相同的特征:如這些農(nóng)業(yè)地理信息系統(tǒng)的主要用戶(hù)是政府的農(nóng)業(yè)管理部門(mén);大都基于成熟的商業(yè)地理信息平臺(tái)進(jìn)行二次開(kāi)發(fā)而成,應(yīng)用比較廣泛的如美國(guó)ESRI公司的ArcGIS系列、美國(guó)MapInfo公司的MapInfo系列、北京超圖軟件股份有限公司的SuperMap等[9]。這些商業(yè)軟件平臺(tái)功能強(qiáng)大,提供了豐富的二次開(kāi)發(fā)接口,開(kāi)發(fā)簡(jiǎn)便快捷,但價(jià)格昂貴,市場(chǎng)價(jià)格一般在30萬(wàn)—50萬(wàn)元人民幣,財(cái)政能力相對(duì)比較薄弱的區(qū)縣和中等規(guī)模的農(nóng)場(chǎng)無(wú)法承受。
為了解決這種需求和價(jià)格之間的矛盾,本研究擬基于多個(gè)開(kāi)源框架設(shè)計(jì)開(kāi)發(fā)農(nóng)業(yè)地理信息系統(tǒng)。其中,空間數(shù)據(jù)的管理通過(guò)PostgreSQL數(shù)據(jù)庫(kù)管理系統(tǒng)進(jìn)行,利用GeoServer地圖管理與發(fā)布服務(wù)框架進(jìn)行網(wǎng)絡(luò)地圖的發(fā)布以及地圖數(shù)據(jù)的編輯與管理,地圖前端的顯示和渲染通過(guò)OpenLayers開(kāi)源框架實(shí)現(xiàn)。
為了最大程度地減輕用戶(hù)的經(jīng)濟(jì)負(fù)擔(dān),整個(gè)農(nóng)業(yè)地理信息系統(tǒng)基于多個(gè)開(kāi)源框架進(jìn)行開(kāi)發(fā),不會(huì)涉及版權(quán)問(wèn)題,并通過(guò)二次開(kāi)發(fā)將多個(gè)開(kāi)源框架進(jìn)行整合。具體來(lái)說(shuō),屬性數(shù)據(jù)和空間數(shù)據(jù)的存儲(chǔ)采用PostgreSQL數(shù)據(jù)庫(kù)管理系統(tǒng),地圖數(shù)據(jù)的網(wǎng)絡(luò)發(fā)布與編輯管理采用GeoServer框架,前端采用OpenLayers框架進(jìn)行地圖的可視化顯示。
PostgreSQL是加州大學(xué)伯克利分校計(jì)算機(jī)系開(kāi)發(fā)的對(duì)象關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),具有強(qiáng)大的跨平臺(tái)性,是目前支持平臺(tái)最多的數(shù)據(jù)庫(kù)管理系統(tǒng)之一[10]。它支持大部分SQL標(biāo)準(zhǔn)并且提供了許多其他特性,包括復(fù)雜查詢(xún)、外鍵、觸發(fā)器、視圖、事務(wù)完整性等。更重要的是,它支持空間數(shù)據(jù)管理,可以用來(lái)管理電子地圖數(shù)據(jù),以及各個(gè)地圖圖層和圖斑之間的空間關(guān)系。
GeoServer是遵循OpenGIS Web服務(wù)器規(guī)范的J2EE 實(shí)現(xiàn),利用GeoServer可以方便地發(fā)布網(wǎng)絡(luò)地圖數(shù)據(jù),允許用戶(hù)對(duì)空間數(shù)據(jù)進(jìn)行更新、刪除、插入等操作,通過(guò)GeoServer可以比較容易地在用戶(hù)之間迅速共享空間地理信息。GeoServer兼容Web地圖服務(wù)(Web Map Service,WMS)和Web要素服務(wù)(Web Feature Service,WFS),支持PostgreSQL、Oracle、VPF、 MySQL、ArcSDE、Shapefile、MapInfo等多種數(shù)據(jù)庫(kù)管理系統(tǒng)和多種空間數(shù)據(jù)格式,并支持上百種地圖投影,能夠?qū)⒕W(wǎng)絡(luò)地圖輸出為jpeg、gif、png、SVG、KML等多種格式,并能夠運(yùn)行在任何基于J2EE/Servlet的容器之上[11]。除此之外,GeoServer還具有包含、相交、距離小于、相同、重疊、穿過(guò)等多種空間分析功能。
OpenLayers是一個(gè)用于開(kāi)發(fā)WebGIS客戶(hù)端的JavaScript包。OpenLayers支持的地圖來(lái)源包括Google Maps、Yahoo Map、微軟Virtual Earth、百度地圖、天地圖等,用戶(hù)還可以上傳自己制作的地圖,與其他的圖層在OpenLayers中進(jìn)行疊加。除此之外,OpenLayers實(shí)現(xiàn)訪(fǎng)問(wèn)地理空間數(shù)據(jù)的方法都符合行業(yè)標(biāo)準(zhǔn),它支持Open GIS協(xié)會(huì)制定的WMS和WFS網(wǎng)絡(luò)服務(wù)規(guī)范,可以通過(guò)遠(yuǎn)程服務(wù)的方式,將以開(kāi)放地理空間信息聯(lián)盟(Open Geospatial Consortium,OGC)服務(wù)形式發(fā)布的地圖數(shù)據(jù)加載到基于瀏覽器的OpenLayers 客戶(hù)端中進(jìn)行顯示[12]。在操作方面,OpenLayers除了可以在瀏覽器中幫助開(kāi)發(fā)者實(shí)現(xiàn)地圖瀏覽的基本效果,比如放大、縮小、平移等常用操作之外,還可以進(jìn)行選取面、選取線(xiàn)、要素選擇、圖層疊加等不同的操作,甚至可以對(duì)已有的OpenLayers操作和數(shù)據(jù)支持類(lèi)型進(jìn)行擴(kuò)展,為其賦予更多的功能。同時(shí),在OpenLayers提供的類(lèi)庫(kù)當(dāng)中,它還使用了類(lèi)庫(kù)Prototype.js和Rico中的部分組件,為地圖瀏覽操作客戶(hù)端增加Ajax 效果。
與開(kāi)源框架相對(duì)應(yīng),系統(tǒng)整體架構(gòu)為3層設(shè)計(jì),分別為數(shù)據(jù)層、服務(wù)層和應(yīng)用層(圖1)。其中數(shù)據(jù)層主要利用PostgreSQL數(shù)據(jù)庫(kù)管理系統(tǒng)存儲(chǔ)各種類(lèi)型的空間數(shù)據(jù)以及空間數(shù)據(jù)之間的關(guān)系,具體包括數(shù)據(jù)格式轉(zhuǎn)換、統(tǒng)一的空間參考、數(shù)據(jù)空間關(guān)系以及開(kāi)放的API訪(fǎng)問(wèn)接口等;服務(wù)層主要通過(guò)GeoServer來(lái)實(shí)現(xiàn)空間數(shù)據(jù)管理、空間分析、WMS/WFS/KML服務(wù)、Web服務(wù)、網(wǎng)絡(luò)地圖發(fā)布等多種功能,并分別實(shí)現(xiàn)向下與數(shù)據(jù)層、向上與應(yīng)用層之間的通信;應(yīng)用層主要通過(guò)OpenLayers框架來(lái)實(shí)現(xiàn)地圖顯示、地圖操控、查詢(xún)統(tǒng)計(jì)、地圖導(dǎo)出等與用戶(hù)交互相關(guān)的功能。
即使現(xiàn)在網(wǎng)速已經(jīng)快了很多,但網(wǎng)頁(yè)顯示速度和流暢度仍然是影響用戶(hù)體驗(yàn)的一個(gè)重要因素,尤其是電子地圖的放大、縮小以及漫游操作中的用戶(hù)體驗(yàn)。通常情況下電子地圖一般存儲(chǔ)在數(shù)據(jù)庫(kù)或者是硬盤(pán)的文件管理系統(tǒng)中,當(dāng)用戶(hù)需要查看某部分地圖時(shí),通過(guò)系統(tǒng)向服務(wù)器發(fā)送請(qǐng)求,服務(wù)器根據(jù)用戶(hù)的請(qǐng)求將該部分地圖讀取出來(lái),然后推送給用戶(hù)。此種方式在地圖數(shù)據(jù)量較大或者有網(wǎng)速瓶頸時(shí)極易產(chǎn)生卡頓現(xiàn)象。為了最大程度地優(yōu)化用戶(hù)體驗(yàn),提高地圖操作流暢度,本設(shè)計(jì)采用了頁(yè)面緩存技術(shù)。具體做法為:在地圖初始化的時(shí)候,不但把用戶(hù)請(qǐng)求區(qū)域范圍內(nèi)的電子地圖(圖2中區(qū)域O)調(diào)到系統(tǒng)內(nèi)存中推送給用戶(hù),而且把用戶(hù)請(qǐng)求區(qū)域范圍以外一定面積內(nèi)的地圖也從數(shù)據(jù)庫(kù)或文件夾調(diào)到系統(tǒng)內(nèi)存中。這樣在用戶(hù)移動(dòng)或者縮小地圖的時(shí)候,系統(tǒng)就會(huì)把周邊需要顯示范圍內(nèi)的那部分地圖直接從內(nèi)存中調(diào)取出來(lái),推送給用戶(hù),而不用再到數(shù)據(jù)庫(kù)中讀取,這就大大加快了電子地圖顯示的速度,優(yōu)化了用戶(hù)體驗(yàn)。例如當(dāng)用戶(hù)鼠標(biāo)拉動(dòng)地圖向左移動(dòng)的時(shí)候,就會(huì)直接顯示地圖右側(cè)的B區(qū)域;相應(yīng)的,當(dāng)用戶(hù)鼠標(biāo)拉動(dòng)地圖向右移動(dòng)的時(shí)候,就會(huì)直接顯示地圖左側(cè)的D區(qū)域;而當(dāng)用戶(hù)縮小地圖的時(shí)候,就會(huì)直接將周邊的A、B、C、D和E區(qū)域全部顯示出來(lái)。
WFS和WMS是地圖顯示的兩種常用技術(shù),各有優(yōu)劣,一般結(jié)合應(yīng)用。WFS指的是Web要素服務(wù),電子地圖在系統(tǒng)后臺(tái)以地圖要素(Feature)的形式存在,當(dāng)用戶(hù)發(fā)出請(qǐng)求時(shí),系統(tǒng)按照用戶(hù)的請(qǐng)求將相應(yīng)的矢量地圖要素推送到網(wǎng)頁(yè)前端,矢量地圖要素在網(wǎng)頁(yè)前端實(shí)時(shí)完成地圖渲染。這種技術(shù)一般在兩種情況下應(yīng)用:一種是地圖數(shù)據(jù)量不大,矢量地圖要素在推送到網(wǎng)頁(yè)前端以后可以在前端實(shí)時(shí)快速渲染,不會(huì)影響用戶(hù)體驗(yàn);另一種是用戶(hù)需要在鼠標(biāo)滑過(guò)地圖某一區(qū)域范圍如標(biāo)注點(diǎn)、地塊等要素時(shí)實(shí)時(shí)顯示該要素的屬性信息,而無(wú)需鼠標(biāo)點(diǎn)擊,這時(shí)候就需要應(yīng)用該技術(shù)。WMS指的是Web地圖服務(wù),此時(shí)電子地圖在后臺(tái)已經(jīng)完成渲染,當(dāng)用戶(hù)向系統(tǒng)發(fā)送請(qǐng)求時(shí),系統(tǒng)將渲染好的地圖以圖片格式推送到網(wǎng)頁(yè)前端。此種技術(shù)一般在需要傳輸?shù)牡貓D數(shù)據(jù)量較大時(shí)采用,因?yàn)榇髷?shù)據(jù)量的矢量地圖要素直接推送到網(wǎng)頁(yè)前端進(jìn)行實(shí)時(shí)渲染,會(huì)占用大量時(shí)間,使網(wǎng)頁(yè)顯示時(shí)產(chǎn)生卡頓,而WMS技術(shù)可以很好地解決這個(gè)問(wèn)題。
傳統(tǒng)的shp格式的電子地圖,數(shù)據(jù)和顯示通常是一體化的。當(dāng)用ArcGIS打開(kāi)一幅電子地圖,想要對(duì)地圖進(jìn)行專(zhuān)題渲染時(shí),一般是通過(guò)一些相關(guān)的屬性操作,將該地圖的樣式保存為一個(gè)mxd文檔。當(dāng)下次再打開(kāi)該mxd文檔時(shí),此shp格式電子地圖的樣式可以原樣顯示,如果換作另外一個(gè)mxd文檔打開(kāi)此電子地圖,則樣式丟失。為了解決這個(gè)問(wèn)題,利用QGIS來(lái)設(shè)置地圖樣式,該地圖樣式設(shè)置完成后會(huì)生成一個(gè).sld格式的皮膚文件,保存該.sld皮膚文件,當(dāng)下次打開(kāi)此shp格式電子地圖時(shí),無(wú)論加載此地圖的文檔是否改變,只要加載相應(yīng)的.sld皮膚文件,則該地圖的樣式就可以保留。
構(gòu)建服務(wù)主要利用Web服務(wù)(WebService)來(lái)完成。Web服務(wù)顧名思義就是一個(gè)運(yùn)行在Web上的服務(wù),它通過(guò)網(wǎng)絡(luò)為應(yīng)用程序提供服務(wù)方法,類(lèi)似一個(gè)遠(yuǎn)程的服務(wù)提供者,主要是基于可擴(kuò)展標(biāo)記語(yǔ)言(eXtensible Markup Language,XML)并利用簡(jiǎn)單對(duì)象訪(fǎng)問(wèn)協(xié)議(Simple Object Access Protocol,SOAP)實(shí)現(xiàn)跨平臺(tái)信息傳遞的一種技術(shù)。在整合開(kāi)源框架的過(guò)程中,共實(shí)現(xiàn)了2種粒度的封裝,第一種是接口級(jí)封裝,粒度較小,將各個(gè)功能以函數(shù)組的形式封裝成接口,系統(tǒng)需要二次開(kāi)發(fā)的時(shí)候直接根據(jù)接口說(shuō)明調(diào)用接口即可,無(wú)需關(guān)心底層的實(shí)現(xiàn)方式,將多個(gè)接口組合起來(lái)即可輕松實(shí)現(xiàn)自己所需的功能;第二種是模塊級(jí)封裝,粒度較大,例如將放大、縮小、漫游、識(shí)別、全圖等地圖常規(guī)操作功能封裝到一起,封裝成一個(gè)工具條,在系統(tǒng)需要二次開(kāi)發(fā)時(shí),開(kāi)發(fā)人員可直接將整個(gè)工具條拉過(guò)來(lái)調(diào)用,即可實(shí)現(xiàn)地圖的常規(guī)操作功能,無(wú)需關(guān)心這些功能的實(shí)現(xiàn)方法。
基于上述3個(gè)開(kāi)源框架和系統(tǒng)架構(gòu),開(kāi)發(fā)的農(nóng)業(yè)地理信息系統(tǒng)主要具有以下幾個(gè)方面的功能:①系統(tǒng)以“天地圖”基礎(chǔ)地理數(shù)據(jù)和遙感影像為基礎(chǔ)底圖,能夠?qū)崿F(xiàn)電子地圖和遙感影像之間的自由切換;②系統(tǒng)具有放大、縮小、漫游、識(shí)別、全圖等地圖基本操作功能;③系統(tǒng)能夠?qū)崿F(xiàn)測(cè)量功能,包括測(cè)量圖斑面積大小和線(xiàn)段長(zhǎng)度,在面積較小和距離較短時(shí)計(jì)量單位分別為平方米和米,在面積較大和距離較長(zhǎng)時(shí)計(jì)量單位自動(dòng)變?yōu)槠椒角缀颓祝虎苣軌蛞远喾N方式進(jìn)行查詢(xún),包括模糊查詢(xún)、鼠標(biāo)點(diǎn)擊地圖查詢(xún)、鼠標(biāo)拉框查詢(xún)以及通過(guò)地圖查詢(xún)數(shù)據(jù)庫(kù)和通過(guò)數(shù)據(jù)庫(kù)查詢(xún)地圖等;⑤能夠?qū)崿F(xiàn)矢量格式和柵格格式電子地圖的上傳和存儲(chǔ)。針對(duì)矢量格式的電子地圖,可以方便地生成專(zhuān)題地圖,根據(jù)用戶(hù)選擇進(jìn)行屬性數(shù)據(jù)統(tǒng)計(jì),并可將統(tǒng)計(jì)結(jié)果導(dǎo)出到用戶(hù)電腦上。
本系統(tǒng)被應(yīng)用在擁有3 300余hm2的長(zhǎng)江農(nóng)場(chǎng)。在長(zhǎng)江農(nóng)場(chǎng)的應(yīng)用主要分為3個(gè)方面:①種植結(jié)構(gòu)調(diào)查。長(zhǎng)江農(nóng)場(chǎng)整體上對(duì)于下屬各個(gè)分部有總體要求,每個(gè)分部需要種植某個(gè)品種多大面積。在前期調(diào)查的基礎(chǔ)上,制作成專(zhuān)題地圖呈現(xiàn)于農(nóng)場(chǎng)負(fù)責(zé)人面前,負(fù)責(zé)人可以直觀查看各品種水稻分布位置和面積大小。②水稻長(zhǎng)勢(shì)監(jiān)測(cè)。通過(guò)無(wú)人機(jī)監(jiān)測(cè)的影像,對(duì)長(zhǎng)江農(nóng)場(chǎng)躍進(jìn)分部的600余hm2水稻長(zhǎng)勢(shì)進(jìn)行分析,將水稻長(zhǎng)勢(shì)分析結(jié)果按照優(yōu)、中、差3個(gè)等級(jí)進(jìn)行分類(lèi),并將分類(lèi)結(jié)果以專(zhuān)題地圖的形式顯示在系統(tǒng)中。農(nóng)場(chǎng)負(fù)責(zé)人根據(jù)水稻長(zhǎng)勢(shì)進(jìn)行決策,確定水稻下一階段水肥管理措施(圖3)。③災(zāi)害監(jiān)測(cè)。在臺(tái)風(fēng)過(guò)后,對(duì)長(zhǎng)江農(nóng)場(chǎng)部分區(qū)域的水稻利用無(wú)人機(jī)獲取影像數(shù)據(jù),并對(duì)影像進(jìn)行提取,得到水稻倒伏范圍與面積數(shù)據(jù)。農(nóng)場(chǎng)負(fù)責(zé)人根據(jù)水稻倒伏情況,做出相應(yīng)管理決策。
通過(guò)對(duì)多個(gè)開(kāi)源框架的整合,所開(kāi)發(fā)的農(nóng)業(yè)地理信息系統(tǒng)架構(gòu)靈活、輕便快捷,可以實(shí)現(xiàn)商業(yè)地理信息平臺(tái)的絕大部分功能,能夠滿(mǎn)足農(nóng)業(yè)信息化建設(shè)中對(duì)農(nóng)業(yè)資源管理、農(nóng)業(yè)規(guī)劃、農(nóng)業(yè)專(zhuān)題地圖制作的需要。通過(guò)將開(kāi)源框架封裝成一個(gè)個(gè)Web服務(wù)的形式,極大減少了系統(tǒng)開(kāi)發(fā)人員的重復(fù)工作,提高了系統(tǒng)開(kāi)發(fā)的效率,降低了系統(tǒng)開(kāi)發(fā)的難度,能夠根據(jù)用戶(hù)的個(gè)性化需求快速地搭建出用戶(hù)所需的系統(tǒng)。同時(shí),整個(gè)系統(tǒng)無(wú)需利用商業(yè)軟件,繞開(kāi)了軟件版權(quán)費(fèi)用問(wèn)題,系統(tǒng)開(kāi)發(fā)和對(duì)外服務(wù)成本大幅降低,解決了區(qū)縣級(jí)管理部門(mén)和中型農(nóng)場(chǎng)信息化管理中預(yù)算不足的難題。