李冬
(長(zhǎng)江大學(xué)地球科學(xué)學(xué)院,湖北 武漢430100)
城市發(fā)展加速,需要大量的物質(zhì)介質(zhì)傳輸,城市管路空間的合理規(guī)劃利用已經(jīng)成為城市基礎(chǔ)設(shè)施規(guī)劃的重要研究部分。目前,Java 語(yǔ)言平臺(tái)實(shí)現(xiàn)管道主題的GIS 應(yīng)用中,多數(shù)為使用JavaApplet 實(shí)現(xiàn)C/S 客戶端模式,缺乏靈活性和跨平臺(tái)能力不足。隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的發(fā)展,輕量化的WebGIS 城市管網(wǎng)系統(tǒng)逐漸成為主流。
當(dāng)前國(guó)內(nèi)外學(xué)者對(duì)Spring 框架同GeoTools 工具整合開(kāi)發(fā)GIS 應(yīng)用的研究并不多,注重研究管網(wǎng)系統(tǒng)設(shè)計(jì)更是風(fēng)毛鱗角。其中馮亦參[1]于2006 年提出基于GeoTools 實(shí)現(xiàn)WebGIS 應(yīng)用讀取shp 數(shù)據(jù)的解決方案;張?jiān)佇耓2]等提出基于Spring 框架的WebGIS 應(yīng)用整合研究;趙衛(wèi)平[3]等在2017 年實(shí)現(xiàn)基于GeoTools 的地圖服務(wù)快速發(fā)布系統(tǒng)研究;
本文以解決中小型城市間管道網(wǎng)路應(yīng)用為出發(fā)點(diǎn),使用開(kāi)源GIS 工具包GeoTools 基于成熟SSM架構(gòu)實(shí)現(xiàn)高效開(kāi)發(fā)。GeoTools 代碼庫(kù)迭代多年,功能豐富,并支持OGIS 接口規(guī)范,而SSM框架穩(wěn)定成熟,兩者的結(jié)合是順應(yīng)GIS 應(yīng)用開(kāi)發(fā)的潮流。
本系統(tǒng)使用Java 語(yǔ)言開(kāi)發(fā),采用Spring+Mybatis+SpringMVC的框架進(jìn)行分布式開(kāi)發(fā);調(diào)用GeoTools 的jar 包來(lái)實(shí)現(xiàn)對(duì)地圖服務(wù)層的模塊化開(kāi)發(fā)。前端地圖的顯示服務(wù)由openlayers 提供支持,web 端服務(wù)器由Nginx+Tomcat 來(lái)實(shí)現(xiàn)管道數(shù)據(jù)的發(fā)布與展示。服務(wù)器端部署在Liunx 系統(tǒng)下,通過(guò)docker 容器統(tǒng)一管理,而客戶端可通過(guò)瀏覽器實(shí)現(xiàn)全平臺(tái)兼容運(yùn)行;
整個(gè)架構(gòu)由下至上分別為表現(xiàn)層、邏輯層和數(shù)據(jù)層。在邏輯層的內(nèi)三層體系中:持久層聯(lián)系數(shù)據(jù)庫(kù)的數(shù)據(jù)編輯、讀取以及并發(fā)操作;服務(wù)層指明數(shù)據(jù)的組織管理模式,是控制層和持久層聯(lián)系的樞紐;控制層則說(shuō)明功能劃分,提供接口同時(shí)進(jìn)行命令分配。用戶將請(qǐng)求傳遞給邏輯層,邏輯層完成的結(jié)果通過(guò)表現(xiàn)層進(jìn)行展示。
表現(xiàn)層即為客戶端(瀏覽器端),是用戶操作的實(shí)際界面,也是功能發(fā)起方,也是最終結(jié)果的顯示平臺(tái)。
數(shù)據(jù)層是由數(shù)據(jù)庫(kù)為主體的數(shù)據(jù)持久化存儲(chǔ)的平臺(tái),也是對(duì)邏輯層的功能發(fā)起的反饋數(shù)據(jù)處理層(圖1)。
圖1 系統(tǒng)架構(gòu)
在此體系架構(gòu)下,數(shù)據(jù)層包含管線數(shù)據(jù)的讀存編輯功能,負(fù)責(zé)對(duì)數(shù)據(jù)庫(kù)的增刪查改與維護(hù);邏輯層則服務(wù)整個(gè)系統(tǒng)應(yīng)用功能的處理;表現(xiàn)層通過(guò)Ajax 實(shí)現(xiàn)同客戶端的通信,并啟用地圖服務(wù)的調(diào)用。典型的三層結(jié)構(gòu)設(shè)計(jì)實(shí)現(xiàn)系統(tǒng)的低耦合性,高可用性和高維護(hù)性,實(shí)現(xiàn)組件式開(kāi)發(fā)。
數(shù)據(jù)庫(kù)使用開(kāi)源的MySQL 數(shù)據(jù)庫(kù),數(shù)據(jù)層中所需要的空間數(shù)據(jù)放置于網(wǎng)絡(luò)服務(wù)器中,通過(guò)GeoTools 來(lái)調(diào)用;屬性數(shù)據(jù)資源包括像管道編號(hào),時(shí)間,坐標(biāo)等數(shù)據(jù)存放在MySQL 屬性庫(kù)中;管線專題數(shù)據(jù)主要分為測(cè)區(qū)數(shù)據(jù)、管線數(shù)據(jù)和節(jié)點(diǎn)數(shù)據(jù)這三大類型,其中線結(jié)構(gòu)設(shè)計(jì)主要由管線編號(hào)、物探號(hào)、起終點(diǎn)坐標(biāo)、控制點(diǎn),流向、旋轉(zhuǎn)角、材質(zhì)和日期等屬性組成,并通過(guò)外鍵或非空約束來(lái)保證數(shù)據(jù)完整性。
1.4.1 覆土深度的分析功能
可以對(duì)地圖上的任意管線進(jìn)行覆土深度的探測(cè),并且將探測(cè)結(jié)果與國(guó)家規(guī)范對(duì)比,將不符合標(biāo)準(zhǔn)的管線進(jìn)行預(yù)警標(biāo)注。
1.4.2 道路擴(kuò)建分析
通過(guò)對(duì)某一條道路進(jìn)行擴(kuò)建的寬度值的設(shè)置預(yù)見(jiàn)可能受到影響的管線的情況,使用緩沖區(qū)分析可以較好實(shí)現(xiàn)(圖2)。
1.4.3 碰撞檢測(cè)分析功能
可以對(duì)管線和其周圍的管線進(jìn)行水平和垂直方向的凈距分析,找出存在安全隱患的地下管線或者避免在設(shè)計(jì)階段的不合理施工。在進(jìn)行碰撞分析時(shí),首先需要確定管線間的空間關(guān)系,是否存在相交關(guān)系等等,通過(guò)計(jì)算其兩者之間的垂直或水平凈距,來(lái)確定其管線間的空間位置關(guān)系。
圖2 碰撞分析和斷面分析技術(shù)流程
圖3 爆管分析技術(shù)流程
1.4.4 橫斷面分析功能
通過(guò)對(duì)某一管線的屬性信息和管線與其周圍管線的關(guān)系進(jìn)行分析,以橫切圖的形式再現(xiàn)地下管線的空間分布情況,為管理施工提供決策依據(jù);
1.4.5 爆管分析功能
當(dāng)某一管線發(fā)生爆管現(xiàn)象的時(shí)候,系統(tǒng)要迅速確定發(fā)生爆管的位置,提供最佳的關(guān)閥方案。爆管分析是一種管道事故分析功能,在更多的時(shí)候應(yīng)避免出現(xiàn)爆管現(xiàn)象,但爆管分析可以及時(shí)減輕意外事故造成的經(jīng)濟(jì)損失和社會(huì)危害,通過(guò)系統(tǒng)的預(yù)警能力將事故發(fā)生率降至最低。
爆管分析的基本算法思想是:從爆裂的管點(diǎn)出發(fā),尋找與之關(guān)聯(lián)的管點(diǎn),在管網(wǎng)系統(tǒng)內(nèi)通過(guò)關(guān)聯(lián)關(guān)系,遍歷所有管線和管點(diǎn),準(zhǔn)確尋找可以阻止工質(zhì)流向的點(diǎn)(控制點(diǎn))。值得注意的是,爆管分析是一種對(duì)節(jié)點(diǎn)數(shù)量不易控制的分析方法,使用廣度優(yōu)先遍歷算法占用內(nèi)存較大,溢出風(fēng)險(xiǎn)高,故使用深度優(yōu)先遍歷會(huì)更加合適,算法的具體思想流程如圖3 所示。
2.1.1 構(gòu)建圖形向量的實(shí)現(xiàn)
一 種 是 通 過(guò) GeometryFactory 工 廠 類 中 的SimpleFeatureBuilder 來(lái)進(jìn)行實(shí)現(xiàn):首先是創(chuàng)建點(diǎn)要素Point,然后按照SimpleFeatureType 給的字段順序進(jìn)行屬性賦值,最后使用simpleFeatureBuilder 對(duì)象的buildFeature()方法來(lái)構(gòu)建向量;第二中進(jìn)行向量構(gòu)建的方式是通過(guò)ShapefileDataStore 類中g(shù)etFeatureWriter()方法進(jìn)行添加的:首先通過(guò)類型轉(zhuǎn)化創(chuàng)建出ShapefileDataStore,其次是設(shè)置寫(xiě)入Writer 流為自動(dòng)寫(xiě)入后,循環(huán)寫(xiě)入要素即可。
2.1.2 空間信息檢索的實(shí)現(xiàn)
通過(guò)GeoTools 中提供類似于MyBatis 框架的sql 語(yǔ)句封裝機(jī)制,可以通過(guò)經(jīng)緯度圖形來(lái)檢索相似的地理要素,通過(guò)GetFeatureInfo 操作通過(guò)坐標(biāo)方位對(duì)要素集進(jìn)行查詢并返回指定的屬性信息;先計(jì)算出點(diǎn)選范圍的地圖坐標(biāo)并轉(zhuǎn)化,隨后遍歷圖層來(lái)查找對(duì)象,獲取并轉(zhuǎn)化為Geometry 類型,然后通過(guò)getFeatures()方法獲取特征向量,循環(huán)獲取地形元素geom 來(lái)實(shí)現(xiàn)空間信息的檢索。
客戶端界面通過(guò)OpenLayers 來(lái)調(diào)用地圖服務(wù),通過(guò)GeoTools 和ArgGISforJS 的接口來(lái)定制系統(tǒng)復(fù)雜的功能,結(jié)果如圖所示,可以實(shí)現(xiàn)地圖的多級(jí)縮放和精確量算,并實(shí)現(xiàn)空間檢索和編輯的功能。
本文使用GIS 工具包GeoTools 基于SSM 架構(gòu)實(shí)現(xiàn)高效開(kāi)發(fā),兩者在WebGIS 系統(tǒng)中的應(yīng)用并不多見(jiàn),通過(guò)對(duì)城市管路網(wǎng)絡(luò)主題的GIS 應(yīng)用的設(shè)計(jì)來(lái)推廣開(kāi)發(fā)者對(duì)與GeoTools 的使用,并為廣大讀者提供應(yīng)用SSM 框架搭建WebGIS 應(yīng)用的設(shè)計(jì)參考。