煤炭是我国的基础能源,而煤炭地质勘查则是资源开发利用的先导性工作。进入21世纪以来,随着我国国民经济的高速发展和建设全面小康社会对煤炭资源持续稳定供应的强烈需求,煤炭地质勘查的方式也跟着与时俱进。传统的地勘手段以及数据应用已经不能满足当前建设数字中国的时代需求。因此,当前中国很多优秀的煤炭领域企事业单位,也都紧跟数字化转型步伐,加快煤炭地质方面的数字化发展,积极推动数字化中国的建设。
本文是以中国地质调查局自然资源实物地质资料中心牵头的全国煤炭行业重点工作区钻孔结构化数据库建设项目为依托。该项目是为贯彻落实国家找矿突破战略行动,大力推进煤炭地质数字化建设,将成果数据应用到地质云3.0的全国重要地质钻孔数据库服务平台,为社会经济发展和找矿突破战略行动提供数字化服务。
在研究中发现,由于一份Excel数据表只能包含一套钻孔数据,这些数据需要以Access数据库文件格式存储在专用权限的煤系地层钻孔结构化数据库中。每个钻孔都有唯一的以十六进制ID编码命名的文件夹,且每个文件夹都包含一个同名的DZZK_PROPERTY.mdb数据库文件。而Access数据库具有独占性,使用PHP的PDO方法进行连接数据库时,只能指定已经建立ODBC数据源的数据库作为存储库,如何实现将每套钻孔的Excel数据表中的五类结构化数据,同时导入对应的每个钻孔ID名称文件夹中数据库名称均为DZZK_PROPERTY.mdb数据库内,通过PHP语言研发一种基于PHPExcel类库的工具,结合此项目的实际,完成煤系地层钻孔结构化数据存储和交互。
1 煤系地层钻孔结构化数据分类
煤系地层钻孔结构化数据共分为5个类别,包括基本信息、地层综合描述、煤质分析、煤样试验记录以及钻孔孔深校正及弯曲度测量的重要数据。在这些数据中涵盖了各工作区的钻孔编号、钻孔经纬度、坐标高程、起始孔深、终止孔深、比例尺、见煤深度和止煤深度、岩矿心长度、采取率、岩石名称、花纹代码、接触关系、地层单位或期次、宇/宙、界/代、系/纪、统/世、阶/期、群、组、段、层位、地质描述、简易水文、标志面名称、标志面孔深、标志面夹角、测量次序、记录孔深、校测孔深、误差、误差率、测量孔深、天顶角、方位角、测量方法等96个综合数据项。同时,也包含了样品编号、煤层编号以及空气干燥基灰分、焦渣特性、干燥基全硫、干燥无灰基碳含量等120余个原煤、精煤和浮煤的煤质分析和煤样试验数据项。
2构建数据表及公共数据库
2.1 构建联动数据表
为便于数据采集,使用excel构建联动数据表,将5种类型数据分别存储在不同的工作标签中。各标签中的列数据名称与煤系地层钻孔结构化数据库字段严格对应。通过VBA程序实现数据项之间的联动:比如地层岩石名称中出现“煤”的关键字,程序会在基本信息标签的见煤深度和止煤深度处,自动生成在地层综合描述标签中对应的起始深度和终止深度数据,避免在不同的标签中频繁切换,降低数据采集错误率。
2.2 构建公共数据库
在数据交互过程中,主要基于微服务系统架构,采用分布式存储系统,建立Web数据交互平台。由于access数据库具有独占性,不能同时生成同名的数据库文件,且不同钻孔ID中的access数据库文件名称均相同(DZZK_PROPERTY.mdb),这不利于各工作区钻孔结构化数据的批量汇聚与存储(图2-1)。为了解决此类问题,实现不同工作区钻孔独立ID数据的存储与管理,首先应该建立一个独立的钻孔结构化数据库。通过程序算法将各excel表的数据分批存储在这个独立的公共数据库中,再使用PHPExcel类库以及程序生成独立ID标识的access数据库,分别存入对应的钻孔ID文件夹中。图2-1 独立ID数据存储
3 基于PHPExcel类库算法
3.1 PHPExcel类库
PHPExcel类是php一个excel表格处理的类。PHPExcel 是用来操作Office Excel 文档的一个PHP类库,它基于微软的OpenXML标准和PHP语言。可以使用它来读取、写入不同格式的电子表格,如Excel (BIFF).xls,Excel2007 (OfficeOpenXML) .xlsx,CSV,Libre/OpenOffice Calc.ods,Gnumeric,PDF,HTML等。在该项目中,主要引入三个文件:
表3-1 引入类库文件
3.2 标签数据读取与入库算法描述
启动session后,在引入类库文件之前,需要将公共数据库中测试数据清空,通过PDO连接公共数据库文件,并判断数据库文件是否连接成功。使用循环算法读取excel文件标签中的对标表头数据。代码表示为:foreach($_SESSION['zk_number'] as $val=>$key)。通过$sheetCount = $objPHPExcel->getSheetCount()获得数据标签sheet的数量,通过算法分析,此时要减1。由于每个钻孔对应的excel数据标签为5个,但不是每个标签中都有数据,可能存在空数据标签,因此在读取5个标签过程中,需要分别建立入库算法。公共算法部分是获取总行数,并取得总列数对应的字母列号,同时将列数转换为数字。再通过双重循环算法实现行与列的数据读取。在将读取的各标签数据入库到公共数据库前,需要将页面编码UTF-8转换成gb2312,才能在数据库中显示中文字符,即$str=mb_convert_encoding($str,'gb2312','UTF-8')。同时要消除循环行最后一个逗号,用以数据标准化,即$str = substr($str,0,strlen($str)-1)。
各数据标签的数据读取和入库中,算法最大的差别就是不同标签的行列数量的分析,表现为读取的行号与列号的不同,通过$sheet_biao1 = $objPHPExcel->getSheet(0)来调整变量数值,可以实现在不同标签中读取数据的准确性。最后通过$rs_biao1=$db->query("insert into 37MeiTianZuanKongJeBenXinXi values({$str})")来实现单标签数据入库。
3.3 批量数据入库算法描述
在每个钻孔excel数据表读取一次并植入公共数据库的同时,通过mysqli建立一个新的mysql数据库,再通过JSON实现数据表的添加。将对应的钻孔ID信息存储到数据表中,通过循环语句创建文件夹,此时需要判断该钻孔ID编号是否存在。核心代码表示为:
while($row=mysqli_fetch_array($res)){ $dir="D:/*/".$row['xm_id']."/".$row['zk_id'];
if(file_exists($dir) && is_dir($dir)){
echo "<script>alert('《". $_SESSION['xmname']."》文件夹已存在!');</script>";
exit;
} else{
mkdir ($dir,0777,true);
$sql_zt="update zk_files set drzt='1' where zk_id='".$row['zk_id']."'";
$res_zt = mysqli_query($conn,$sql_zt);
}
}
文件复制完毕,通过扫描文件夹内所有数据,返回数组清空文件夹函数和清空文件夹后删除空文件夹函数的处理结果,清除公共数据库中的数据文件,为下一个数据表的入库做好准备。
4 结论
综上所述,通过PHPExcel类库对煤系地层钻孔结构化数据的读取与入库操作,不仅可以准确识别各属性数据,并完成excel各标签表的数据读取,再结合PHP以及JavaScript等程序实现文件夹的复制存储以及数据的入库。节省了大量的人工成本和时间成本,为煤系地层钻孔结构化数据的管理打下了基础,从而有利于进一步推动数字经济、科技成果转化。同时也为地质矿产资源综合数据以及地质环境数据的开发与利用,提供了一个新的应用思路。
参考文献
[1]马朝阳,齐少凡,岳鹏,等.基于钻孔数据的地球深部科普服务平台建设研究[J].中国矿业,2020,29(S1):554-558,567.
MA Zhaoyang, QI Shaofan, YUE Peng,et al. Research on the construction of deep earth science popularizing service platform based on drilling data [J]. China Mining Magezine,2020,29(S1):554-558,567.
[2]梁银平,马朝阳,岳鹏,等. 关于地质钻孔资料开发利用的思考[J].中国矿业,2020,29(S1):56-59.
LIANG Yinping, MA Chaoyang, YUE Peng,et al.Reflection on the development and utilization of geological borehole data [J]. China Mining Magezine,2020,29(S1):56-59.
[31王凤玲.基-t"PHP+MYSQL的新闻发布系统的研究与实现[J].计算机应用与软件,2012,29(2):234—236.WANG Feng—lin.Th e research and implementation of newsrelease system based on the PHP and MYSQLⅡ].ComputerApplications and Software,2012,29(2):234—236.
[4] 顾大刚.基于MVC模式的PHP开发框架Codelgniter[J】.江西科学,20o9,27(5):722—723.GU Da·gang.,I1le PHP development framework Codeign iterbased on the MVC[J].Jiangxi science,2009,27(5):722-723.