游昆鵬 胡高峰 羅才嚴(yán)
(陜西鳳縣四方金礦有限責(zé)任公司)
礦產(chǎn)資源的開(kāi)發(fā)利用在給社會(huì)帶來(lái)巨大財(cái)富、促進(jìn)國(guó)民經(jīng)濟(jì)繁榮的同時(shí),也給生態(tài)環(huán)境造成了嚴(yán)重的破壞。面對(duì)礦山開(kāi)采過(guò)程中造成的森林、耕地等資源被破壞,以及地面塌陷、地層結(jié)構(gòu)破壞引發(fā)的滑坡泥石流等地質(zhì)災(zāi)害現(xiàn)象的頻發(fā),2016 年國(guó)務(wù)院重新修訂頒布了《礦山地質(zhì)環(huán)境保護(hù)規(guī)定》,強(qiáng)制要求礦山企業(yè)減少礦產(chǎn)資源勘查開(kāi)采活動(dòng)造成的礦山地質(zhì)環(huán)境破壞,保護(hù)人民生命和財(cái)產(chǎn)安全,促進(jìn)礦產(chǎn)資源的合理開(kāi)發(fā)利用和經(jīng)濟(jì)社會(huì)、資源環(huán)境的協(xié)調(diào)發(fā)展。
在礦山地質(zhì)環(huán)境保護(hù)與治理過(guò)程中,礦山地質(zhì)環(huán)境監(jiān)測(cè)是其中的一個(gè)重要環(huán)節(jié)。依據(jù)規(guī)范,礦山地質(zhì)環(huán)境監(jiān)測(cè)要素主要包含地面塌陷、地裂縫、崩塌、滑坡、含水層破壞、地形地貌景觀破壞等,針對(duì)不同的監(jiān)測(cè)要素需要采用不同的監(jiān)測(cè)技術(shù)(設(shè)備),并且所有要素的監(jiān)測(cè)都是周期性,這必然導(dǎo)致積累大量的監(jiān)測(cè)數(shù)據(jù)和特征信息。這些監(jiān)測(cè)數(shù)據(jù)繁雜、來(lái)源多、格式多樣,采用Excel 表格管理存在很大的局限性。因此需要建立數(shù)據(jù)庫(kù)并開(kāi)發(fā)相應(yīng)的數(shù)據(jù)庫(kù)管理系統(tǒng)對(duì)繁雜的監(jiān)測(cè)數(shù)據(jù)進(jìn)行管理以及分析,對(duì)未來(lái)實(shí)現(xiàn)社會(huì)統(tǒng)一監(jiān)管和智能預(yù)警具有重要意義[1-3]。
地質(zhì)環(huán)境監(jiān)測(cè)的基本任務(wù)是通過(guò)監(jiān)測(cè)礦區(qū)地質(zhì)災(zāi)害評(píng)估結(jié)果和礦山地質(zhì)環(huán)境保護(hù)與土地復(fù)墾方案所確立的監(jiān)測(cè)對(duì)象,預(yù)測(cè)采礦活動(dòng)可能引起的地面塌陷、滑坡、泥石流、建筑物及尾礦庫(kù)等構(gòu)筑物的穩(wěn)定性和變化趨勢(shì)。本項(xiàng)目所在礦山的主要監(jiān)測(cè)對(duì)象有采礦區(qū)地表塌陷、地表裂縫、巖移及巖移范圍外50 m 內(nèi)的5 座建構(gòu)筑物、4 處滑坡、2 處泥石流、3 座尾礦庫(kù)。監(jiān)測(cè)采用的設(shè)備主要有全站儀、GNSS接收機(jī)、頂板離層儀、卡尺、無(wú)人機(jī)等?,F(xiàn)有的監(jiān)測(cè)資料主要以Excel表格和柵格形式存儲(chǔ),涵蓋圖形、圖像、文字、表格等數(shù)據(jù)源。由于獲取數(shù)據(jù)的設(shè)備和分析標(biāo)準(zhǔn)不同,導(dǎo)致這些數(shù)據(jù)的多格式、多精度、多尺度及異質(zhì)性,同時(shí)周期觀測(cè)導(dǎo)致數(shù)據(jù)的海量性、動(dòng)態(tài)性。建立礦山地質(zhì)環(huán)境監(jiān)測(cè)數(shù)據(jù)庫(kù)的首要任務(wù)就是對(duì)已有監(jiān)測(cè)資料進(jìn)行分析[4-5]。
通過(guò)對(duì)已有資料進(jìn)行分析的目的之一是確定數(shù)據(jù)表的結(jié)構(gòu)。通過(guò)分析原數(shù)據(jù)源并結(jié)合實(shí)際,針對(duì)不同的監(jiān)測(cè)要素設(shè)計(jì)不同的數(shù)據(jù)表結(jié)構(gòu)。為保持與歷史資料的統(tǒng)一性,數(shù)據(jù)表結(jié)構(gòu)設(shè)計(jì)原則上延續(xù)原數(shù)據(jù)源的字段特性,通過(guò)分析剔除掉一些不必要的字段,保留下基本字段并擴(kuò)展一些便于實(shí)現(xiàn)數(shù)據(jù)庫(kù)管理系統(tǒng)功能的一些字段。字段的保留規(guī)則為空間形態(tài)(坐標(biāo))字段、監(jiān)測(cè)對(duì)象名稱、監(jiān)測(cè)點(diǎn)ID、監(jiān)測(cè)日期、地質(zhì)災(zāi)害類型、監(jiān)測(cè)設(shè)備、監(jiān)測(cè)人員等基本字段全部保留,一些通過(guò)基本監(jiān)測(cè)數(shù)據(jù)計(jì)算可以得出的數(shù)據(jù)字段予以剔除,這樣可以減小數(shù)據(jù)庫(kù)冗余。擴(kuò)展字段主要根據(jù)數(shù)據(jù)庫(kù)管理系統(tǒng)的設(shè)計(jì)深度進(jìn)行增加,原則在于平衡數(shù)據(jù)量和數(shù)據(jù)庫(kù)管理系統(tǒng)運(yùn)算效率。
分析已有資料的目的之二是尋找原數(shù)據(jù)源錄入數(shù)據(jù)庫(kù)的有效方法。原數(shù)據(jù)源具有海量性,要把海量數(shù)據(jù)逐項(xiàng)錄入工作量大、難以完成,最好的方式是能夠批量錄入。本項(xiàng)目在充分分析原數(shù)據(jù)源的基礎(chǔ)上,結(jié)合數(shù)據(jù)表結(jié)構(gòu)設(shè)計(jì),利用Python 編寫(xiě)腳本把Excel 表格和柵格數(shù)據(jù)批量轉(zhuǎn)入數(shù)據(jù)庫(kù)中,腳本使用到的模塊主要是XLSXWRITE、GDAL 和相應(yīng)的數(shù)據(jù)庫(kù)API。
通過(guò)前期調(diào)研和對(duì)礦山需求成果分析,礦山地質(zhì)環(huán)境監(jiān)測(cè)數(shù)據(jù)庫(kù)管理系統(tǒng)需要具備以下功能[6-7]。
(1)用戶認(rèn)證及管理模塊:管理用戶表,對(duì)不同級(jí)別用戶賦予不同權(quán)限。
(2)原始記錄讀取模塊:用戶可以通過(guò)此功能把監(jiān)測(cè)儀器導(dǎo)出的坐標(biāo)信息等原始記錄自動(dòng)匹配到數(shù)據(jù)庫(kù)內(nèi)其對(duì)應(yīng)的監(jiān)測(cè)對(duì)象上,進(jìn)而自動(dòng)更新數(shù)據(jù)庫(kù)。該功能主要目的是提高內(nèi)業(yè)數(shù)據(jù)處理效率和準(zhǔn)確率,避免人為造成的數(shù)據(jù)錯(cuò)誤。
(3)數(shù)據(jù)管理模塊:根據(jù)用戶需求對(duì)單個(gè)監(jiān)測(cè)對(duì)象或者多個(gè)監(jiān)測(cè)對(duì)象的數(shù)據(jù)表數(shù)據(jù)進(jìn)行增、刪、改、查操作,是數(shù)據(jù)庫(kù)管理系統(tǒng)基本功能的體現(xiàn)。
(4)監(jiān)測(cè)區(qū)信息概況:該部分主要以文本形式展現(xiàn)監(jiān)測(cè)區(qū)概況,各個(gè)監(jiān)測(cè)對(duì)象的基本信息、當(dāng)前狀態(tài),主要作用是在宏觀層面上展示監(jiān)測(cè)區(qū)狀態(tài)。
(5)監(jiān)測(cè)體系信息:該部分同樣以文本形式展示地質(zhì)環(huán)境監(jiān)測(cè)人員組織結(jié)構(gòu)、監(jiān)測(cè)實(shí)施方案、地質(zhì)環(huán)境監(jiān)測(cè)及土地復(fù)墾年度報(bào)告以及監(jiān)測(cè)設(shè)備信息表。
(6)數(shù)據(jù)展現(xiàn)模塊:根據(jù)用戶輸入條件從數(shù)據(jù)庫(kù)中檢索數(shù)據(jù)在系統(tǒng)顯示區(qū)展示并實(shí)時(shí)繪制曲線圖,并具備導(dǎo)出矢量曲線圖和Excel 表功能。該模塊是管理系統(tǒng)的核心功能之一。
(7)柵格數(shù)據(jù)處理模塊:根據(jù)用戶需求對(duì)任意2期柵格數(shù)據(jù)進(jìn)行數(shù)學(xué)運(yùn)算,并導(dǎo)出shp 格式的運(yùn)算結(jié)果。
在礦山地質(zhì)環(huán)境監(jiān)測(cè)數(shù)據(jù)庫(kù)管理系統(tǒng)中,一個(gè)有序高效的監(jiān)測(cè)數(shù)據(jù)庫(kù)非常重要,為了提高系統(tǒng)整體性能,需要設(shè)計(jì)一個(gè)合理的數(shù)據(jù)庫(kù)結(jié)構(gòu)。本項(xiàng)目采用關(guān)系型數(shù)據(jù)庫(kù),關(guān)系型數(shù)據(jù)庫(kù)二維表結(jié)構(gòu)非常貼近邏輯世界概念,關(guān)系模型相對(duì)網(wǎng)狀和層次模型來(lái)說(shuō)更容易理解;關(guān)系型數(shù)據(jù)庫(kù)可以利用通用的SQL語(yǔ)言完成非常復(fù)雜的操作;關(guān)系型數(shù)據(jù)庫(kù)的實(shí)體完整性、參照完整性和用戶定義的完整性大大降低了數(shù)據(jù)冗余和數(shù)據(jù)不一致的概率。本項(xiàng)目采用更適合嵌入式開(kāi)發(fā)的SQLite3 數(shù)據(jù)庫(kù),建庫(kù)工具采用Django自帶的數(shù)據(jù)庫(kù)API。
SQLite3 是一款輕型的開(kāi)源關(guān)系型數(shù)據(jù)庫(kù),是遵守ACID 的關(guān)聯(lián)式數(shù)據(jù)庫(kù)管理系統(tǒng),它的設(shè)計(jì)目標(biāo)是嵌入式的,而且目前已經(jīng)得到了非常廣泛的使用,占用資源非常低,能夠支持Windows/Linux/Unix 等主流的操作系統(tǒng),同時(shí)能夠跟很多程序語(yǔ)言相結(jié)合,比如Python、C#、PHP、Java 等,還有ODBC 接口,比起Mysql、PostgreSQL 這2款世界著名的開(kāi)源數(shù)據(jù)庫(kù)管理系統(tǒng)來(lái)講,它對(duì)小型數(shù)據(jù)集的處理速度更快。
Django通過(guò)對(duì)象關(guān)系映射(ORM,object-relational mapping)以Python 類形式定義數(shù)據(jù)模型(圖1),ORM 將模型與關(guān)系數(shù)據(jù)庫(kù)連接起來(lái),得到一個(gè)非常容易使用的數(shù)據(jù)庫(kù)API,同時(shí)在Django 中也可以使用原始的SQL 語(yǔ)句。由于Django 自帶數(shù)據(jù)庫(kù)API 優(yōu)秀的易用性,本項(xiàng)目數(shù)據(jù)庫(kù)設(shè)計(jì)采用Django 實(shí)現(xiàn),提高效率的同時(shí)又便于WEB擴(kuò)展。
本項(xiàng)目數(shù)據(jù)結(jié)構(gòu)采用常用的二叉樹(shù)結(jié)構(gòu),結(jié)構(gòu)高度4 層,最大葉子節(jié)點(diǎn)數(shù)5,數(shù)據(jù)結(jié)構(gòu)見(jiàn)圖2。結(jié)合上文分析并分析實(shí)際,在SQLite3 中新建數(shù)據(jù)庫(kù)SFDZJC,在數(shù)據(jù)庫(kù)中新建用戶表(DZJC_USER)、項(xiàng)目信息表(DZJC_PROJINFO)、柵格數(shù)據(jù)表(DZJC_RASTER)、監(jiān)測(cè)對(duì)象表(DZJC_MONITOR)、監(jiān)測(cè)數(shù)據(jù)表(DZJC_DATA)、裂縫數(shù)據(jù)表(DZJC_LF)、建筑變形數(shù)據(jù)表(DZJC_JZBX)、自然災(zāi)害巡查信息表(DZJC_PATROL)、設(shè)備信息表(DZJC_INSTRUINFO)等。本文對(duì)其中幾個(gè)比較典型的數(shù)據(jù)表進(jìn)行詳細(xì)說(shuō)明。
(1)用戶表。用戶表主要用于記錄授權(quán)用戶的用戶名、密碼、授權(quán)等級(jí)等信息,詳見(jiàn)表1。用戶名和密碼為字符型(VARCHAR),授權(quán)等級(jí)字段為整形(INT)通過(guò)數(shù)字區(qū)分用戶等級(jí)和權(quán)限。
(2)監(jiān)測(cè)對(duì)象表。監(jiān)測(cè)對(duì)象表主要用于記錄不同監(jiān)測(cè)對(duì)象的基本信息、圖像、監(jiān)測(cè)手段、監(jiān)測(cè)設(shè)備、監(jiān)測(cè)數(shù)據(jù)類型(矢量或者柵格)等內(nèi)容,每行代表一個(gè)監(jiān)測(cè)對(duì)象,與父表(項(xiàng)目信息表)建立一對(duì)多鏈接,詳見(jiàn)表2。第一列為數(shù)據(jù)表中的字段名,為便于理解最后一列字段別名為對(duì)應(yīng)的漢語(yǔ)名稱。PHOTO 字段類型為圖形(IMAGE)用于存儲(chǔ)監(jiān)測(cè)對(duì)象照片,基本信息和監(jiān)測(cè)手段采用本文類型(TEXT)以便于存儲(chǔ)更多文字信息,F(xiàn)OREIGEKEY 為外鍵字段,用于和父表建立連接。
(3)監(jiān)測(cè)數(shù)據(jù)表。是監(jiān)測(cè)數(shù)據(jù)的集合,包含監(jiān)測(cè)點(diǎn)名稱、XYZ 坐標(biāo)、監(jiān)測(cè)日期、較上期變形值、累積變形值、變形速率等。其中,監(jiān)測(cè)點(diǎn)名稱和三維坐標(biāo)為輸入字段,變形值和變形速率等為計(jì)算字段,詳見(jiàn)表3。其中DECIMAL為數(shù)值類型字段,相較于浮點(diǎn)型和雙精度型數(shù)據(jù)數(shù)值型不僅能夠保證數(shù)據(jù)計(jì)算更為精確,還可以節(jié)省存儲(chǔ)空間。DATE 為日期類型字段,用于存儲(chǔ)監(jiān)測(cè)日期,該表通過(guò)MONITOR_NAME 與父表DZJC_MONITOR建立對(duì)應(yīng)關(guān)系。
(4)柵格數(shù)據(jù)表。該表主要用來(lái)存儲(chǔ)無(wú)人機(jī)獲取的正射影像DOM 和DSM,以便于進(jìn)行數(shù)學(xué)計(jì)算和在客戶端展示,詳見(jiàn)表4。其中,RASTER為光柵字段類型,用于存儲(chǔ)正射影像柵格數(shù)據(jù)。該表同樣通過(guò)MONITOR_NAME 與父表DZJC_MONITOR 建立對(duì)應(yīng)關(guān)系。
(5)設(shè)計(jì)表結(jié)構(gòu)時(shí)遵循貼合系統(tǒng)需求、減少數(shù)據(jù)冗余并結(jié)合圖2所示結(jié)構(gòu)建立與父表關(guān)聯(lián)的原則。裂縫數(shù)據(jù)表(DZJC_LF)、建筑變形數(shù)據(jù)表(DZJC_JZBX)、自然災(zāi)害巡查信息表(DZJC_PATROL)、設(shè)備信息表(DZJC_INSTRUINFO)等其他數(shù)據(jù)表不再詳細(xì)列出。
地質(zhì)環(huán)境監(jiān)測(cè)數(shù)據(jù)庫(kù)管理系統(tǒng)架構(gòu)采用C/S+B/S結(jié)構(gòu)(客戶端/服務(wù)器結(jié)構(gòu)和瀏覽器/服務(wù)器結(jié)構(gòu))。C/S結(jié)構(gòu)采用Python+Tkinter編寫(xiě)客戶端,B/S結(jié)構(gòu)采用云服務(wù)器+Django開(kāi)發(fā)框架實(shí)現(xiàn)。Tkinter是Python自帶的GUI設(shè)計(jì)模塊,優(yōu)點(diǎn)是輕便快速、易打包,缺點(diǎn)是擴(kuò)展功能較少不易設(shè)計(jì)出絢麗的界面。Django 是純Python 編寫(xiě)的開(kāi)源WEB 框架,是以MVT(M-模型層、V-視圖層、T-模板層)設(shè)計(jì)模式為準(zhǔn)則的優(yōu)秀的開(kāi)發(fā)框架。MVT 模式通過(guò)VIEW(視圖層)接收請(qǐng)求、獲取數(shù)據(jù)、返回結(jié)果;通過(guò)Template(模板層)呈現(xiàn)內(nèi)容到瀏覽器。它在開(kāi)發(fā)過(guò)程中,可以根據(jù)開(kāi)發(fā)人員的具體情況自由更新模板,增加了開(kāi)發(fā)的靈活性。表5為實(shí)現(xiàn)系統(tǒng)功能用到的模塊和服務(wù)。
(1)用戶認(rèn)證功能實(shí)現(xiàn)。礦山地質(zhì)環(huán)境監(jiān)測(cè)數(shù)據(jù)庫(kù)數(shù)據(jù)含空間坐標(biāo)信息等保密信息,客戶端沒(méi)有注冊(cè)功能,所有用戶都是通過(guò)系統(tǒng)管理員在后臺(tái)用戶表里輸入,客戶端只需要通過(guò)校驗(yàn)用戶名密碼。B/S 架構(gòu)下把驗(yàn)證用戶名密碼的函數(shù)作為裝飾器函數(shù),通過(guò)裝飾器函數(shù)實(shí)現(xiàn)認(rèn)證和區(qū)分不同級(jí)別用戶操作權(quán)限。C/S 架構(gòu)下通過(guò)授權(quán)碼安裝客戶端,保障數(shù)據(jù)安全。
(2)讀取原始記錄功能實(shí)現(xiàn)。通過(guò)正則表達(dá)式從儀器導(dǎo)出的TXT 文檔中自動(dòng)識(shí)別XYZ坐標(biāo)數(shù)據(jù)存入內(nèi)存列表,然后遍歷上期監(jiān)測(cè)數(shù)據(jù),通過(guò)三維距離閾值自動(dòng)匹配監(jiān)測(cè)點(diǎn)位,同時(shí)計(jì)算變形量、變形速率等數(shù)值自動(dòng)更新監(jiān)測(cè)數(shù)據(jù)表,同時(shí)新增的監(jiān)測(cè)點(diǎn)也會(huì)在此過(guò)程中自動(dòng)添加至監(jiān)測(cè)數(shù)據(jù)表。
(3)數(shù)據(jù)管理模塊功能實(shí)現(xiàn)。數(shù)據(jù)管理功能主要在服務(wù)端實(shí)現(xiàn),通過(guò)在admin.py文件中注冊(cè)需要管理的數(shù)據(jù)表,即可在Django 自帶的管理站點(diǎn)中管理數(shù)據(jù)表數(shù)據(jù)。通過(guò)在settings.py文件中設(shè)置時(shí)區(qū)和語(yǔ)言可以更改管理界面的時(shí)區(qū)和顯示語(yǔ)言?,F(xiàn)場(chǎng)采集的數(shù)據(jù)可以通過(guò)服務(wù)端管理界面輸入數(shù)據(jù)庫(kù)。
(4)監(jiān)測(cè)區(qū)信息概況功能實(shí)現(xiàn)。該功能實(shí)現(xiàn)比較簡(jiǎn)單,直接讀取數(shù)據(jù)庫(kù)中監(jiān)測(cè)對(duì)象信息表中相關(guān)文字和圖片,在客戶端靜態(tài)展示。
(5)數(shù)據(jù)展現(xiàn)模塊功能實(shí)現(xiàn)。數(shù)據(jù)展現(xiàn)功能要求在瀏覽器端和桌面端都能夠?qū)崿F(xiàn)數(shù)據(jù)展示,瀏覽器端主要通過(guò)HTML 編寫(xiě)前端實(shí)現(xiàn)數(shù)據(jù)查詢和表格展示;桌面端利用Tkinter 畫(huà)布組件,通過(guò)編寫(xiě)繪制表格、文字展示函數(shù)和繪制折線圖函數(shù)實(shí)現(xiàn)。
(6)柵格數(shù)據(jù)處理模塊功能實(shí)現(xiàn)。柵格數(shù)據(jù)的讀入、讀出以及數(shù)學(xué)計(jì)算通過(guò)GDAL 的ogr 類相關(guān)函數(shù)實(shí)現(xiàn),柵格展示及應(yīng)用通過(guò)Arcgis軟件實(shí)現(xiàn)。
(7)數(shù)據(jù)導(dǎo)出模塊功能實(shí)現(xiàn)。表格導(dǎo)出功能的實(shí)現(xiàn):該模塊通過(guò)讀取用戶在輸入框中輸入的數(shù)據(jù)導(dǎo)出范圍和日期等檢索條件,在數(shù)據(jù)庫(kù)中檢索到需導(dǎo)出數(shù)據(jù),然后通過(guò)Python 的Xlsxwriter 模塊寫(xiě)XLSX格式文件。圖片導(dǎo)出功能的實(shí)現(xiàn):通過(guò)Tkinter 內(nèi)置函數(shù)draw.postscript導(dǎo)出EPS格式矢量圖片。
(1)礦山地質(zhì)環(huán)境監(jiān)測(cè)數(shù)據(jù)庫(kù)管理系統(tǒng)的應(yīng)用可以有效滿足礦山地質(zhì)環(huán)境的監(jiān)測(cè)需要,促進(jìn)礦山地質(zhì)環(huán)境監(jiān)測(cè)向信息化、智能化方向發(fā)展。
(2)數(shù)據(jù)庫(kù)管理系統(tǒng)相較傳統(tǒng)Excel表格,可以更有效地匯總歷史監(jiān)測(cè)數(shù)據(jù),分析實(shí)時(shí)監(jiān)測(cè)數(shù)據(jù),直觀得出監(jiān)測(cè)對(duì)象的變化趨勢(shì)和當(dāng)前狀態(tài)。
(3)借助數(shù)據(jù)庫(kù)強(qiáng)大高效的檢索分析和關(guān)聯(lián)功能,可以實(shí)現(xiàn)多種不同類型的信息融合,能夠更全面地處理地質(zhì)環(huán)境信息。
(4)基于礦山地質(zhì)環(huán)境數(shù)據(jù)庫(kù),將來(lái)可以選用一套合適的深度學(xué)習(xí)算法,運(yùn)用人工智能技術(shù)和特征識(shí)別技術(shù)對(duì)地質(zhì)環(huán)境監(jiān)測(cè)數(shù)據(jù)庫(kù)中的大量復(fù)雜數(shù)據(jù)進(jìn)行樣本訓(xùn)練,實(shí)現(xiàn)智能、高效、準(zhǔn)確的數(shù)據(jù)處理和災(zāi)害預(yù)警。