戴健釗,胡泓達(dá),鐘凱文
(1.廣州地理研究所,廣東 廣州 510070)
截至2017年底,廣東省已完成全國(guó)第二次陸生野生動(dòng)物資源調(diào)查,掌握了廣東省野生動(dòng)物的分布現(xiàn)狀、棲息地現(xiàn)狀、種群數(shù)量和變動(dòng)趨勢(shì)等信息,但調(diào)查成果尚未建立智能化的信息查詢(xún)系統(tǒng),并未能及時(shí)、高效地提供數(shù)據(jù)智能匯總成果和成果分析服務(wù)[1]。在計(jì)算機(jī)和互聯(lián)網(wǎng)高速發(fā)展的今天,迫切需要建立一套科學(xué)、完整、具有社會(huì)經(jīng)濟(jì)價(jià)值的野生動(dòng)物資源信息管理系統(tǒng),將調(diào)查數(shù)據(jù)的錄入、合并、維護(hù)以及展示分析工作融合起來(lái)。參考國(guó)內(nèi)外先進(jìn)的成果經(jīng)驗(yàn)發(fā)現(xiàn),國(guó)外的專(zhuān)家學(xué)者較早開(kāi)展了野生動(dòng)植物資源信息化管理工作,并積累了大量專(zhuān)題數(shù)據(jù)庫(kù),如聯(lián)合國(guó)環(huán)境規(guī)劃署的全球?yàn)l危物種狀況數(shù)據(jù)庫(kù)、國(guó)際植物園保護(hù)聯(lián)盟的植物材料數(shù)據(jù)庫(kù)[2];雖然國(guó)內(nèi)野生動(dòng)物資源信息化管理工作起步較晚,但研究成果具有后發(fā)優(yōu)勢(shì),尤其擅長(zhǎng)應(yīng)用傳統(tǒng)的計(jì)算機(jī)技術(shù)建立應(yīng)用管理系統(tǒng),如劉紅軍[3]、仵君俠[4]等利用GIS和傳統(tǒng)的VB、Access 數(shù)據(jù)庫(kù)技術(shù)實(shí)現(xiàn)了野生動(dòng)物資源管理。在野生動(dòng)物資源信息化方面,國(guó)內(nèi)研究以采用傳統(tǒng)技術(shù)為主,未能享受云平臺(tái)、空間數(shù)據(jù)庫(kù)帶來(lái)的技術(shù)紅利;而國(guó)外的研究中,建立了品類(lèi)繁多的數(shù)據(jù)庫(kù),容易形成數(shù)據(jù)孤島。
針對(duì)國(guó)內(nèi)外研究現(xiàn)狀中存在的問(wèn)題,本文嘗試選用當(dāng)前成熟且流行的Web平臺(tái)框架,在云平臺(tái)環(huán)境下,系統(tǒng)地把云計(jì)算、負(fù)載均衡、HA以及 GIS 技術(shù)應(yīng)用于野生動(dòng)物資源管理領(lǐng)域,為陸生野生動(dòng)物資源管理提供一種軟件服務(wù)化、資源虛擬化、系統(tǒng)透明化的全新計(jì)算與服務(wù)模式,打破信息孤島的局面。結(jié)合云計(jì)算和GIS,利用先進(jìn)且成熟的技術(shù)將野生動(dòng)物資源的種類(lèi)、數(shù)量、生活環(huán)境、地理分布以及所在區(qū)域等信息直觀地展現(xiàn)給用戶(hù),能對(duì)野生動(dòng)物資源信息進(jìn)行科學(xué)有效的管理,掌握野生動(dòng)物資源的變化規(guī)律,從而解決野生動(dòng)物資源海量數(shù)據(jù)存儲(chǔ)、處理和共享等問(wèn)題,為全力打好生態(tài)修復(fù)、生態(tài)保護(hù)、生態(tài)惠民三大戰(zhàn)役,努力構(gòu)建野生動(dòng)物資源調(diào)查服務(wù)平臺(tái),加強(qiáng)野生動(dòng)物監(jiān)測(cè)工作,提供數(shù)據(jù)支撐,貢獻(xiàn) GIS 智能,實(shí)現(xiàn)創(chuàng)新突破。
野生動(dòng)物資源調(diào)查服務(wù)平臺(tái)需滿(mǎn)足野外各種電子設(shè)備隨時(shí)訪問(wèn)數(shù)據(jù)、調(diào)用服務(wù)的要求,因此本文選用B/S結(jié)構(gòu)作為平臺(tái)的核心結(jié)構(gòu)模式。在當(dāng)前主流技術(shù)背景下,實(shí)現(xiàn) WebGIS 平臺(tái)的方式主要包括:①采用ArcGIS Portal的微件模式進(jìn)行開(kāi)發(fā),該模式下搭建的WebGIS 平臺(tái)代碼開(kāi)發(fā)量少,平臺(tái)界面現(xiàn)成,但在面對(duì)業(yè)務(wù)邏輯稍微復(fù)雜的需求時(shí),會(huì)顯得力不從心,數(shù)據(jù)庫(kù)、后臺(tái)服務(wù)等底層不透明,功能的擴(kuò)展性較差;②ArcGIS的WebAppBuilder模式,該模式減輕了開(kāi)發(fā)人員在 UI 設(shè)計(jì)上的負(fù)擔(dān),但WebAppBuilder 框架過(guò)于復(fù)雜,不利于靈活部署,與 Portal 系列產(chǎn)品耦合性過(guò)高,不利于后期維護(hù)和擴(kuò)展;③開(kāi)源Javascript框架與閉源ArcGIS Server相結(jié)合的模式,該模式需要具備一定的程序開(kāi)發(fā)能力,平臺(tái)核心功能可控可靠,滿(mǎn)足系統(tǒng)設(shè)計(jì)中高內(nèi)聚、低耦合的要求。綜上所述,平臺(tái)開(kāi)發(fā)選用第三種模式。
GIS一般將存儲(chǔ)大量的數(shù)據(jù),對(duì)地理數(shù)據(jù)選取和處理時(shí),又要進(jìn)行大量計(jì)算,因此平臺(tái)對(duì)服務(wù)器的運(yùn)算速度、存儲(chǔ)容量、圖形處理等都有較高的要求。通過(guò)對(duì)服務(wù)平臺(tái)軟件結(jié)構(gòu)設(shè)計(jì)的分析可知,平臺(tái)服務(wù)器將承擔(dān)較大的工作負(fù)荷,占用大多數(shù)的CPU、內(nèi)存資源,因此平臺(tái)對(duì)服務(wù)器配置的要求較高。平臺(tái)硬件環(huán)境配置如表1所示。
表1 硬件環(huán)境配置表
同時(shí),為了充分發(fā)揮云平臺(tái)動(dòng)態(tài)配置資源、HA高可用性的特點(diǎn),減輕單臺(tái)服務(wù)器的負(fù)載,在服務(wù)平臺(tái)的前置位置,設(shè)計(jì)了一臺(tái)基于 Nginx 的軟負(fù)載均衡服務(wù)器,以實(shí)現(xiàn)對(duì)大流量的分發(fā)和轉(zhuǎn)移,保證服務(wù)平臺(tái)的可用性和穩(wěn)定性。陸生野生動(dòng)物資源調(diào)查服務(wù)平臺(tái)架構(gòu)如圖1所示。
圖1 平臺(tái)架構(gòu)圖
陸生野生動(dòng)物資源調(diào)查服務(wù)平臺(tái)在程序的設(shè)計(jì)上采用了模塊化結(jié)構(gòu)的設(shè)計(jì)方法。為了表明系統(tǒng)內(nèi)功能模塊之間的關(guān)系,采用自上而下的方法設(shè)計(jì)平臺(tái)結(jié)構(gòu),各功能模塊間相互獨(dú)立,便于平臺(tái)維護(hù)和管理。根據(jù)用戶(hù)的需求分析以及對(duì)平臺(tái)擴(kuò)展性的設(shè)計(jì),陸生野生動(dòng)物資源調(diào)查服務(wù)平臺(tái)由地圖展示模塊、數(shù)據(jù)查詢(xún)模塊、數(shù)據(jù)管理模塊、用戶(hù)幫助模塊組成。平臺(tái)功能模塊設(shè)計(jì)如圖2所示。
圖2 平臺(tái)功能模塊設(shè)計(jì)
長(zhǎng)期以來(lái),各研究單位、學(xué)者團(tuán)隊(duì)利用GIS技術(shù)[5-6]進(jìn)行野生動(dòng)物資源調(diào)查與保護(hù)研究[7],取得了一定的成績(jī)。尤其是在植物數(shù)據(jù)庫(kù)、植物資源名錄方面,取得了不少進(jìn)展。利用已有的植物資源數(shù)據(jù)庫(kù)建設(shè)思路[8-10],結(jié)合當(dāng)前主流、成熟、功能豐富、擴(kuò)展靈活的數(shù)據(jù)庫(kù)軟件,將會(huì)為陸生野生動(dòng)物資源服務(wù)平臺(tái)的建設(shè)帶來(lái)實(shí)質(zhì)性的創(chuàng)新。
在數(shù)據(jù)庫(kù)軟件的選型方面,Access數(shù)據(jù)庫(kù)性能低下,只適合于小型低并發(fā)的場(chǎng)景;Oracle數(shù)據(jù)庫(kù)功能強(qiáng)大,但系統(tǒng)開(kāi)銷(xiāo)過(guò)于龐大,不利于日后維護(hù)與擴(kuò)展;因此本文選用性能優(yōu)秀、開(kāi)銷(xiāo)可控的PostgreSQL數(shù)據(jù)庫(kù)與ArcSDE空間數(shù)據(jù)引擎相結(jié)合的方式,作為服務(wù)平臺(tái)的底層數(shù)據(jù)庫(kù)。
參考孫學(xué)剛[11]、祁發(fā)堯[12]等的研究成果,結(jié)合平臺(tái)的實(shí)際情況,確立GIS 數(shù)據(jù)庫(kù)由空間數(shù)據(jù)庫(kù)和陸生野生動(dòng)物資源數(shù)據(jù)庫(kù)兩部分組成。其中,物種名錄數(shù)據(jù)與調(diào)查成果數(shù)據(jù),通過(guò)物種的 ID 編碼關(guān)聯(lián);地理空間數(shù)據(jù)與調(diào)查成果數(shù)據(jù)通過(guò)地理調(diào)查單元格的編碼關(guān)聯(lián)。服務(wù)平臺(tái)數(shù)據(jù)庫(kù)的E-R關(guān)系圖和邏輯設(shè)計(jì)圖,如圖3、4所示。
圖3 數(shù)據(jù)庫(kù) E-R 關(guān)系圖
圖4 數(shù)據(jù)庫(kù)邏輯設(shè)計(jì)圖
1)Select2.js 實(shí)現(xiàn)零延遲加載。在Web開(kāi)發(fā)中,Select下拉框是常用的輸入組件。原生的Select幾乎很難通過(guò)CSS樣式控制,且每次加載數(shù)據(jù)項(xiàng)目都是整塊數(shù)據(jù)加載,將瞬間抬高服務(wù)器的開(kāi)銷(xiāo)和網(wǎng)絡(luò)帶寬。Select2是JQuery用來(lái)代替選擇框的一種組件,可定制下拉框,支持搜索、標(biāo)記遠(yuǎn)程數(shù)據(jù)源,無(wú)限滾動(dòng)和其他更高級(jí)的功能。尤其在搜索加載數(shù)據(jù)的方式上,Select2插件同時(shí)支持一次性全部加載數(shù)據(jù)到客戶(hù)端的方式和動(dòng)態(tài)Ajax分批次向服務(wù)端請(qǐng)求數(shù)據(jù)、按需加載數(shù)據(jù)的方式。按需加載數(shù)據(jù)的方式能減少對(duì)網(wǎng)絡(luò)帶寬的要求,提高用戶(hù)體驗(yàn)。
平臺(tái)對(duì)10 km×10 km調(diào)查樣區(qū)網(wǎng)格的物種進(jìn)行更新、編輯時(shí),主要采用Select2.js 插件完成了較好用戶(hù)體驗(yàn)的數(shù)據(jù)加載。物種編輯的窗體界面如圖5所示。
圖5 數(shù)據(jù)下拉框示意圖
2)ECharts實(shí)現(xiàn)數(shù)據(jù)封裝與數(shù)據(jù)可視化。ECharts是一個(gè)采用Javascript實(shí)現(xiàn)的開(kāi)源可視化庫(kù),可流暢運(yùn)行在PC端和移動(dòng)設(shè)備上,能兼容當(dāng)前絕大部分瀏覽器。ECharts提供了常規(guī)的折線(xiàn)圖、餅圖以及用于關(guān)系數(shù)據(jù)可視化的樹(shù)狀矩形圖,并支持圖與圖之間的混搭。ECharts支持JSON格式數(shù)據(jù)[13],因此通過(guò)邏輯組裝將后臺(tái)服務(wù)數(shù)據(jù)轉(zhuǎn)化為符合前端ECharts圖形表達(dá)要求的JSON數(shù)據(jù),成為數(shù)據(jù)可視化的關(guān)鍵。
3)jsPanel.js實(shí)現(xiàn)窗體浮動(dòng)。要保證瀏覽器端的頁(yè)面布局合理、功能窗體方便易用、平臺(tái)適應(yīng)大多數(shù)PC端或移動(dòng)端設(shè)備,那么就需要選用一個(gè)模態(tài)化的框架實(shí)現(xiàn)。jsPanel.js是一個(gè)用純Javascript編寫(xiě)的庫(kù),可用于創(chuàng)建高度可配置的浮動(dòng)面板,允許用戶(hù)在jsPanel.js面板內(nèi)用HTML語(yǔ)言創(chuàng)建窗體,以減輕開(kāi)發(fā)人員在窗體布局上的精力,而專(zhuān)注于窗體內(nèi)部的核心內(nèi)容。同時(shí),高度的可配置參數(shù)可使jsPanel.js具有很多實(shí)用、豐富的樣式功能。
4)WebGIS地理空間信息服務(wù)。平臺(tái)以ArcGIS Server作為后臺(tái)GIS Server,除提供基礎(chǔ)的WMS地圖服務(wù)外,關(guān)鍵在于利用后臺(tái).NET平臺(tái)以及RESTful API、.NET Framework 框架,合理組合GIS Server平臺(tái),從而搭建動(dòng)態(tài)的地圖坐標(biāo)轉(zhuǎn)換功能服務(wù)和GIS數(shù)據(jù)查詢(xún)分析服務(wù),最終為前端數(shù)據(jù)展示提供支撐。
5)PostgreSQL、ArcSDE空間數(shù)據(jù)與動(dòng)物資源數(shù)據(jù)的融合技術(shù)。PostgreSQL數(shù)據(jù)庫(kù)性能可靠、開(kāi)銷(xiāo)合適[14]。平臺(tái)中的調(diào)查樣區(qū)、地理單元、行政區(qū)劃數(shù)據(jù)基本屬于靜態(tài)數(shù)據(jù),更新較少;而調(diào)查成果數(shù)據(jù)更新次數(shù)相對(duì)較多。因此,在PostgreSQL中,對(duì)更新較少的靜態(tài)數(shù)據(jù)編制關(guān)聯(lián)業(yè)務(wù)表,使空間數(shù)據(jù)與動(dòng)物資源數(shù)據(jù)結(jié)合起來(lái)。編制的關(guān)聯(lián)表主要包括地理單元與行政區(qū)劃的關(guān)聯(lián)表以及調(diào)查單元與行政區(qū)劃的關(guān)聯(lián)表。
6)云計(jì)算技術(shù)。云計(jì)算是一種基于互聯(lián)網(wǎng)的計(jì)算方式,通過(guò)該方式共享的軟硬件資源和信息,可按需提供給計(jì)算機(jī)和其他設(shè)備,通過(guò)虛擬化等手段形成資源池,進(jìn)而為用戶(hù)提供多種服務(wù)。平臺(tái)采用云計(jì)算的PAAS模式,將傳統(tǒng)服務(wù)器的硬件資源虛擬化,在虛擬機(jī)上部署服務(wù),再擴(kuò)展節(jié)點(diǎn)服務(wù)器數(shù)量,實(shí)現(xiàn)負(fù)載均衡,提升平臺(tái)整體性能。
1)原始數(shù)據(jù)。在構(gòu)建服務(wù)平臺(tái)前,需收集物種分類(lèi)名錄表數(shù)據(jù)(Excel 格式)以及1∶10 000廣東省省級(jí)、調(diào)查單元級(jí)、地市級(jí)、區(qū)縣級(jí)、網(wǎng)格級(jí)(10 km×10 km)空間數(shù)據(jù)。所有數(shù)據(jù)均為WGS84 坐標(biāo)系,包括樣區(qū)編號(hào)、物種名稱(chēng)、物種數(shù)量等屬性信息,矢量數(shù)據(jù)為shp格式。通過(guò)分析、對(duì)比上述數(shù)據(jù)發(fā)現(xiàn):行政區(qū)劃的屬性信息與民政部公布的信息有差異[15];物種名稱(chēng)有生僻字;空間數(shù)據(jù)采用WGS84坐標(biāo)系與WebGIS中常用的 WGS_1984_web_mercator不一致等。
2)數(shù)據(jù)處理。將動(dòng)物名錄的 Excel 表格數(shù)據(jù)編碼化,按綱、目、科、種對(duì)各物種名稱(chēng)進(jìn)行數(shù)字化編碼;對(duì)10 km×10 km網(wǎng)格數(shù)據(jù)進(jìn)行原子化處理,將其中的空間幾何數(shù)據(jù)與屬性調(diào)查數(shù)據(jù)分離,僅在空間數(shù)據(jù)中保留樣區(qū)編號(hào)的信息;將物種分布的屬性信息分離出來(lái),物種分布信息與樣區(qū)空間數(shù)據(jù)通過(guò)樣區(qū)編號(hào)關(guān)聯(lián)起來(lái);將所有數(shù)據(jù)的坐標(biāo)系統(tǒng)一到WGS84坐標(biāo)系下,以滿(mǎn)足Web瀏覽展示的需求。
3)數(shù)據(jù)入庫(kù)。將處理后的行政區(qū)劃數(shù)據(jù)、物種目錄數(shù)據(jù)、調(diào)查業(yè)務(wù)數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù),最終形成動(dòng)物名錄元數(shù)據(jù)庫(kù)、省域行政區(qū)劃空間數(shù)據(jù)庫(kù)和調(diào)查業(yè)務(wù)專(zhuān)題數(shù)據(jù)庫(kù)。
3.2.1 地圖展示模塊
首先,對(duì)空間數(shù)據(jù)進(jìn)行制圖操作,即將所有空間數(shù)據(jù)轉(zhuǎn)換到統(tǒng)一坐標(biāo)系下,采用ArcGIS Desktop對(duì)空間地理數(shù)據(jù)制圖配圖,并設(shè)置顯示比例尺。當(dāng)比例尺小于1∶500萬(wàn)時(shí),顯示省級(jí)行政區(qū);在1∶500萬(wàn)~1∶200萬(wàn)之間時(shí),顯示地理單元;在1∶200萬(wàn)~1∶50萬(wàn)之間時(shí),顯示地級(jí)市數(shù)據(jù);在1∶50萬(wàn)~1∶10萬(wàn)之間時(shí),顯示區(qū)縣級(jí)數(shù)據(jù);大于1∶10萬(wàn)時(shí),顯示調(diào)查網(wǎng)格數(shù)據(jù)。然后,將上述成果發(fā)布為地圖服務(wù)。
對(duì)于專(zhuān)題數(shù)據(jù)的展示,平臺(tái)采用樹(shù)狀矩形圖展示動(dòng)物資源種類(lèi)組成;采用餅圖表示區(qū)域內(nèi)物種的占比;采用高對(duì)比、高亮的數(shù)字展示物種數(shù)量;采用表格表示科級(jí)、屬級(jí)的物種數(shù)量信息。在具體實(shí)現(xiàn)上,當(dāng)用戶(hù)點(diǎn)擊相應(yīng)區(qū)域,平臺(tái)就會(huì)觸發(fā)鼠標(biāo)事件,將當(dāng)前區(qū)域的比例尺、范圍、編號(hào)等參數(shù)以 Ajax 的方式傳輸?shù)椒?wù)器;服務(wù)器根據(jù)接收的參數(shù)自動(dòng)分析,進(jìn)而向數(shù)據(jù)庫(kù)發(fā)送請(qǐng)求,得到服務(wù)分析的結(jié)果后,再返回給前端瀏覽器。
3.2.2 數(shù)據(jù)查詢(xún)模塊
該模塊包括3個(gè)子模塊:①按物種查詢(xún),支持以動(dòng)物名稱(chēng)為關(guān)鍵字進(jìn)行模糊查詢(xún);②按地區(qū)查詢(xún),以地區(qū)歸屬對(duì)野生動(dòng)物進(jìn)行查詢(xún);③鼠標(biāo)選擇查詢(xún),用戶(hù)可在地圖上點(diǎn)選區(qū)域,進(jìn)而對(duì)某個(gè)區(qū)域內(nèi)的調(diào)查數(shù)據(jù)進(jìn)行查詢(xún)。以高亮數(shù)字表達(dá)物種數(shù)量為例,包括地理單元、地市級(jí)、區(qū)縣級(jí)以及調(diào)查網(wǎng)格4個(gè)級(jí)別。
3.2.3 數(shù)據(jù)管理模塊
該模塊負(fù)責(zé)Excel 上傳數(shù)據(jù)以及在線(xiàn)編輯網(wǎng)格物種信息,可批量更新網(wǎng)格的物種信息,也可手動(dòng)更新單個(gè)網(wǎng)格物種信息的場(chǎng)景。批量更新數(shù)據(jù)時(shí),采用xlsx.core插件在瀏覽器端對(duì)Excel表格數(shù)據(jù)進(jìn)行分析,以減輕服務(wù)器負(fù)荷;手動(dòng)更新物種數(shù)據(jù)時(shí),則利用Select2.js 等插件分批加載數(shù)據(jù),以減輕帶寬的負(fù)擔(dān)。數(shù)據(jù)管理模塊如圖6所示。
圖6 數(shù)據(jù)管理模塊界面
本文結(jié)合云計(jì)算、ArcGIS API for Javascript、EChart.js、Select2.js、PostgreSQL等前后端技術(shù),在云GIS環(huán)境下,研制了一個(gè)集成目前常見(jiàn)開(kāi)源框架與成熟GIS REST服務(wù)的陸生野生動(dòng)物資源調(diào)查服務(wù)平臺(tái),實(shí)現(xiàn)了基礎(chǔ)與專(zhuān)題數(shù)據(jù)顯示、物種數(shù)據(jù)智能管理、物種數(shù)據(jù)查詢(xún)等核心功能,為展示陸生野生動(dòng)物資源調(diào)查成果提供了一個(gè)真實(shí)可控的解決方案。隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,為滿(mǎn)足以后更大的并發(fā)需求、提高系統(tǒng)健壯性和技術(shù)性,可采用Node.js 或GeoDjango 框架使系統(tǒng)更加智能和開(kāi)放。