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