APP下载

喀斯特岩溶环境水样关键数据可视化分析与研究*

2023-02-02唐厚炳

科技与创新 2023年2期
关键词:滴速原始数据岩溶

李 康,唐厚炳,周 燕

(凯里学院,贵州 黔东南苗族侗族自治州 556011)

1 研究背景

现阶段在喀斯特岩溶环境下研究地下水分布的数据模型较少[1],究其原因,主要是当前在喀斯特岩溶洞穴环境下的采样设备装置较为缺乏,研究人员对水样目标信息研究各有不同,研究的深度也是参差不齐,对接云南省地理研究所目前在此方面的需求后,存在当前设备采集的数据无法有效提取、数据存储在传统的传输介质中而无法与计算机进行直接数据交互、编码方式烦琐无法准确解析等问题,一个性能良好的数据解析与可视化平台软件是目前云南地理研究所对数据分析的迫切需求。

2 关键数据提取

针对喀斯特岩溶洞穴环境下记录的样本数据,其关键信息为样品瓶的编号、取样模式、起始时间、结束时间、降雨量等,不同模式下,不同观测点水样降落的速度(在此称为滴速),在数据分析中占据一个重要的指标,下面将对样本数据进行详细分析。

2.1 原始样本数据处理

因取样设备采用的是32位嵌入式微控制器对数据进行预存储,并且微控制MCU只能处理十六进制数据[2],原始数据没有任何规律,缺乏可读性,具体如表1所示,因此,在程序编写需求阶段,对每个字段都进行定义,此代码为一段机器代码,完全依赖于微控制的硬件。要对原始数据进行分析就得预知关键数据的编码方式、每个字段在控制器内存当中的存储特征,解析成研究人员能够阅读的文本格式。

表1 (续)

表1 SD卡存储的原始数据

获取关键字段的解码方式后,对原始数据进行解析,可以很容易地将原始数据转换成可阅读的文本格式,具体如表2所示。

表2 解析后的数据

从表2中可知,滴速关键值无法直观体现,需要进行二次处理,在软件设计中,初步考虑将起始时间与结束时间换算成时间戳,然后用降雨量除以2个时间戳差值[3],计算平均滴速关键参考值,将滴速变量设为V,起始时间的时间戳设为S,结束时间的时间戳设为E,降雨量设为M,很容易得到样本的关键数据解析成txt格式后,增强了可读性,但是在数据量剧增时,这些变量参考值之间的相互联系与变化趋势仍然无法直观体现,云南省地理研究所目前采用的是将解析的文本格式信息二次录入Excel表格进行存储,数据量较小时在一定程度上可以基本体现其变化趋势,数据的处理操作也较为方便。但面对庞大数据的时候,在存储上Excel是有局限的,会占用较多内存资源,变化趋势只能用单调的折线图呈现,本身属性值需要查阅检索才能获取[4]。

2.2 软件界面设计

对样本数据的解析及需求的分析,为了更好直观地展现特定关键参数的变化规律和趋势,引入直角坐标系,如图1所示,横坐标为时间参数刻度轴,主要反映样本数据采集的时间节点,纵坐标反映的是样本的滴速,样本则以柱状图的高低变化趋势反映滴速的变化,柱状图本身附带固有属性,在这里主要是指取样模式和样本编号。数据的展现显示为最新的数据覆盖前面的数据,如果某一次数据量较大时,在一个展现页面无法完整呈现,则采用刷新按钮手动触发刷新,展示时间可以通过程序设定。

图1 数据分析软件界面设计

3 软件实现

对数据的可视化展现,目前使用较多的是基于Python编程语言和Pyecharts的开源数据包结合的方式[5],在web页面动态展示有较好的效果,由于样本数据目前在内部使用测试,无需嵌入web页面,无需对外公开发布,本次在开发软件上选择现在比较成熟的C++框架开发平台Qt,因为一次编译,跨平台使用的特点被广泛使用在Widows、Linux等主流操作系统平台[6],C++语言更接近底层硬件语言,容易移植在各个微控制器嵌入式平台上,并且运行更加稳定流畅。

3.1 关键代码分析

在软件设计中通过坐标及直方图来展现其变化规律,Qt平台自身不具备坐标系,需要引入第三方库qwt[7],使用Qt Creator编译,将编译产生的文件qwt.dll、libqwt.a,qwtd.dll、libqwtd.a分别放入Qt安装目录bin文件夹和Qt安装目录lib文件夹,最后在sample_01.pro做如下配置:

TARGET=Sample_01

TEMPLATE=app

LⅠBS+=-L"c:/Qt/2022.05/qt/lib"-lqwt

ⅠNCLUDEPATH+="c:/Qt/2022.05/qt/include/qwt"

include(E:qwtqwt.prf)

RC_FⅠLE=SAMPLE.rc

SOURCES += main.cppmainwindow.cpp archart.cpp

HEADERS +=mainwindow.harchar.hcommon.h

OTHER_FⅠLES+=SAMPLE.rcSAMPLE.ico

工程项目文件中ⅠNCLUDEPATH+="c:/Qt/2022.05/qt/include/qwt"包含第三方库文件的编译路径,barchar.h为直方图编译所依赖的的头文件,SAMPLE.ico是软件设计的图标文件。

在本设计中最重要的是要将采样时间进行转化,首先对文本进行解析得到年、月、日,文本之间的用逗号分割,时间年、月、日之间用短破折号分割,具体代码如下。

lineStr=in.readLine();strList=lineStr.split(",");{yearStrList=strList[0].split(":");yearⅠnfoStrList=yearStrList[1].split("-");year=yearⅠnfoStrList[0].toⅠnt();month=yearⅠnfoStrList[1].toⅠnt();day=yearⅠnfoStrList[2].toⅠnt();}{hourSpeedStrList=strList[1].split(":");hour=hourSpeedStrList[0].toⅠnt();minute=hourSpeedStrList[1].toⅠnt();second = hourSpeedStrList[2].mid(0,7).toFloat();if(hourSpeedStrList[3]==""){qDebug()<<"@@@@@@@@@@@@@@@@@";speed = hourSpeedStrList[7].mid(0,7).toFloat();}else{speed = hourSpeedStrList[6].mid(0,7).toFloat();}}

所有时间数据处理完成后,使用函数ⅠnsetDataToDataBase(year,moth,day,hour,Minute,second,speed)载入SQLⅠTE数据库。所有的样本数据均拷贝至大容量UsbDisk,软件通过Event-Driver的方式检测[8]。系统会向窗体发送WM_DEVⅠCECHANGE,当有外部设备插入或拨出时通过判断获取wParam变量的值,wParam=DBT_DEVⅠCEARRⅠVAL在这里表示UsbDisk已被插入,wParam=DBT_DEVⅠCEREMOVECOMPLETE表示UsbDisk被移除[9]。

3.2 软件主线程

主线程是程序运行的轴线,main()即为程序的入口地址,不同于子线程代码独立,各个功能的子线程需要依附主线程才能够得以运行[10],Qt是集成的开发框架,各个类型的对象窗体完全采用继承与封装的机制,主线程主要是调用应用程序的图形界面,配置软件在使用过程需要用到的文本编码格式,给应用程序载入一个软件图标,具体代码如下。

int main(int argc,char*argv[]){QApplication a(argc,argv);QTextCodec::setCodecForTr(QTextCodec::codecForNa me("system"));QTextCodec::setCodecForLocale(QTextCodec::codecFo rName("system"));QTextCodec::setCodecForCStrings(QTextCodec::codec ForName("system"));MainWindow w;

猜你喜欢

滴速原始数据岩溶
穿越岩溶
GOLDEN OPPORTUNITY FOR CHINA-INDONESIA COOPERATION
某石灰岩矿区岩溶涌水治理处理方法
受特定变化趋势限制的传感器数据处理方法研究
探讨岩溶区高速公路勘察技术方法
戴明环法在提高小儿头皮静脉输液滴速准确率中的作用
全新Mentor DRS360 平台借助集中式原始数据融合及直接实时传感技术实现5 级自动驾驶
医用智能输液报警器的设计
可溶岩隧道基底岩溶水处理方案探讨
挂盐水滴速有讲究