蔡文博 滕駿華 田 杰 劉 旭 劉建偉
1(國家海洋環境預報中心 北京 100081)2(北京博陽世通信息技術有限公司 北京 100096)
基于OpenAPIWebGIS的海洋漁業環境保障服務產品發布系統研究
蔡文博1滕駿華1田 杰1劉 旭1劉建偉2
1(國家海洋環境預報中心 北京 100081)2(北京博陽世通信息技術有限公司 北京 100096)
針對傳統的預報圖、短信無法滿足漁民動態獲取海洋預警報服務的需求,基于Open API設計了海洋漁業環境保障服務產品WebGIS發布系統。系統整體框架采用數據層、服務層、表現層、用戶層的四層B/S結構,利用高德開放地圖 API和JavaScript開發語言實現了漁場海浪預報、漁場海面風預報和臺風警報面向公眾的發布功能。由于網絡帶寬的限制,系統通過一種計算坐標偏移量并映射為ASCII碼的矢量數據壓縮方法,較好地實現了漁場預報數據的Web傳輸。以某漁場海浪預報產品XML格式中間交換文件為例,數據壓縮率達到38.5%。
Open API WebGIS 地圖API 海洋漁業 矢量數據壓縮
我國是一個海洋漁業大國,海洋漁業作為海洋三大產業中的第一大產業在我國海洋經濟中占有重要位置。然而,我國大陸海岸線漫長,海域面積廣闊,常年受到臺風、風暴潮、海浪等災害的影響,給人民的海洋漁業生產安全帶來了巨大的威脅。自2013年,全國海洋漁業生產安全環境保障服務系統(下簡稱漁業系統)建設并投入業務化運行以來,實現了全國七個沿海省份漁船動態船位信息、漁船靜態信息、大面預警報產品,以及漁場、漁港、漁區專題預報產品的傳輸、入庫和集成顯示等功能。近些年來隨著定位技術、移動通信和衛星通信技術的發展,在海洋漁業領域基于位置的信息服務成為可能,傳統的預報圖、短信等產品發布方式已經無法滿足漁民動態獲取海洋預警報信息的需求。另一方面由于海上通信成本和帶寬的限制,也需要對海洋漁業保障服務產品的數據量進行嚴格控制。本文研究的海洋漁業環境保障服務產品WebGIS發布系統作為整個漁業系統的重要組成部分,主要功能為面向社會公眾尤其是海上作業的漁民發布漁場海浪、海面風預報產品和臺風警報產品。
Open API,即開放應用編程接口早期應用于Amazon、eBay的商品數據上,直到2005年Google Map API的推出,從此涌現出眾多具有Web 2.0應用功能的開放API[1]。隨后在WebGIS領域,國內百度地圖、高德地圖、搜狗地圖等也推出了相應的開放地圖API。利用Open API構建海洋漁業環境保障服務產品發布WebGIS系統主要具備以下三點優勢:
(1) 從資源角度,Open API開放了資源的外部訪問、調用,提供了資源的混搭(mashup)機會[2]。通過資源整合節省了大量的服務器、存儲等硬件設備和網絡帶寬資源,拓寬了各類保障服務產品的使用群體(如手機、平板電腦用戶等)。
(2) 從數據角度,開發者和用戶可以高效地訪問、瀏覽地圖開放平臺提供的高分辨率的遙感與地理信息數據,而無需維護數據[3]。
(3) 從應用角度,開發者可以把地圖API嵌入自己的網站,將自身的業務數據(如漁場、臺風等保障產品)和地理信息數據進行集成發布。這種開發方式大大提高了網站的服務質量,同時也降低了開發難度。
1.1 總體架構
海洋漁業環境保障服務產品WebGIS發布系統包括數據層、服務層、表示層、用戶層四層架構。如圖1所示,數據層實現將預警報結果及矢量數據轉換為本系統所需的XML中間交換文件;服務層基于高德地圖API提供WebGIS地圖服務,并將預警報產品信息通過IIS服務器面向互聯網發布;表現層通過JavaScript腳本語言實現瀏覽器端漁場預報產品、臺風警報產品的展示;用戶層滿足臺式機、智能手機等終端設備對海洋漁業預警報產品的獲取。

圖1 系統總體架構
1.2 系統組成
海洋漁業環境保障服務產品WebGIS發布系統由硬件和軟件兩部分組成。硬件利用一臺操作系統為Windows Server 2012主機作為Web服務器。軟件包括IIS服務器、網站、中間交換文件和地圖服務四部分內容。IIS服務器的版本為7.0,支持HTML網頁、XML中間交換文件和JavaScript腳本語言的解析;本系統的網站部署在IIS虛擬目錄下./forecasting文件夾;中間交換文件為XML格式數據,存放在./forecasting/xml文件夾;地圖服務使用了基于JavaScript的高德地圖API。通過上述軟、硬件環境的搭建,系統實現了在Internet上發布,網址為:http://202.108.199.12/forecasting/index.html。
1.3 業務流程
漁業系統由“國家—海區—省”三級節點組成,各級海洋漁業與預報機構通過“海洋防災減災會商專網”實現了漁船數據、預警報產品的匯集、分發和共享。其中,沿海省級海洋預報機構制作本海域的漁場預報產品并匯交至本海區的海區級預報中心;海區級預報中心對漁場預報產品進行訂正后匯交至國家海洋環境預報中心。
如圖2所示,國家海洋環境預報中心接收到三個海區及沿海各省海洋預報臺的漁場預報產品后,由數據庫中間件解析并入庫。漁業系統集成顯示平臺通過調用漁業數據庫,制作生成53個漁場XML格式的海浪、海面風預報結果中間交換文件(在臺風過程期間,預報中心還制作臺風警報結果中間交換文件)。由于“海洋防災減災會商專網”和Internet互聯網是網絡隔離的,因此需要值班人員定時將中間交換文件通過光盤拷貝的方式存放在IIS服務器的虛擬目錄下,進行發布。最終,系統通過解析XML格式的中間交換文件對漁場海浪、漁場海面風預報產品和臺風警報產品進行發布。

圖2 系統業務流程
2.1 WebGIS構造方式
通常,WebGIS根據瀏覽器和服務器承擔的功能多少進行分類,可以分為瘦客戶端/胖服務器模型、胖客戶端/瘦服務器模型和混合模型三類構造模型[4]。基于Open API構造WebGIS為第三類客戶端/服務器混合模型。在混合模型中,對交互性操作要求較高而數據量少的應用,采用胖客戶端/瘦服務器模型將矢量的空間數據傳輸到客戶端;而對于操作較少和海量數據的應用,采用瘦客戶端/胖服務器模型以圖像方式將請求結果傳輸到客戶端[5]。本文中WebGIS系統的構建將在線地圖服務提供的遙感影像、行政區劃、地名等多級瓦片地圖,作為漁業保障服務產品發布的底圖;而漁場、臺風路徑、臺風風圈等漁業專題保障服務產品的空間信息均采用矢量數據的方式進行傳輸,并在客戶端通過開放地圖API實現解析、顯示和相關交互功能。
2.2 開放地圖API
本系統的實現即是通過調用高德地圖的API接口,用HTML、CSS和JavaScript三種前端語言實現了將漁場預報專題圖層、臺風警報圖層疊加到高德地圖上進行發布。其中,HTML負責系統前端網頁的內容結構部分,CSS負責控制網頁布局,JavaScript負責網頁行為和功能[6],高德地圖API則負責預警報產品發布和顯示。
2.3 Open API數據交互
構建海洋漁業保障產品發布WebGIS系統數據交互,一方面獲取地圖服務器端地圖數據,另一方面將漁業專題保障產品數據在業務服務器上進行發布。前者的數據格式是由地圖服務最終處理成瓦片圖像,后者一般采用XML或JSON兩種格式完成數據交互。本WebGIS系統采用了XML作為產品數據的交互格式,用戶通過瀏覽器端的JavaScript語言獲取、解析XML數據,并利用Open API將專題圖層疊加到地圖上集成顯示。漁場海面風和漁場海浪預報產品XML文件在設計上比較類似,前半部分為預報產品類型、發布時間、預報時效、圖層外框、對象類型、對象個數等保障產品描述信息;后半部分將各漁場設計為一個對象,每個對象包括漁場編號、漁場名稱、風力、風向、幾何圖形等內容。臺風警報產品XML文件包括:預報產品類型、臺風名稱、臺風編號、警報發布時間、預報時效和臺風路徑上各預報位置的風速、風向、8級大風半徑、10級大風半徑等屬性信息。
2.4 漁業保障產品發布
在高德地圖API中,漁場海面風、漁場海浪預報產品發布過程,均需要創建53個漁場多邊形(Polygon)覆蓋物,并按照“藍色-黃色-紅色”漸變的色階對漁場多邊形進行渲染,分別表示風力、浪高的預報結果。臺風警報保障產品則需要疊加三類覆蓋物對象:臺風當前的中心位置和24小時、48小時、72小時預報中心位置采用標注(Marker)覆蓋物;臺風路徑采用折線(Polyline)覆蓋物;當前和預報時刻的臺風中心位置8級風圈和10級風圈通過圓(Circle)覆蓋物。各類保障產品覆蓋物使用setMap()方法添加到地圖或者從地圖上移除。下面以漁場保障產品為例,展示了多邊形覆蓋物添加實現的主要代碼:
fisheryPolygon = new AMap.Polygon({
map: _map,
//顯示漁場多邊形的地圖對象
path: secRing,
//漁場多邊形節點坐標數組
strokeColor: ″#A0A0A0″,
strokeOpacity: strokeOpacity,
strokeWeight: 1,
二是相關課程的任課教師可以聯合團委、學生會等,精心設計暑期“三下鄉”社會實踐主題,引導學生在社會實踐中認識閩東、服務地方、提升能力,使學生對閩東特色文化的認識從感性上升到理性,進而增強實踐育人的實效性。比如:多渠道了解閩東革命老區的實際需求,結合學科專業特長,組織學生開展志愿服務,幫助老區人民解決實際困難,鍛煉和提高學生們的綜合素質能力;結合大學生創新創業教育,讓高校教師的科研成果、學生的創新思維在社會實踐中落地生根,實現成果轉換,惠及群眾。通過創新創業實踐,使學生逐步提高整合資源的能力、溝通協調的能力、統籌領導的能力等,從而為今后就業創業奠定良好的基礎。
fillColor: Fillcolor,
fillOpacity: Fillopacity});
fisheryPolygon. setMap(_map);
//將漁場多邊形添加到地圖
fisheryPolygon. setMap();
//將漁場多邊形從地圖上移除
海洋漁業保障服務產品疊加到地圖上以后,用戶通過人機交互查詢產品的細節信息。當鼠標停留在漁場上方,彈出該漁場的浪高、風力、風向等預報信息;當鼠標單擊臺風中心位置,顯示8米和10米風圈。這些覆蓋物對象的交互事件由使用高德地圖API中AMap.event對象提供的addListener事件監聽方法實現。
海洋漁業環境保障服務產品發布WebGIS系統的實現是由高德地圖API和JavaScript構建地圖服務環境,通過加載、解析XML格式中間交換文件后,調用高德地圖API的圖層渲染最終實現各類海洋環境保障服務產品的發布。如圖3所示,系統展示了2016年8月1日漁場24小時預報產品和臺風“妮妲”72小時警報產品的發布界面。

圖3 系統界面
由于受到互聯網帶寬的限制和系統性能的要求,海量空間數據的網絡傳輸效率往往是檢驗WebGIS系統綜合性能是關鍵。基于Open API的WebGIS系統一方面自動對柵格數據進行簡化,設計瓦片式的空間數據模型并優化網絡調度策略。另一方面則需要設計算法對矢量數據進行壓縮來提升數據傳輸效率。漁場海面風、海浪預報產品,以及臺風警報產品均采用矢量數據進行發布,其中臺風警報產品包括臺風路徑、風圈等空間信息較為簡單不需要進行壓縮。海洋漁場空間信息的特點是:在海上一般沿著固定的經緯度劃分,坐標點較少;而漁場與陸地交接的部分由于海岸線曲折、漫長,存在大量的坐標點。因此,在漁場海浪或海面風預報產品傳輸的過程中,需要對漁場多邊形進行壓縮,接收到數據后通過解壓縮展示預報產品的空間信息。
目前,矢量數據的壓縮方法主要分為有損壓縮和無損壓縮兩種。有損壓縮是對矢量數據中不敏感的部分,允許壓縮過程中損失一定的信息,在不影響對空間信息的理解的基礎上,換取較大的壓縮比。常見的有損壓縮方法有經典的Douglas-Peucker算法、垂距限值法、角度限值法、光欄法等。矢量數據的無損壓縮方面,文獻[7-9]中采用將空間對象的轉換為整數,并記錄坐標點的偏移量來節省存儲空間,而后又分別通過濾點壓縮、GZip網絡壓縮、基于BWT Block-Sorting算法的BZIP2壓縮等算法進行二次壓縮,進一步節省網絡傳輸數據量。本系統對漁場矢量數據的壓縮,首先采用有損壓縮算法進行預處理,去除大量冗余空間數據;然后,將每個漁場多邊形坐標點轉換為整數、計算偏移量,由于漁場預報產品發布中采用xml格式的中間交換文件進行矢量數據的傳輸,因此還需要將整數的偏移量映射為ASCII碼進行傳輸。如圖4所示,主要算法流程由7個步驟實現。

圖4 漁場矢量數據壓縮算法流程圖
Step1按順時針順序讀取漁場多邊形經緯度坐標(多邊形內環采取逆時針方向),為了保證漁場的精度,漁場多邊形坐標點均保留小數點后5位小數。
Step2首次加載多邊形頂點,直接記錄頂點的經緯度坐標值,后面的坐標點記錄與前一頂點的偏移量。因為漁場與陸地交界區域各相鄰頂點變化較少,而在海上基本采取經緯度劃分,所以記錄偏移量可以達到節省網絡傳輸數據量和去除冗余數據的目的。
Step3將每個頂點經緯度(或偏移量)由浮點型(Float)數映射為無符號整型(Unsigned Int)數。由于二進制無符號整型數沒有符號位,所以將浮點數左移1位,如果經緯度坐標為負數則再進行求反操作。
Step4對無符號整型數進行二進制操作,具體為截取二進制數的后5位,第6位補1。將這個數加63,即可得到一個區間在[95,126]的整數,將其轉化為ASCII碼字符表中‘_’—‘~’字符。
Step5對無符號整型數進行二進制移位,右移5位后重復Step4的操作,直到無符號整型數據小于0x20。
Step6當無符號整形數小于0x20時,將該數加63可得到一個區間為[63,94]的整數,將其轉化為ASCII碼字符表中‘?’—‘^’的字符。將Step4-Step6中生成的字符拼接成字符串。則該字符串為某個經度或緯度的編碼。采用除ASCII編碼(不含特殊字符)符合XML中間交換文件編碼要求,并且相比單純采用數字編碼,大大地減少了字符串長度。
Step7重新回到Step1,直到漁場多邊形頂點遍歷完畢后,將各經緯度坐標編碼合成一個長字符串,即得到了該漁場的壓縮編碼結果。
表1以某漁場為例,列出了利用本算法每個步驟的計算結果。

表1 漁場矢量數據壓縮算法步驟示例
由于矢量數據傳輸采用UTF8編碼的XML中間交換文件,因此數字、英文、標點符號各占1 B。在示例中的漁場共由22個坐標點組成,網絡傳輸數據量為374 B。采用本算法將坐標點壓縮為字符串后所需傳輸的數據量僅為144 B,壓縮率達到38.5%。因此,采用上述算法對漁場矢量數據進行壓縮和編碼起到了較好地去除冗余數據,減少網絡傳輸數據量的效果。
3.2 漁場矢量數據解壓縮
在服務器端,各漁場預報產品的空間信息通過將壓縮生成的字符串嵌入到XML中間交換文件中進行發布。而漁場矢量數據的解壓縮則在瀏覽器端通過JavaScript語言實現,主要功能是將嵌入在XML中間交換文件中的字符串解壓為一系列的漁場矢量坐標。如圖5所示,漁場矢量數據解壓縮算法順序獲取字符串中的一段字符,通過加減、移位、與或等二進制運算拼接成Int型偏移量,再將偏移量還原成Float型經緯度坐標,最后由若干經緯度坐標生成漁場多邊形矢量數據。

圖5 漁場矢量數據解壓縮算法流程圖
本文在對海洋漁業保障服務產品WebGIS發布系統的系統架構、地圖服務構建、數據交互、產品顯示等方面進行研究的基礎上,應用JavaScript和高德地圖API二次開發技術實現了全國漁場海面風、漁場海浪、臺風預警報產品的發布。在關鍵技術方面,提出了一種計算坐標偏移量并映射為ASCII碼的矢量數據壓縮及解壓縮算法,提高了漁場預報產品的Web傳輸效率。當然,本系統也存在一定的不足,前端采用JavaScript腳本開發在美觀程度、數據訪問效率方面仍有待提高。接下來將研究更先進的開發模式,依托Html5等前端開發語言和空間數據庫進一步提高用戶體驗和預警報產品的查詢、訪問效率。
[1] 譚晨輝,劉青炎.OpenAPI出現、起源與現狀[J].程序員,2008(7):38-41.
[2] 裴珊珊,葉小梁.國外Open API發展現狀及趨勢研究[J].情報科學,2009(12):1896-1900.
[3] 高嶺,宋紅軍,王海,等.網站對外資源共享Open API的研究與實現[J].計算機技術與發展,2013(4):15-19.
[4] 尚武.網絡地理信息系統(WebGIS)的現狀及前景[J].地質通報,2006(4):533-537.
[5] 曾帆.基于WebGIS空間數據發布服務的研究與應用[D].山東科技大學,2007.
[6] 李昕煜.基于JavaScript的WebGIS前端開發及優化[D].吉林大學,2015.
[7] 王剛.數字壓縮技術在改善空間數據網絡傳輸的研究[J].城市勘測,2013(6):50-53.
[8] 鐘尚平,高慶獅.一類矢量地圖的無損壓縮算法[J].系統仿真學報,2004(10):2189-2194.
[9] 趙艷偉,程振林,董慧,等.WebGIS多層次矢量數據壓縮方法及仿真實現[J].系統仿真學報,2012(6):1259-1264.
[10] 周侗,龍毅.我國近期移動地圖與互聯網地圖發展綜述[J].地理與地理信息科學,2012(5):1-5.
[11] 龍際夢,劉宏建,蔡中祥,等.主流網絡地圖應用開發API技術研究[J].北京測繪,2015(3):79-82.
[12] 歐陽峰,楊春成,謝鵬,等.通用瓦片生成引擎設計與性能優化[J].測繪科學技術學報,2014(2):177-180,184.
[13] 李斌.面向室內地圖信息服務的OpenAPI的設計和實現[D].北京:北京郵電大學,2013.
[14] 寇曼曼,王勤忠,譚同德.Google Map數字柵格地圖算法及應用[J].計算機技術與發展,2012(4):204-206.
[15] 滕駿華,逄仁波,林志環,等.全國海洋漁業生產安全環境保障服務系統研究[M].北京:海洋出版社,2015:130-150.
[16] 高德開放平臺.高德地圖JavaScript API開發指南[EB/OL].(2016-09-20).[2016-09-26].http://lbs.amap.com/api/javascript-api/summary/.
[17] Wikipedia.Open API[EB/OL].2009-03-20.http://en.wikipedia.org/wiki/Open_API.
[18] Mulligan G,Gracanin D.A comparison of SOAP and REST imple-mentations of a service based interaction independence middlew areframew ork[C]//Simulation Conference (WSC),Proceedings of the2009 Winter, IEEE,2009:1423-1432.
RESEARCHONMARINEENVIRONMENTALPROTECTIONSERVICESSYSTEMOFFISHERYPRODUCTIONSAFETYBASEDONOPENAPIWEBGIS
Cai Wenbo1Teng Junhua1Tian Jie1Liu Xu1Liu Jianwei21
(NationalMarineEnvironmentalForecastingCenter,Beijing100081,China)2(BeijingBeyonInformationTechnologyCo.,Ltd.,Beijing100096,China)
In view of the traditional forecast map and SMS cannot meet the needs of the fishermen’s dynamic access to the early warning service, marine environmental protection services system of fishery production safety based on open API Web GIS is proposed. The whole framework based on B/S mode consists of the data layer, service layer, presentation layer and user layer. The primary realizing functionalities including issues fishery ground sea surface wind forecast, wave forecast and typhoon warning products to the public are developed by Auto Navi Map API and JavaScript programming language. Due to the limitation of network bandwidth and cost, the system can realize the web transmission of fishery ground forecasting data through a kind of vector data compression method which is used to calculate the offset of geographic coordinates and then mapped it to ASCII code. Taking the XML format swap file of a fishery ground wave forecasting product as an example, the data compression rate reached 38.5%.
Open API WebGIS Map API Marine fishery Vector data compression
TP3
A
10.3969/j.issn.1000-386x.2017.09.015
2016-11-24。海洋公益性行業科研專項(201205006)。蔡文博,工程師,主研領域:遙感與地理信息系統。滕駿華,研究員。田杰,助理工程師。劉旭,工程師。劉建偉,工程師。