时间:2024-07-28
游昆鹏 胡高峰 罗才严
(陕西凤县四方金矿有限责任公司)
矿产资源的开发利用在给社会带来巨大财富、促进国民经济繁荣的同时,也给生态环境造成了严重的破坏。面对矿山开采过程中造成的森林、耕地等资源被破坏,以及地面塌陷、地层结构破坏引发的滑坡泥石流等地质灾害现象的频发,2016 年国务院重新修订颁布了《矿山地质环境保护规定》,强制要求矿山企业减少矿产资源勘查开采活动造成的矿山地质环境破坏,保护人民生命和财产安全,促进矿产资源的合理开发利用和经济社会、资源环境的协调发展。
在矿山地质环境保护与治理过程中,矿山地质环境监测是其中的一个重要环节。依据规范,矿山地质环境监测要素主要包含地面塌陷、地裂缝、崩塌、滑坡、含水层破坏、地形地貌景观破坏等,针对不同的监测要素需要采用不同的监测技术(设备),并且所有要素的监测都是周期性,这必然导致积累大量的监测数据和特征信息。这些监测数据繁杂、来源多、格式多样,采用Excel 表格管理存在很大的局限性。因此需要建立数据库并开发相应的数据库管理系统对繁杂的监测数据进行管理以及分析,对未来实现社会统一监管和智能预警具有重要意义[1-3]。
地质环境监测的基本任务是通过监测矿区地质灾害评估结果和矿山地质环境保护与土地复垦方案所确立的监测对象,预测采矿活动可能引起的地面塌陷、滑坡、泥石流、建筑物及尾矿库等构筑物的稳定性和变化趋势。本项目所在矿山的主要监测对象有采矿区地表塌陷、地表裂缝、岩移及岩移范围外50 m 内的5 座建构筑物、4 处滑坡、2 处泥石流、3 座尾矿库。监测采用的设备主要有全站仪、GNSS接收机、顶板离层仪、卡尺、无人机等。现有的监测资料主要以Excel表格和栅格形式存储,涵盖图形、图像、文字、表格等数据源。由于获取数据的设备和分析标准不同,导致这些数据的多格式、多精度、多尺度及异质性,同时周期观测导致数据的海量性、动态性。建立矿山地质环境监测数据库的首要任务就是对已有监测资料进行分析[4-5]。
通过对已有资料进行分析的目的之一是确定数据表的结构。通过分析原数据源并结合实际,针对不同的监测要素设计不同的数据表结构。为保持与历史资料的统一性,数据表结构设计原则上延续原数据源的字段特性,通过分析剔除掉一些不必要的字段,保留下基本字段并扩展一些便于实现数据库管理系统功能的一些字段。字段的保留规则为空间形态(坐标)字段、监测对象名称、监测点ID、监测日期、地质灾害类型、监测设备、监测人员等基本字段全部保留,一些通过基本监测数据计算可以得出的数据字段予以剔除,这样可以减小数据库冗余。扩展字段主要根据数据库管理系统的设计深度进行增加,原则在于平衡数据量和数据库管理系统运算效率。
分析已有资料的目的之二是寻找原数据源录入数据库的有效方法。原数据源具有海量性,要把海量数据逐项录入工作量大、难以完成,最好的方式是能够批量录入。本项目在充分分析原数据源的基础上,结合数据表结构设计,利用Python 编写脚本把Excel 表格和栅格数据批量转入数据库中,脚本使用到的模块主要是XLSXWRITE、GDAL 和相应的数据库API。
通过前期调研和对矿山需求成果分析,矿山地质环境监测数据库管理系统需要具备以下功能[6-7]。
(1)用户认证及管理模块:管理用户表,对不同级别用户赋予不同权限。
(2)原始记录读取模块:用户可以通过此功能把监测仪器导出的坐标信息等原始记录自动匹配到数据库内其对应的监测对象上,进而自动更新数据库。该功能主要目的是提高内业数据处理效率和准确率,避免人为造成的数据错误。
(3)数据管理模块:根据用户需求对单个监测对象或者多个监测对象的数据表数据进行增、删、改、查操作,是数据库管理系统基本功能的体现。
(4)监测区信息概况:该部分主要以文本形式展现监测区概况,各个监测对象的基本信息、当前状态,主要作用是在宏观层面上展示监测区状态。
(5)监测体系信息:该部分同样以文本形式展示地质环境监测人员组织结构、监测实施方案、地质环境监测及土地复垦年度报告以及监测设备信息表。
(6)数据展现模块:根据用户输入条件从数据库中检索数据在系统显示区展示并实时绘制曲线图,并具备导出矢量曲线图和Excel 表功能。该模块是管理系统的核心功能之一。
(7)栅格数据处理模块:根据用户需求对任意2期栅格数据进行数学运算,并导出shp 格式的运算结果。
在矿山地质环境监测数据库管理系统中,一个有序高效的监测数据库非常重要,为了提高系统整体性能,需要设计一个合理的数据库结构。本项目采用关系型数据库,关系型数据库二维表结构非常贴近逻辑世界概念,关系模型相对网状和层次模型来说更容易理解;关系型数据库可以利用通用的SQL语言完成非常复杂的操作;关系型数据库的实体完整性、参照完整性和用户定义的完整性大大降低了数据冗余和数据不一致的概率。本项目采用更适合嵌入式开发的SQLite3 数据库,建库工具采用Django自带的数据库API。
SQLite3 是一款轻型的开源关系型数据库,是遵守ACID 的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经得到了非常广泛的使用,占用资源非常低,能够支持Windows/Linux/Unix 等主流的操作系统,同时能够跟很多程序语言相结合,比如Python、C#、PHP、Java 等,还有ODBC 接口,比起Mysql、PostgreSQL 这2款世界著名的开源数据库管理系统来讲,它对小型数据集的处理速度更快。
Django通过对象关系映射(ORM,object-relational mapping)以Python 类形式定义数据模型(图1),ORM 将模型与关系数据库连接起来,得到一个非常容易使用的数据库API,同时在Django 中也可以使用原始的SQL 语句。由于Django 自带数据库API 优秀的易用性,本项目数据库设计采用Django 实现,提高效率的同时又便于WEB扩展。
本项目数据结构采用常用的二叉树结构,结构高度4 层,最大叶子节点数5,数据结构见图2。结合上文分析并分析实际,在SQLite3 中新建数据库SFDZJC,在数据库中新建用户表(DZJC_USER)、项目信息表(DZJC_PROJINFO)、栅格数据表(DZJC_RASTER)、监测对象表(DZJC_MONITOR)、监测数据表(DZJC_DATA)、裂缝数据表(DZJC_LF)、建筑变形数据表(DZJC_JZBX)、自然灾害巡查信息表(DZJC_PATROL)、设备信息表(DZJC_INSTRUINFO)等。本文对其中几个比较典型的数据表进行详细说明。
(1)用户表。用户表主要用于记录授权用户的用户名、密码、授权等级等信息,详见表1。用户名和密码为字符型(VARCHAR),授权等级字段为整形(INT)通过数字区分用户等级和权限。
(2)监测对象表。监测对象表主要用于记录不同监测对象的基本信息、图像、监测手段、监测设备、监测数据类型(矢量或者栅格)等内容,每行代表一个监测对象,与父表(项目信息表)建立一对多链接,详见表2。第一列为数据表中的字段名,为便于理解最后一列字段别名为对应的汉语名称。PHOTO 字段类型为图形(IMAGE)用于存储监测对象照片,基本信息和监测手段采用本文类型(TEXT)以便于存储更多文字信息,FOREIGEKEY 为外键字段,用于和父表建立连接。
(3)监测数据表。是监测数据的集合,包含监测点名称、XYZ 坐标、监测日期、较上期变形值、累积变形值、变形速率等。其中,监测点名称和三维坐标为输入字段,变形值和变形速率等为计算字段,详见表3。其中DECIMAL为数值类型字段,相较于浮点型和双精度型数据数值型不仅能够保证数据计算更为精确,还可以节省存储空间。DATE 为日期类型字段,用于存储监测日期,该表通过MONITOR_NAME 与父表DZJC_MONITOR建立对应关系。
(4)栅格数据表。该表主要用来存储无人机获取的正射影像DOM 和DSM,以便于进行数学计算和在客户端展示,详见表4。其中,RASTER为光栅字段类型,用于存储正射影像栅格数据。该表同样通过MONITOR_NAME 与父表DZJC_MONITOR 建立对应关系。
(5)设计表结构时遵循贴合系统需求、减少数据冗余并结合图2所示结构建立与父表关联的原则。裂缝数据表(DZJC_LF)、建筑变形数据表(DZJC_JZBX)、自然灾害巡查信息表(DZJC_PATROL)、设备信息表(DZJC_INSTRUINFO)等其他数据表不再详细列出。
地质环境监测数据库管理系统架构采用C/S+B/S结构(客户端/服务器结构和浏览器/服务器结构)。C/S结构采用Python+Tkinter编写客户端,B/S结构采用云服务器+Django开发框架实现。Tkinter是Python自带的GUI设计模块,优点是轻便快速、易打包,缺点是扩展功能较少不易设计出绚丽的界面。Django 是纯Python 编写的开源WEB 框架,是以MVT(M-模型层、V-视图层、T-模板层)设计模式为准则的优秀的开发框架。MVT 模式通过VIEW(视图层)接收请求、获取数据、返回结果;通过Template(模板层)呈现内容到浏览器。它在开发过程中,可以根据开发人员的具体情况自由更新模板,增加了开发的灵活性。表5为实现系统功能用到的模块和服务。
(1)用户认证功能实现。矿山地质环境监测数据库数据含空间坐标信息等保密信息,客户端没有注册功能,所有用户都是通过系统管理员在后台用户表里输入,客户端只需要通过校验用户名密码。B/S 架构下把验证用户名密码的函数作为装饰器函数,通过装饰器函数实现认证和区分不同级别用户操作权限。C/S 架构下通过授权码安装客户端,保障数据安全。
(2)读取原始记录功能实现。通过正则表达式从仪器导出的TXT 文档中自动识别XYZ坐标数据存入内存列表,然后遍历上期监测数据,通过三维距离阈值自动匹配监测点位,同时计算变形量、变形速率等数值自动更新监测数据表,同时新增的监测点也会在此过程中自动添加至监测数据表。
(3)数据管理模块功能实现。数据管理功能主要在服务端实现,通过在admin.py文件中注册需要管理的数据表,即可在Django 自带的管理站点中管理数据表数据。通过在settings.py文件中设置时区和语言可以更改管理界面的时区和显示语言。现场采集的数据可以通过服务端管理界面输入数据库。
(4)监测区信息概况功能实现。该功能实现比较简单,直接读取数据库中监测对象信息表中相关文字和图片,在客户端静态展示。
(5)数据展现模块功能实现。数据展现功能要求在浏览器端和桌面端都能够实现数据展示,浏览器端主要通过HTML 编写前端实现数据查询和表格展示;桌面端利用Tkinter 画布组件,通过编写绘制表格、文字展示函数和绘制折线图函数实现。
(6)栅格数据处理模块功能实现。栅格数据的读入、读出以及数学计算通过GDAL 的ogr 类相关函数实现,栅格展示及应用通过Arcgis软件实现。
(7)数据导出模块功能实现。表格导出功能的实现:该模块通过读取用户在输入框中输入的数据导出范围和日期等检索条件,在数据库中检索到需导出数据,然后通过Python 的Xlsxwriter 模块写XLSX格式文件。图片导出功能的实现:通过Tkinter 内置函数draw.postscript导出EPS格式矢量图片。
(1)矿山地质环境监测数据库管理系统的应用可以有效满足矿山地质环境的监测需要,促进矿山地质环境监测向信息化、智能化方向发展。
(2)数据库管理系统相较传统Excel表格,可以更有效地汇总历史监测数据,分析实时监测数据,直观得出监测对象的变化趋势和当前状态。
(3)借助数据库强大高效的检索分析和关联功能,可以实现多种不同类型的信息融合,能够更全面地处理地质环境信息。
(4)基于矿山地质环境数据库,将来可以选用一套合适的深度学习算法,运用人工智能技术和特征识别技术对地质环境监测数据库中的大量复杂数据进行样本训练,实现智能、高效、准确的数据处理和灾害预警。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!