魏佳楠 吳 勇,2* 林華劍 龔祎壟 宋 昀 傅俊豪
1(福建師范大學地理科學學院 福建 福州 350007)2(福建省陸地災害監(jiān)測評估工程技術研究中心 福建 福州 350007)3(福建師范大學數學與信息學院 福建 福州 350117)
近年來,“一張圖”工程已成為國土資源領域研究的熱點,它主要利用GIS技術將多種信息有機地綜合到一個地圖界面上,并提供這些信息的交互查詢和相應的空間分析[1]。其根本目的是充分發(fā)揮已有基礎空間數據的作用[2],對實現數據的共享使用具有重要意義。“一張圖”系統已廣泛應用于水文水資源[3]、林地[4]、煤礦地測[5]等領域。2018年國務院機構改革方案提出,不再保留國土資源部,組建自然資源部。新組建的自然資源部整合了原國土資源部、原國家海洋局、原國家測繪地理信息局、國家發(fā)展改革委、住房城鄉(xiāng)建設部、水利部、農業(yè)部和原國家林業(yè)局的相關職責,對自然資源數據進行科學高效的信息化建設就顯得尤為重要。為了將更多的資源數據與部門內工作流程對接,構建滿足自然資源管理新時代、新形勢下新要求的“一張圖”系統的需求應運而生。“一張圖”系統不但應具備更合理的空間數據和業(yè)務數據的訪問機制,還應更加關注數據和系統的安全管理問題。
目前,已有學者在“一張圖”系統建設中的權限管理和日志管理方面展開研究。在權限管理方面,張娜娜[6]采用基于角色的訪問控制技術(RBAC),實現基于角色的權限管理;任建剛等[7]設計的系統提供權限、角色的設置和管理,實現各類型數據的同步管理。在日志管理方面,吳慶雙等[8]設計的日志管理模塊用于記錄用戶的登錄信息,僅系統管理員具有查看日志信息、刪除用戶日志和導出用戶信息等功能的權限;許等平等[9]結合日志審計系統,通過日志記錄對事故進行追根溯源。目前權限管理的多數研究集中在角色和系統功能權限的關系,較少涉及角色和空間數據權限的關系,進一步將角色、系統功能和空間數據權限的關系有機結合的研究更為缺乏。在日志管理方面,記錄用戶在系統中的功能操作是多數系統的關注內容,而較少涉及對服務端空間數據訪問的記錄,不利于日志審計和系統故障排查工作的開展。
針對上述問題,根據龍海市自然資源局的需求,本文結合Angular、Node.js、Koa2和Redis等開源框架,設計并實現基于WebGIS的自然資源“一張圖”管理信息系統。系統實現多源異構數據的集成與共享,提供數據查詢、輔助審核、統計分析、制圖、數據更新和系統管理等功能。更為重要的是,系統具有對服務端空間數據與數據庫業(yè)務數據的統一訪問機制,具備統一管理角色權限、數據權限和功能權限的能力,并能將用戶使用系統的操作和對服務端空間數據的訪問統一記錄在日志中,為龍海市自然資源局內數據共享和高效管理提供支持。
WebGIS是傳統的GIS在網絡上的延伸和發(fā)展[10],已應用于堤防[11]、災害評估[12]、地質[13]等領域。本文系統基于WebGIS實現,利用ArcGIS Server進行圖層的發(fā)布和管理,并將空間數據與業(yè)務數據存儲在PostgreSQL數據庫中。前端采用ArcGIS API for JavaScript技術,結合Angular、Node.js、Koa2和Redis等開源框架進行系統的架構與研發(fā)。本文使用的開發(fā)框架可令系統具有良好的可維護性和可擴展性并能夠提升系統的性能。下面對涉及的技術做簡要介紹。
Angular是一個用HTML和TypeScript構建客戶端應用的平臺與框架。它遵循基于組件的體系結構,其中每個組件都是獨立可重用的。Angular還具有雙向數據綁定的功能。本文設計的系統使用Angular 6進行前端Web頁面的構建,使系統具有很好的可維護性和可擴展性,組件化的構建令開發(fā)更加高效。
Node.js是基于JavaScript語言和Chrome V8引擎的運行環(huán)境,采用模塊化管理[14],具有單線程、非阻塞I/O(Input/Output)、事件驅動的特點和輕量、可伸縮的優(yōu)勢。Koa2是基于Node.js平臺的下一代Web框架,可實現異步流程控制,免除重復繁瑣的回調函數嵌套。本文系統使用Koa2進行后臺框架的構建,實現了路由分配、數據傳送等功能,利用Async、Await和Promise實現異步流程控制。同時,Koa2對系統日志的記錄具有良好的支持效果,提升了系統的性能。
Redis是一個高性能的Key-Value數據庫,支持多種類型的數據結構,可實現數據的緩存。本文系統使用Redis將高頻訪問的數據如功能、圖層、角色等信息進行緩存,在系統登錄初始化時對用戶的權限進行判斷并展示對應數據,提升了系統性能。
系統的構建遵循相關規(guī)范和安全策略,總體架構分為展示層、業(yè)務層、數據層和基礎設施層四部分,具體如圖1所示。
圖1 系統總體架構圖
(1) 展示層:直接面向用戶的使用,用戶將系統中不同功能的請求發(fā)送至業(yè)務層。通過Angular 6的組件化實現系統具體UI界面的設計與交互,并通過UI組件請求業(yè)務層的服務,以完成展示層的功能。展示層具備數據瀏覽、數據查詢、輔助審核、統計分析、制圖、數據更新、系統管理等功能。
(2) 業(yè)務層:業(yè)務層利用Node.js、Koa2、Redis和ArcGIS Server進行構建,借助Redis將權限和使用頻率高的信息進行緩存,并使用ArcGIS Server進行空間數據的發(fā)布和管理,為展示層提供服務。業(yè)務層構成了系統架構的核心部分,滿足數據資源共享的需求。業(yè)務層由通用業(yè)務、功能業(yè)務和ArcGIS Server服務三部分組成。通用業(yè)務包括數據訪問業(yè)務、權限管理業(yè)務和日志管理業(yè)務。功能業(yè)務包括數據瀏覽業(yè)務、數據查詢業(yè)務、輔助審核業(yè)務、統計分析業(yè)務、數據更新業(yè)務等。Node.js和Koa2為通用業(yè)務和功能業(yè)務的實現提供基礎。ArcGIS Server服務包括Map Service、Feature Service和Geoprocessing Service,為空間數據的訪問和分析提供基礎。
(3) 數據層:數據層是系統數據管理的基礎支撐,包括地理空間數據、業(yè)務數據和系統管理數據三類。數據庫使用PostgreSQL。數據層具有存儲、備份等功能,為系統功能的應用提供數據支持。
(4) 基礎設施層:包括計算機、服務器、打印機和網絡設施等,是系統安全穩(wěn)定運行的保障。
本文系統具有“統一數據訪問、統一權限管理、統一日志管理”的優(yōu)勢,解決了權限管理不完善、日志記錄不完整的缺陷,在增加系統安全性的同時,也為系統日后的維護、擴展提供便捷。統一數據訪問是統一權限管理和統一日志管理的基礎。下面分別對數據訪問、權限管理和日志管理的運行機制和過程進行介紹。
(1) 統一數據訪問:將系統對空間數據和業(yè)務數據的訪問有機地結合,避免了對兩類數據的獨立訪問,有利于對空間數據和業(yè)務數據訪問和信息獲取的控制。Redis中緩存的數據包括功能、圖層、角色等信息。統一數據訪問過程如圖2所示。
圖2 統一數據訪問過程
對空間數據、業(yè)務數據的訪問時,由客戶端發(fā)送請求給Koa2服務器,Koa2服務器在Redis中對功能-圖層表、屬性信息表進行查詢,如果有對應的查詢結果,將結果返回客戶端,否則,在數據庫中進行查詢。若對業(yè)務數據進行訪問,則在數據庫中查詢業(yè)務數據信息,得到查詢結果后將信息記錄在Redis中并返回客戶端。若對空間數據進行訪問和查詢,Koa2服務器將在數據庫中對圖層的服務地址進行查詢,對查詢到的服務地址進行解析,將圖層地址頭、地址路徑等信息進行拼接組成完整的訪問地址。Koa2將拼接后的地址返回給客戶端,客戶端攜帶此地址訪問ArcGIS Server服務端并進行查詢,查詢得到的信息返回客戶端。
(2) 統一權限管理:將角色、功能和圖層三者有機地建立起關系,方便對用戶的權限進行控制,用戶僅可以使用權限內對應的功能和數據,提升了系統的安全性,為數據共享提供了權限支撐。Redis存儲的內容包括與權限有關的信息。統一權限管理過程如圖3所示。
圖3 統一權限管理過程
實現統一權限管理的具體方法是用戶登錄系統時,將請求發(fā)送到Koa2服務器,然后在Redis中進行權限信息的查詢,若Redis中有對應的信息,將獲得的查詢結果返回給客戶端進行系統初始化,否則,在數據庫中進行查詢,得到查詢結果后返回給客戶端并且存入Redis中。查詢得到的不同結果令不同用戶登錄后的系統展示不同的功能界面和圖層界面,即用戶在使用系統時的權限信息由登錄時的權限判斷進行確定。
(3) 統一日志管理:統一日志管理是在統一數據訪問的基礎上實現的。系統日志不僅可以記錄用戶訪問業(yè)務數據和使用系統功能等操作信息,而且能夠記錄訪問的圖層服務的地址。統一日志管理過程如圖4所示。
圖4 統一日志管理過程
在統一數據訪問的基礎上,Koa2服務器可從Redis、數據庫中獲取相應信息。若對ArcGIS Server服務器進行訪問,在接收返回的空間數據時記錄地圖服務的地址。Koa2將獲取的用戶信息、時間、客戶端的IP地址等信息與系統操作信息整合成完整的日志記錄到日志表中,日志表存儲在PostgreSQL中。
統一日志管理避免了前端訪問ArcGIS Server圖層服務卻無法被記錄的情況,能夠提高日志記錄的實時性、完整性和準確性,有利于檢查錯誤發(fā)生的原因,為保障數據的安全性提供基礎。
數據資源在信息化建設中具有基礎性、支撐性、核心性的作用[15]。數據庫建設是系統建設的基礎環(huán)節(jié),包括數據收集與整合以及數據庫的設計。
數據收集來源于龍海市自然資源局各職能部門。根據數據類型劃分為地理空間數據、業(yè)務數據和系統管理數據三類。地理空間數據包括土地數據、礦產資源數據、地質災害數據等自然資源數據,如遙感影像圖、行政區(qū)劃圖、地災點圖等;業(yè)務數據包括相關項目數據等;系統管理數據包括角色數據、權限數據、日志數據等。
數據整合主要將收集到的數據進行清理和規(guī)范化處理,并設置統一的空間參考和數據標準,空間數據統一采用2000國家大地坐標系。將處理后的空間數據發(fā)布到ArcGIS Server服務端,服務形式包括WMTS、WMS、WFS等,通過訪問圖層服務地址將數據對接入系統中。
數據庫的分析和設計必須滿足用戶的具體要求[16]。為保障數據庫的可管理性和可維護性,提升系統的效率,在遵循數據表中的數據相互獨立、數據冗余度低、數據庫命名規(guī)范等原則的情況下,對數據庫的概念結構設計、邏輯結構設計和數據庫物理設計展開具體研究。
數據庫的概念結構設計是從現實世界到虛擬世界過渡的過程。根據龍海市自然資源局內不同科室及部門的職責,系統需為不同科室及部門提供不同的功能和使用圖層的權限。此外,圖層在組織形式上應滿足靈活可變的需求,并支持不同的展示方式。在綜合考慮系統功能及其所涉及的各種實體以及實體之間關系的基礎上,構建數據庫實體—聯系(E-R)模型,以展示各種數據及其之間的聯系。
數據庫的邏輯結構設計根據概念結構設計中的E-R圖為依據向關系模型進行轉換。本文系統所使用的數據具有多類型和時空性的特點,故將數據庫中的數據分為空間數據、業(yè)務數據和系統管理數據三部分。空間數據遵循相關空間數據標準并基于概念結構設計中圖層與圖層的關系進行組織。本文重點介紹與統一權限管理、統一數據訪問、統一日志管理相關的數據表設計。
(1) 統一權限管理的關鍵是如何有效地結合角色、空間數據和系統功能三者之間的關系。統一權限管理涉及的數據表包括角色表、圖層表、功能表、角色-圖層表、圖層-功能表和角色-功能表。其中:角色表與角色-圖層表、角色-功能表分別為一對多的關系;圖層表與角色-圖層表、功能-圖層表分別為一對多的關系;功能表與功能-圖層表、角色-功能表分別為一對多的關系。通過6張表的相互關系建立視圖,在此基礎上實現角色、圖層和功能之間關系的管理。統一權限管理涉及的數據表關系如圖5所示。
圖5 統一權限管理相關數據表關系圖
(2) 統一數據訪問包括對空間數據和業(yè)務數據的訪問。對空間數據訪問時,主要利用圖層表、圖層字段表、功能-圖層表和圖層選用屬性字段表。本文系統對空間數據中屬性信息的查詢方式是在其對應的ArcGIS Server服務中進行查詢。通過圖層表獲得圖層服務地址,利用圖層字段表、功能-圖層表和圖層選用屬性字段表獲取不同功能對應的屬性字段信息。訪問業(yè)務數據時將涉及其他相關的系統管理表和業(yè)務數據表。統一數據訪問涉及的數據表關系如圖6所示。
圖6 統一數據訪問相關數據表關系圖
(3) 統一日志管理涉及的數據表是在統一權限管理的6張數據表的基礎上,增加了用戶表和日志表。系統將用戶使用的功能以及訪問的ArcGIS Server中圖層的服務地址記錄在日志表中。日志表的內容包括用戶名、用戶工號、操作類型、IP地址和時間等信息。統一日志管理涉及的數據表關系如圖7所示。
圖7 統一日志管理相關數據表關系圖
數據庫物理設計包括建立索引、視圖以及存儲過程。為了提高系統的數據訪問速度,在數據表中的主碼、外碼上建立索引,并在數據表中使用頻率較高的字段上建立索引。為了有效地關聯角色、圖層、功能三者的關系,并簡化對數據的訪問,建立對應的視圖。為了提高系統頁面初始化的速度,通過設計存儲過程獲取權限信息、功能展示等信息。
在完成數據庫的概念結構設計、邏輯結構設計和數據庫物理設計后,將收集與整合后的數據在檢查無誤后錄入數據庫,經過數據庫測試后完成數據庫的建設。
系統由業(yè)務應用子系統和系統管理子系統構成。業(yè)務應用子系統集成了各類自然資源數據,對數據進行直觀展示;系統管理子系統作為業(yè)務應用子系統的輔助系統,滿足不同職能部門對不同數據的多樣需求,可對用戶和系統進行便捷的管理。
業(yè)務應用子系統的功能模塊包括數據瀏覽、數據查詢、輔助審核、統計分析、制圖和數據更新功能模塊。業(yè)務應用子系統功能模塊介紹如表1所示。
表1 業(yè)務應用子系統功能模塊
系統管理子系統可根據需求實時對系統進行配置和管理,設置僅管理員具有使用權限。功能模塊包括用戶管理、角色管理、圖層配置、軟件功能配置、權限管理、日志管理、屬性表字段管理和服務器管理等功能。系統管理子系統功能模塊介紹如表2所示。
表2 系統管理子系統功能模塊
續(xù)表2
下面就“統一數據訪問、統一權限管理、統一日志管理”設計模式下涉及的圖層配置、權限管理、日志管理功能模塊進行介紹。
(1) 圖層配置:圖層配置功能可實現對ArcGIS Server圖層服務地址的修改,以完成圖層的替換。功能界面左側是圖層樹,可進行增加、刪除、修改圖層分類等操作,圖層分類和圖層對應的信息顯示在右側信息欄中。圖層信息包括圖層名稱、圖層描述、時間、ArcGIS Server地址以及選擇是否為影像圖。圖層配置功能界面如圖8所示。
圖8 圖層配置功能界面
(2) 權限管理:權限管理功能將角色、圖層和功能三者的管理有機地結合起來,根據角色的不同進行圖層權限和功能權限的配置,角色僅可使用權限管理中勾選的功能和圖層。使用權限管理功能能方便管理不同角色與功能和圖層的關系。權限管理功能界面如圖9所示。
圖9 權限管理功能界面
通過權限管理的設置,不同角色具備不同的權限。例如管理員具有業(yè)務查詢和定位查詢這兩項功能的使用權限,而設置用戶“信息中心”不具有使用這兩項功能的權限,則“信息中心”登錄后系統界面中對應的功能顯示為灰色且不可選擇。管理員具有使用2.5維電子地圖、地名地址的權限,設置用戶“信息中心”不具有使用這些圖層的權限,其界面右側圖層列表中則不顯示這些圖層。不同權限下功能和圖層差異對比如圖10所示。
圖10 不同權限下功能和圖層差異對比
(3) 日志管理:日志管理功能記錄了用戶在系統中的各種操作。日志管理具有查詢、導出和日志統計的功能,不僅可以記錄功能使用,涉及到圖層訪問時,還能夠記錄具體訪問的圖層服務地址,有助于系統發(fā)生錯誤時的問題排查。日志統計功能使地圖服務訪問以及功能訪問的頻度直觀可見,有利于確定使用頻率較高的功能和圖層,為今后功能完善提供參考。日志管理功能界面如圖11所示。
圖11 日志管理功能界面
本文結合先進的開源框架,實現了基于WebGIS的龍海市自然資源“一張圖”管理信息系統。系統具有“統一數據訪問、統一權限管理、統一日志管理”的優(yōu)勢,為數據的訪問和獲取提供便捷,有利于檢查系統發(fā)生錯誤的原因,提升了系統的安全性、可擴展性和可維護性。
本文系統將自然資源空間數據和業(yè)務數據相結合,針對龍海市自然資源局各職能部門設計了不同的功能,在數據查詢、統計分析、輔助審核、制圖和數據可視化展示等方面具有實際應用價值。通過使用本文系統,龍海市自然資源局各職能部門可快速準確地掌握該地區(qū)土地、礦產、地質災害等各類自然資源的布局和具體信息,有效提高了工作人員的辦公效率,提升了數據共享程度,達到了增強自然資源數據管理水平的效果。本文構建的系統同時可為其他領域的“一張圖”系統的建設提供有效的借鑒和參考。