郭星濤,彭蓮香
(內(nèi)蒙古自治區(qū)大數(shù)據(jù)中心,內(nèi)蒙古 呼和浩特 010010)
行政區(qū)劃是國家為便于行政管理而分級(jí)劃分的區(qū)域,中華人民共和國的行政區(qū)劃由省級(jí)行政區(qū)、地級(jí)行政區(qū)、縣級(jí)行政區(qū)、鄉(xiāng)級(jí)行政區(qū)組成。行政區(qū)劃界線界樁是指由行政區(qū)域毗鄰的各方人民政府共同埋設(shè)并用于指示行政區(qū)域界線實(shí)地位置的標(biāo)志物[1]。
地名是中華民族文明史的特殊記錄與見證,是傳承優(yōu)秀傳統(tǒng)文化的重要載體。地名管理應(yīng)當(dāng)有利于維護(hù)國家主權(quán)和民族團(tuán)結(jié),有利于弘揚(yáng)社會(huì)主義核心價(jià)值觀,有利于推進(jìn)國家治理體系和治理能力現(xiàn)代化,有利于傳承發(fā)展中華優(yōu)秀文化。使用標(biāo)準(zhǔn)地名可以在服務(wù)群眾生活、社會(huì)治理、科學(xué)研究、國防建設(shè)等方面起到積極作用[2-3]。
為進(jìn)一步提高行政區(qū)劃界線界樁管理工作的信息化水平,推廣標(biāo)準(zhǔn)地名的大眾普及率,充分利用物聯(lián)網(wǎng)、北斗系統(tǒng)等新技術(shù),設(shè)計(jì)開發(fā)了基于B/S 架構(gòu)的行政區(qū)劃界線界樁地名信息系統(tǒng),實(shí)現(xiàn)了多項(xiàng)技術(shù)融合應(yīng)用于行政區(qū)劃管理和地名服務(wù)工作,提高了管理服務(wù)的信息化、智能化和便捷化水平。
B/S 架構(gòu)即瀏覽器和服務(wù)器架構(gòu)模式[4-6],是Web 興起后的一種網(wǎng)絡(luò)架構(gòu)模式,Web 瀏覽器是客戶端最主要的應(yīng)用軟件[7]。這種模式統(tǒng)一了客戶端,將系統(tǒng)功能實(shí)現(xiàn)的核心部分集中到服務(wù)器上,簡化了系統(tǒng)的開發(fā)、維護(hù)和使用。在B/S 結(jié)構(gòu)中,每個(gè)節(jié)點(diǎn)都分布在網(wǎng)絡(luò)上,這些網(wǎng)絡(luò)節(jié)點(diǎn)可以分為瀏覽器端、服務(wù)器端和中間件,通過它們之間的鏈接和交互來完成系統(tǒng)的功能任務(wù)。三個(gè)層次的劃分是從邏輯上進(jìn)行的,在實(shí)際應(yīng)用中多根據(jù)實(shí)際物理網(wǎng)絡(luò)進(jìn)行不同的物理劃分??傊珺/S 結(jié)構(gòu)就是將數(shù)據(jù)分布到某個(gè)數(shù)據(jù)服務(wù)器,將程序分布到應(yīng)用(程序)服務(wù)器或者Web服務(wù)器,而客戶端(瀏覽器)只需要加載應(yīng)用服務(wù)器的部分程序,用于數(shù)據(jù)的顯示和命令輸入,如圖1 所示。
MVVM 是前端視圖層的概念,主要關(guān)注于視圖層分離,它把前端的視圖層分為三部分: Model、View、ViewModel(VM)。它是一種軟件架構(gòu)設(shè)計(jì)模式,是一種簡化用戶界面的事件驅(qū)動(dòng)編程方式,提供了數(shù)據(jù)的雙向綁定。在MVVM架構(gòu)中,是不允許數(shù)據(jù)和視圖直接通信的,只能通過ViewModel來通信,而ViewModel就是定義了一個(gè)Observer觀察者。ViewModel 是連接View 和Model 的中間件,具有低耦合、可復(fù)用、獨(dú)立開發(fā)、可測試等特點(diǎn),具體如圖2 所示。
圖2 MVVM 架構(gòu)
MVC 是后端的分層開發(fā)概念,如圖3 所示。以系統(tǒng)采用的后端NodeJs 語言為例,前端的View 視圖層通過后端app.js 進(jìn)行請(qǐng)求處理;然后調(diào)用router.js 進(jìn)行路由分發(fā),如果涉及業(yè)務(wù)邏輯處理操作,則調(diào)用controller 模塊進(jìn)行業(yè)務(wù)處理,業(yè)務(wù)處理過程中如果涉及數(shù)據(jù)的CRUD,則調(diào)用Model層進(jìn)行數(shù)據(jù)庫操作,其中路由分發(fā)與業(yè)務(wù)邏輯處理位于controller 層。
圖3 MVC 模式
Vue是一套用于構(gòu)建用戶界面的漸進(jìn)式輕量級(jí)JavaScript框架。最核心的功能包括組件化開發(fā)和響應(yīng)式的雙向數(shù)據(jù)綁定。除此之外還有前端MVVM 模式、虛擬DOM、前后端分離部署等優(yōu)勢。Vue 框架采用自底向上增量開發(fā)的設(shè)計(jì),通過與Vue 生態(tài)系統(tǒng)的支持和第三方庫的整合,可以為復(fù)雜的單頁面應(yīng)用(SAP)提供驅(qū)動(dòng)。相較于其他框架,Vue 具有學(xué)習(xí)難度低、易使用、開發(fā)效率高等優(yōu)點(diǎn)。
Express 是一個(gè)保持最小規(guī)模的、靈活的 Node.js Web 應(yīng)用程序開發(fā)框架,提供了一系列強(qiáng)大的特性來幫助開發(fā)者創(chuàng)建各種Web 應(yīng)用,主要有以下特性:開發(fā)快速、靈活的拓展機(jī)制、使用簡單、支持路由和多模塊[8-9]。
物聯(lián)網(wǎng)(Internet of Things, IoT)是一個(gè)基于互聯(lián)網(wǎng)、傳統(tǒng)電信網(wǎng)的信息承載體,讓所有能夠被獨(dú)立尋址的普通物理對(duì)象之間形成互聯(lián)互通的網(wǎng)絡(luò),可以被視為互聯(lián)網(wǎng)的延伸和擴(kuò)展。人們通過物聯(lián)網(wǎng)的應(yīng)用可以獲得一個(gè)新的溝通維度,即從任何時(shí)間、任何地點(diǎn)的人與人的溝通聯(lián)接擴(kuò)展到人與物、物與物之間的溝通聯(lián)接,其架構(gòu)可劃分為感知層、網(wǎng)絡(luò)層、應(yīng)用層[10]。
北斗系統(tǒng)本質(zhì)上是全球化的天基時(shí)空基準(zhǔn),是構(gòu)建信息社會(huì)必不可少的信息來源和信息提供者,北斗系統(tǒng)提供的精準(zhǔn)時(shí)間和位置信息可為廣泛的用戶提供定時(shí)、授時(shí)、授頻等全天候、全天時(shí)可感知信息,是信息時(shí)代最為核心的關(guān)鍵基礎(chǔ)數(shù)據(jù)。
通過將北斗系統(tǒng)取得的位置點(diǎn)、位置關(guān)系、時(shí)間統(tǒng)一和時(shí)空分析這些時(shí)空元素與物聯(lián)網(wǎng)有機(jī)結(jié)合,必將對(duì)萬物互聯(lián)的智能時(shí)代起到巨大的支撐和推進(jìn)作用,由北斗高精度服務(wù)提供的時(shí)空信息也必將成為智能化進(jìn)程中的重要推動(dòng)力。
行政區(qū)劃界線界樁地名信息系統(tǒng)的開發(fā)平臺(tái)為Visual Studio Code,前端頁面使用VueJs 框架、OpenLayers 開源前端GIS 庫、Element 組件庫、ECharts 開源可視化圖表庫等進(jìn)行快速開發(fā),后臺(tái)使用NodeJs 語言,數(shù)據(jù)庫使用PostGIS 空間數(shù)據(jù)庫和MongoDB 非關(guān)系型數(shù)據(jù)庫,地圖服務(wù)器使用免費(fèi)開源的GeoServer。前后端認(rèn)證使用Json Web Token 進(jìn)行認(rèn)證鑒定。
系統(tǒng)的設(shè)計(jì)開發(fā)共分為6 個(gè)環(huán)節(jié),如圖4 所示,包括需求分析及現(xiàn)狀調(diào)查、確定系統(tǒng)架構(gòu)和技術(shù)路線、設(shè)計(jì)功能與界面、搭建開發(fā)環(huán)境、開發(fā)和測試、部署與應(yīng)用等。
圖4 系統(tǒng)設(shè)計(jì)流程
系統(tǒng)設(shè)計(jì)包括行政區(qū)劃、地名地址、界樁、北斗定位設(shè)備、通用地圖、設(shè)置共6 個(gè)模塊,包括15 個(gè)功能點(diǎn),如圖5 所示。
圖5 系統(tǒng)功能模塊
行政區(qū)劃模塊主要包含了省市縣鄉(xiāng)四級(jí)查詢、行政區(qū)劃界線展示、轄區(qū)情況與歷史沿革三大功能。行政區(qū)劃查詢支持省市縣鄉(xiāng)四級(jí)選擇欄和地圖雙擊選擇,行政區(qū)劃界線包含省市縣鄉(xiāng)四級(jí)矢量要素的空間數(shù)據(jù)庫、地圖服務(wù)接口以及前端配置樣式后的地圖圖層等一系列數(shù)據(jù)資源支撐。轄區(qū)情況與歷史沿革支持選中某一級(jí)行政區(qū)劃后的詳細(xì)信息和歷史沿革展示,例如政府駐地、轄屬政區(qū)、行政區(qū)劃代碼、人口數(shù)量、設(shè)立年份等信息,行政區(qū)劃地名羅馬字母拼音、少數(shù)民族語言拼寫、地名含義及歷史沿革等信息。
地名地址模塊包含地名地址庫調(diào)用、地名地址查詢展示兩大功能。其中,地名地址庫使用民政部主管的中國·國家地名信息庫的接口服務(wù),地名地址查詢展示支持搜索、列表分頁展示、地圖上的地名標(biāo)識(shí)和詳細(xì)信息,主要數(shù)據(jù)項(xiàng)為地名地址相冊(cè)、羅馬拼音、來歷和歷史等信息。
界樁模塊包含界樁數(shù)據(jù)管理與展示、圖表統(tǒng)計(jì)分析兩大功能。界樁數(shù)據(jù)分為省、縣、鄉(xiāng)三級(jí),平臺(tái)可支持界樁數(shù)據(jù)的錄入、修改、刪除等操作,支持界樁數(shù)據(jù)地圖圖層顯示、點(diǎn)擊顯示詳細(xì)信息等操作,支持按行政區(qū)劃統(tǒng)計(jì)界樁類型、材質(zhì)以及相鄰地區(qū)分布等圖表展示。
北斗定位設(shè)備模塊包含設(shè)備綁定與數(shù)據(jù)展示、設(shè)備異常處理與記錄、設(shè)備軌跡地圖展示三大功能。北斗定位設(shè)備支持實(shí)時(shí)返回經(jīng)度、緯度、角度X、角度Y及振動(dòng)入侵等參數(shù),通過將其與界樁綁定,可充分利用物聯(lián)網(wǎng)、北斗定位等新技術(shù)來實(shí)現(xiàn)界樁的信息化管理,同時(shí)平臺(tái)支持設(shè)備參數(shù)值異常報(bào)警、處理、記錄等功能,并支持設(shè)備移動(dòng)軌跡展示。
設(shè)置模塊包含管理員身份設(shè)置。訪問平臺(tái)登錄須輸入管理員賬號(hào)和密碼,平臺(tái)所有頁面均設(shè)置了訪問權(quán)限。
數(shù)據(jù)庫主要包含空間數(shù)據(jù)庫PostGIS 和非關(guān)系型數(shù)據(jù)庫MongoDB。其中,行政區(qū)劃界線和界樁等矢量數(shù)據(jù)借助ArcGIS 10.2 軟件連接postgresql 創(chuàng)建并操作PostGIS 空間數(shù)據(jù)庫來實(shí)現(xiàn);地圖服務(wù)使用GeoServer 進(jìn)行發(fā)布。矢量數(shù)據(jù)的屬性表內(nèi)容見表1 所列。MongoDB 數(shù)據(jù)庫以類似Json 的bjson 格式來存放行政區(qū)劃基本信息和歷史沿革、管理員賬號(hào)和密碼信息,見表2 所列。
表1 PostGIS 數(shù)據(jù)庫設(shè)計(jì)
表2 MongoDB 數(shù)據(jù)庫設(shè)計(jì)
HTTP 接口服務(wù)主要包含地圖API 和數(shù)據(jù)API。其中地圖API 包括兩類:一是依據(jù)OGC WMTS 標(biāo)準(zhǔn)的天地圖矢量、影像及地形等切片地圖服務(wù);二是依據(jù)WFS 標(biāo)準(zhǔn)、通過GeoServer 發(fā)布的行政區(qū)劃界線界樁的網(wǎng)絡(luò)要素服務(wù)。數(shù)據(jù)API 是指調(diào)用中國·國家地名信息庫的公開接口服務(wù)中的地名搜索、詳情及字符串解密等。具體項(xiàng)見表3 所列。
表3 HTTP 接口服務(wù)表
系統(tǒng)的客戶端與服務(wù)端的跨域認(rèn)證采用Json Web Token(JWT)。JWT 的原理是在服務(wù)器對(duì)用戶名和密碼驗(yàn)證成功后,由服務(wù)器生成一個(gè)Json 對(duì)象,并對(duì)其簽名加密生成Token 返回給客戶端。在之后的請(qǐng)求中,客戶端將這個(gè)Token 放于HTTP 請(qǐng)求頭中發(fā)送給服務(wù)端,一般是將它放入HTTP 請(qǐng)求的Header Authorization 字段中,服務(wù)端對(duì)Token 進(jìn)行解析,并驗(yàn)證其中的信息,包括用戶名、密碼、有效期等。若驗(yàn)證成功,返回相應(yīng)狀態(tài)碼,否則返回錯(cuò)誤信息。
系統(tǒng)涉及的相關(guān)技術(shù)見表4 所列,共有前端、后端、地圖服務(wù)器以及數(shù)據(jù)庫四部分內(nèi)容。
表4 涉及的相關(guān)技術(shù)
本文以內(nèi)蒙古自治區(qū)行政區(qū)劃界線數(shù)據(jù)、基本情況和歷史沿革等信息、基于內(nèi)蒙古自治區(qū)界線等距離生成的隨機(jī)點(diǎn)和屬性信息作為界樁數(shù)據(jù)來實(shí)現(xiàn)功能模塊、驗(yàn)證系統(tǒng)的運(yùn)行效果。內(nèi)蒙古自治區(qū)共有12 個(gè)地級(jí)行政區(qū)劃、103 個(gè)縣級(jí)行政區(qū)劃(旗縣區(qū))、1 024 個(gè)鄉(xiāng)級(jí)行政區(qū)劃(街道、鄉(xiāng)鎮(zhèn)、蘇木)。
服務(wù)器上安裝ArcGIS、PostGIS、MongoDB 軟件存儲(chǔ)界線界樁及管理員身份數(shù)據(jù),GeoServer 設(shè)置服務(wù)地址并發(fā)布界線界樁服務(wù),NodeJs 設(shè)置地址并發(fā)布后端服務(wù),VueJs 啟動(dòng)前端項(xiàng)目并聯(lián)通天地圖、中國·國家地名信息庫、北斗定位模塊的接口,完成系統(tǒng)部署。部分源代碼片段如圖6 ~圖7 所示。
圖6 獲取要素地圖服務(wù)算法
圖7 獲取北斗定位設(shè)備信息
行政區(qū)劃基本情況與歷史沿革、界樁錄入、北斗定位設(shè)備參數(shù)、地圖測距測面等功能界面如圖8 ~圖11 所示。
圖8 行政區(qū)劃基本情況與歷史沿革
圖9 界樁數(shù)據(jù)錄入與設(shè)備綁定
圖10 北斗定位設(shè)備參數(shù)值
圖11 測距測面工具
本文利用B/S 架構(gòu),使用VueJs 和NodeJs 搭建前后端分離項(xiàng)目,建立JWT 的前后端身份認(rèn)證機(jī)制,同時(shí)結(jié)合ArcGIS、PostGIS、GeoServer 及OpenLayers 等技術(shù)實(shí)現(xiàn)地理信息系統(tǒng)的落地,設(shè)計(jì)并實(shí)現(xiàn)了具有地圖、可視化圖表、北斗定位應(yīng)用等功能的行政區(qū)劃界線界樁地名信息系統(tǒng)。系統(tǒng)運(yùn)行穩(wěn)定,實(shí)現(xiàn)了行政界線界樁的信息化管理以及地名的推廣應(yīng)用,為民政部門關(guān)于行政區(qū)劃的信息化建設(shè)提供了借鑒,同時(shí)為不同政務(wù)部門業(yè)務(wù)融合服務(wù)提供了基礎(chǔ)數(shù)據(jù)。但是對(duì)于服務(wù)界樁管理一線工作者的便捷性不足以及數(shù)據(jù)糾錯(cuò)等問題,還有待進(jìn)一步研究。