王海斌
(濟南市勘察測繪研究院, 山東 濟南 250000)
首屆聯(lián)合國世界地理信息大會指出人類活動80%的信息與地理位置有關。地圖作為信息傳遞和空間呈現(xiàn)的重要載體,已經(jīng)成為人類工作、學習和生活不可缺少的科學語言和工具[1]。隨著信息與通信技術(shù)(information and communications technology,ICT)的發(fā)展,地理信息系統(tǒng)(geographic information system,GIS)應用的迅速擴展,在當前應用場景多元化的趨勢下,對地圖的可視化表達提出了新的更高要求[2]。得益于網(wǎng)絡三維繪圖技術(shù)(web graphics library,WebGL)的發(fā)展,為終端用戶構(gòu)建實時三維圖形和場景提供了支撐[3],三維GIS應用迅速發(fā)展,周瑜琦等在三維GIS場景下對古生物的時空演變歷程進行了可視化[4]。羅夢佳、蔡周平、劉永軒利用三維GIS技術(shù)在智慧園區(qū)、智慧社區(qū)、三維校園中進行了研究和實踐[5-7]。李小敏、李佳俊將三維GIS應用到城市規(guī)劃和街區(qū)微更新中[8-9]。與此同時,矢量瓦片地圖也開展了工程應用實踐,與柵格瓦片相比,矢量瓦片具有數(shù)據(jù)輕量、高清顯示、快速渲染、高效更新、一源多樣、交互性強、無插件實現(xiàn)二三維一體化等諸多優(yōu)點[10],為海量空間數(shù)據(jù)可視化提供了有效的方案,應用前景廣泛。目前國內(nèi)外商業(yè)GIS引擎均已具備矢量切片地圖。目前,學者們圍繞數(shù)據(jù)組織、存儲、檢索展開了大量研究:李少杰等研發(fā)了跨平臺高性能地圖渲染引擎[11];俞麗君等對如何提升矢量瓦片數(shù)據(jù)源的檢索效率進行了研究,并提出了一種基于改進網(wǎng)格與遞歸網(wǎng)格排序R-樹的混合索引結(jié)構(gòu)[12];聶沛等提出了一種基于Spark并行計算框架的矢量瓦片并行生成和分布式存儲的方法[13];王梅欣開展了利用分布式計算進行矢量瓦片數(shù)據(jù)生產(chǎn)和發(fā)布應用的研究[14]。在利用集群結(jié)構(gòu)輔助提升系統(tǒng)性能方面,文獻[15-18]分別利用分布式、集群技術(shù)在傾斜攝影建模、水資源管理信息系統(tǒng)、發(fā)電集群規(guī)劃系統(tǒng)、氣象數(shù)據(jù)收發(fā)系統(tǒng)中進行了應用,姚闖開展了基于高性能集群架構(gòu)的地理信息系統(tǒng)架構(gòu)設計研究[19]?;谑噶壳衅貓D應用框架的離線部署和集群架構(gòu)方面,還未見有公開研究成果。
針對商用GIS平臺軟件價格高、限制矢量切片地圖技術(shù)應用范圍的弊端,本文圍繞構(gòu)建支持集群架構(gòu)的矢量切片地圖架構(gòu)展開,重點對矢量瓦片數(shù)據(jù)模型、生產(chǎn)、發(fā)布、渲染、應用進行了研究,設計了一種基于開源項目的支持大范圍、高性能、多并發(fā)、可動態(tài)伸縮擴展的技術(shù)框架,并實現(xiàn)了框架資源的離線部署,擺脫了請求在線資源的束縛,滿足非互聯(lián)網(wǎng)環(huán)境中的應用需要。最后,利用自然資源部公開和濟南市地理信息數(shù)據(jù)對本文提出的技術(shù)路線進行了驗證和性能分析。
矢量瓦片地圖是基于WebGL在客戶端對矢量數(shù)據(jù)的描述文件進行渲染。首先將矢量數(shù)據(jù)的幾何信息和屬性信息分割為一組矢量瓦片存儲在服務器端,客戶端根據(jù)地圖顯示范圍和樣式文件定義的數(shù)據(jù)源通過分布式網(wǎng)絡獲取矢量瓦片、地圖標注字體、圖標等數(shù)據(jù)源,然后根據(jù)樣式文件定義的地圖表達規(guī)則,在終端設備即時渲染出地圖,無須預先渲染為柵格圖片(表1)。
表1 矢量切片與柵格切片優(yōu)劣勢
Mapbox的矢量瓦片基于Google混合語言數(shù)據(jù)標準(Google protocol buffers),是一個開源矢量瓦片數(shù)據(jù)標準,也是目前較為通用的矢量瓦片數(shù)據(jù)標準,已被多個公司和組織采用。矢量瓦片文件表示的是投影在正方形區(qū)塊上的數(shù)據(jù)。瓦片自身不包含范圍和投影坐標系信息,編碼中包含的是圖層(組)內(nèi)的元數(shù)據(jù)信息、幾何要素和屬性信息。
1.1.1幾何信息存儲
矢量瓦片內(nèi)存儲的數(shù)據(jù)是相對坐標,并不是真實的地理坐標。其集合數(shù)據(jù)采用屏幕坐標系。幾何圖形被編碼為要素的幾何字段的一個32位無符號型整數(shù)序列。幾何圖形中的坐標均為整數(shù)。每個整數(shù)是指令數(shù)(CommandInteger)或參數(shù)數(shù)(ParameterInteger)。以點1(2,2)、點2(7,4)、點3(11,14),點4(4,12)為例展示面狀圖形的繪制過程(圖1)。
圖1 幾何信息編碼規(guī)則(以面對象為例)
1.1.2屬性信息編碼
要素屬性被編碼為標簽字段中的一對整數(shù)。在每對標簽中,第一個整數(shù)表示關鍵字在其所屬的圖層的關鍵字列表的中索引號(以0開始)。第二個整數(shù)表示的值在其所屬的圖層的值列表的中索引號(以0開始)。一個要素的所有關鍵字索引唯一。每個要素的標簽字段必須為偶數(shù)。要素中的標簽字段包含的關鍵字索引號或值索引號必須不能大于或等于相應圖層中關鍵字或值列表中的元素數(shù)目。
矢量瓦片地圖以矢量瓦片數(shù)據(jù)為渲染對象,基于遵循三維繪圖協(xié)議的引擎,實現(xiàn)在用戶終端的地圖完整呈現(xiàn)和無級縮放、旋轉(zhuǎn)、傾斜、空間量測、分層管理、屬性查詢等交互。
1.2.1WebGL繪圖
WebGL是一種面向網(wǎng)絡應用、跨平臺、免費的、即時圖形繪制底層技術(shù)協(xié)議,基于腳本(JavaScript)語言,增加了三維圖形接口(OpenGL for embedded systems,OpenGL ES)綁定,可以直接使用指令操作顯卡,使顯卡渲染的圖形在瀏覽器中顯示(圖2)。
圖2 WebGL繪圖過程
1.2.2矢量切片地圖呈現(xiàn)
基于地圖渲染引擎,使用WebGL渲染交互式矢量瓦片地圖,通過對矢量瓦片數(shù)據(jù)加載和解析,高效地渲染大量的地圖要素,擁有流暢的交互以及動畫效果、可以基于地圖樣式文件顯示地圖并且支持多終端。
矢量瓦片地圖的應用路線可根據(jù)是否生成緩存分為兩種。第一種:預生成緩存,基于數(shù)據(jù)預先構(gòu)建數(shù)據(jù)索引、生成瓦片緩存,根據(jù)用戶請求將對應空間上的切片緩存?zhèn)鬏數(shù)浇K端,借助WebGL繪制顯示。第二種:基于空間數(shù)據(jù),通過服務端直讀數(shù)據(jù)庫,根據(jù)用戶請求,借助數(shù)據(jù)庫空間計算函數(shù),實時動態(tài)地將矢量瓦片數(shù)據(jù)返回到用戶終端,最終同樣借助WebGL繪制顯示。這兩種技術(shù)路線各有優(yōu)勢和適用的場景,針對基礎地圖應用,目前支持矢量切片地圖的主流GIS平臺,均采用預生成瓦片緩存的路線,本文采用預生成緩存的技術(shù)實現(xiàn)方式,以支持集群部署和本地化部署作為技術(shù)路線研究中的關鍵。
按照數(shù)據(jù)存儲、服務發(fā)布、地圖呈現(xiàn)三個步驟,在數(shù)據(jù)存儲上選擇開源的PostgreSQL數(shù)據(jù)庫,在空間擴展插件(PostGIS)的支持下完成空間數(shù)據(jù)的存儲,且能夠滿足集群部署的要求。在GIS引擎上,利用GeoServer進行矢量瓦片的生成和發(fā)布,同時兼顧支持集群部署的要求。在地圖呈現(xiàn)上,基于Mapbox GL JS API在終端繪制(圖3)。
圖3 矢量瓦片地圖應用技術(shù)路線
本文技術(shù)路線中的數(shù)據(jù)庫、GIS引擎均可通過本地部署安裝的方式,實現(xiàn)無在線資源依賴、獨立的安裝。①從github上下載mapbox gl js源碼,安裝工程依賴,并根據(jù)應用需要完成源碼的修改,然后手動編譯項目,將生成的類庫文件利用Web容器進行發(fā)布使用,也可通過引用靜態(tài)文件的方式在工程中進行使用。②Mapbox采用精靈圖標(Sprite圖標),有效減少了地圖渲染中的圖標資源的請求次數(shù),提升渲染效率。通過開發(fā)精靈圖標生成工具,將適用于不同地圖風格的圖標組合并成完整的圖標。同時針對矢量地圖在移動終端的顯示要求,需要將運行于PC端的單個圖標放大2倍,并在文件名中添加@2x標識。利用Web容器將圖標進行網(wǎng)絡發(fā)布,在工程項目中引入絕對路徑進行使用。③Mapbox使用*.pbf格式的分片字體,解決了請求單個大字體文件帶來的加載效率低下、服務端和客戶端壓力過大的問題。字體文件制作采用Mapbox官方公開的字體轉(zhuǎn)換工具進行格式轉(zhuǎn)換,轉(zhuǎn)換后基于Web容器進行網(wǎng)絡發(fā)布,在工程項目中引入發(fā)布的字體資源進行使用。
利用集群部署的方式提升應用框架的性能和可靠性。數(shù)據(jù)庫、GIS引擎、前端等集群設計如圖4所示。
(1)數(shù)據(jù)庫采用負載均衡和高可用兩種集群技術(shù)方法保證PostgreSQL的高可用性?;赑ostgreSQL主從部署架構(gòu),采取高可用集群的設計理念實現(xiàn)數(shù)據(jù)庫的高可用,負載均衡(Load balancing)和自動故障轉(zhuǎn)移(automatic failover)利用中間件(Pgpool-II)完成。
(2)GIS引擎集群利用消息中間件(ActiveMQ)搭建GeoServer負載均衡集群,實現(xiàn)主/從(master/slave)的通信和同步,其節(jié)點的數(shù)量總數(shù)可與Pg集群中節(jié)點總數(shù)保持一致或成倍數(shù)提升,以保證各集群節(jié)點間的對應比例。同時,集群可以橫向復制擴展,以支撐更多連接節(jié)點的訪問需要。
(3)前端各節(jié)點之間采用共用網(wǎng)絡附屬存儲(network attached storage,NAS)的方法,保證Mapbox GL JS離線部署資源版本的一致性,利用Nginx作為Web容器,利用Nginx搭建反向代理集群。
圖4 集群部署架構(gòu)設計
按照設計的技術(shù)路線,利用PostgreSQL存儲原始空間數(shù)據(jù),利用GeoServer連接空間數(shù)據(jù)庫進行矢量瓦片生成和發(fā)布,基于Vue框架開發(fā)矢量瓦片地圖的前端呈現(xiàn)系統(tǒng),對本文的設計的技術(shù)路線和離線部署進行了實現(xiàn)和驗證。
整體技術(shù)路線包含空間數(shù)據(jù)存儲、矢量切片服務發(fā)布、矢量切片地圖渲染三部分。
3.1.1數(shù)據(jù)存儲
基于空間地理數(shù)據(jù)插件PostGIS擴展PostgreSQL的空間數(shù)據(jù)存儲能力。將通用的空間數(shù)據(jù)格式轉(zhuǎn)換到*.shp格式。①基于PostgreSQL創(chuàng)建空間數(shù)據(jù)庫;②對數(shù)據(jù)進行統(tǒng)一的坐標系和字符編碼轉(zhuǎn)換;③數(shù)據(jù)入庫,并對數(shù)據(jù)進行檢查驗證。
3.1.2服務發(fā)布
利用GeoServer支持矢量瓦片服務的能力,基于PostgreSQL提供的空間數(shù)據(jù)源,進行發(fā)布。①安裝GeoServer和矢量瓦片插件(vector tiles-plugin);②建立工作區(qū),連接PostgreSQL空間數(shù)據(jù)庫,作為數(shù)據(jù)源;③添加數(shù)據(jù)源中的數(shù)據(jù)表作為圖層數(shù)據(jù),并設定網(wǎng)格尺寸集、坐標系、切片格式進行資源發(fā)布。
3.1.3地圖渲染
基于GeoServer發(fā)布的矢量切片服務,利用地圖表達配圖工具生成地圖樣式文件,在前端應用工程中引入離線部署的資源,并引入地圖樣式文件,實現(xiàn)矢量切片地圖的展示。
基于計算資源,利用地理信息數(shù)據(jù)資源對文中提出的技術(shù)框架性能進行驗證和測試,并對結(jié)果進行簡要分析。
3.2.1實驗數(shù)據(jù)
本文以國家基礎地理信息中心公開的全國范圍內(nèi)1∶100萬和1∶25萬的分幅數(shù)據(jù)和濟南市范圍內(nèi)1∶1萬、1∶2000、1∶500數(shù)據(jù)作為實驗數(shù)據(jù),數(shù)據(jù)總量為12.72 GB,數(shù)據(jù)總條數(shù)1264.83萬。
3.2.2實驗環(huán)境
本文利用5臺服務器、3臺客戶端電腦搭建了性能測試環(huán)境(表2),測試了L6-L21級別的矢量瓦片在服務端動態(tài)生成、前端渲染環(huán)節(jié)的性能。
3.2.3結(jié)果分析
在矢量瓦片生成測試方面,通過模擬發(fā)送請求,監(jiān)測服務端請求返回時間和成功率的方式實現(xiàn)。性能及分析如下:①在實驗服務器配置下,僅依靠單組數(shù)據(jù)庫中的主節(jié)點,可有效支撐300并發(fā),開放數(shù)據(jù)庫從節(jié)點的讀取權(quán)限后,能夠支撐不低于400的并發(fā);②在測試的數(shù)據(jù)范圍內(nèi),L12-L15級別的瓦片生成速度,略低于其余層級,濟南市域范圍內(nèi)的矢量切片響應效率略低,初步判斷是因濟南市范圍數(shù)據(jù)比例尺高,單個切片數(shù)據(jù)量大造成;③初次訪問矢量瓦片的返回時間長于請求已生成的緩存,且初次訪問成功率會低于請求已有緩存的方式。
在終端渲染方面,基于實驗設備通過監(jiān)聽瀏覽器中瓦片請求和終端渲染時間的方式評估終端顯示性能。在實驗的顯示設備中,滿屏請求的瓦片數(shù)量為32到45個,加載和渲染時長因終端的顯卡設備而變化,終端顯卡性能越好,繪制和響應速度越快,此外網(wǎng)絡時延也是影響矢量瓦片顯示時間的一個重要因素。
本文利用開源項目,基于分布式和集群的計算架構(gòu),搭建了一套高可用的矢量瓦片地圖離線部署框架,以適應當下時空數(shù)據(jù)規(guī)模的急劇增長、泛在時空信息服務模式普及對地圖應用服務的高性能、高可靠性、可自由定制的要求,滿足了矢量切片地圖的工程應用需要。此外,本文技術(shù)框架基于開源項目搭建,有效降低了應用的成本,提升了在地理信息工程中廣泛推廣的可行性。
本文尚未在實時、動態(tài)矢量切片應用路線方面進行深入研究。同時,本文采用的是基于文件的矢量瓦片緩存機制,尚未利用數(shù)據(jù)庫技術(shù)將矢量瓦片緩存進行集約、高效的存儲和管理,后期將在這些方面須進行深入研究。此外,對矢量瓦片的終端應用效能分析上仍需進一步投入大量的設備資源,利用控制變量的方法進行深入的測試、驗證和分析。