基于开源软件的工程地质数字化开发方案研究
2022-02-21刘聪元
摘要:为提高工程地质数字化软件开发效率,提出了基于开源软件的工程地质数字化开发平台解决方案,能够在提高开发效率和标准化水平的同时,减轻勘测企业对商业软件的依赖,快速形成独立的、具有自主知识产权的软件产品。测试结果表明:研究所用开源软件和多层架构可以满足工程地质数字化开发的要求,对于勘测企业工程地质数字化研发具有一定的参考价值。
关键词:工程地质数字化; 开源软件; .NET; 软件开发
中图法分类号:P642 文献标志码:A DOI:10.15974/j.cnki.slsdkb.2022.02.019
文章编号:1006 - 0081(2022)02 - 0106 - 06
0 引 言
由于工程地质内、外业工作的复杂性,现有商业软件并不能完全满足企业数字化的需求,因此大多数勘测企业选择自行开发工程地质数字化软件[1-3]。不同企业对工程地质数字化的需求千差万别,但对于数据库管理、Excel数据处理、Word格式报告生成、CAD图件生成等的基本需求是一致的。传统的开发方式是通过COM技术实现软件与应用程序的通讯,因此软件运行依赖Office,AutoCAD等商业软件的支持[4-6]。随着计算机技术的发展,尤其是互联网技术和相关企业的兴起,开源软件在操作系统、数据库、Web服务器等多个方面的应用已经成为主流[7],通过调用Office,CAD等有关开源组件库,可以脱离Office,AutoCAD等商業软件的支持,直接读写相应格式的文件。
因此,基于开源软件设计了一款工程地质数字化开发平台,对数据库、CAD、Office文件读写等基础功能进行了封装,企业开发人员仅需通过简单的调用,就可以实现较为复杂的功能,从而大幅简化开发难度,让开发人员把精力用在业务逻辑上,能够在有限时间内实现更多的功能,最大程度满足勘测企业的个性化需求。此外,该开发平台的搭建基于开源软件,有助于减轻勘测企业对商业软件的依赖,形成独立的、具有自主知识产权的软件产品。
1 开发语言及相关开源软件
1.1 开发语言选择
开发语言的选择是平台方案技术路线的决定性因素之一。C#为微软公司于2000年基于.NET框架推出的一种面向对象且类型安全的现代编程语言。开发人员利用C#语言能够开发出多种在.NET中运行的安全可靠的应用程序[8]。C#综合了VB (Visual Basic) 语言的简单可视化操作和C++语言的高运行效率,兼具Java现代语言的特点,是Windows平台下的首选编程语言。C#的缺点是在Windows以外的平台上开发能力较弱,但是近年随着.NET Core和.NET 5.0的相继推出,这种情况正在逐步改善。
勘测企业开发人员通常并非专业的程序员,而C#具有的优良性能和简单易用的特点,使其特别适合作为工程地质数字化开发的首选开发语言。开发时可以选择免费的Visual Studio 2019社区版作为开发环境,且其同为微软公司出品,能够良好地支持C#。
1.2 相关开源软件选择
开源软件已经成为众多企业和软件项目的基础配置,对于软件领域具有重要意义,不仅有助于提升参与者的研发能力,而且能带动国家经济发展。中国已将软件开源列入“十四五”规划,并发布木兰开源系列许可证,致力于构建开源生态[9]。
近年来出现了不少优秀的开源软件,其中不乏基于.NET框架和C#的软件[10-13]。经研究,筛选了一批可用于工程地质数字化开发的开源软件,其中与本文相关的软件见表1。
2 开发平台解决方案
2.1 开发架构
数据库系统开发一般会根据“高内聚、低耦合”思想,把各个功能模块划分为表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)3层架构,各层之间通过接口访问[14-15]。虽然这种多层结构在性能上略有损失(因增加了调用处理),但它具有可复用、易维护的特点,比如程序开发完成后,需要将SQLServer数据库更换为MySQL,仅需修改数据访问层即可。
考虑到工程地质数字化需求的复杂性,本开发平台在经典3层架构上进行了拓展,增加了支撑层和基础服务层(如图1所示),其中支撑层主要负责提供软件开发的软、硬件环境及数据库支持等。
2.2 数据访问层实现
数据访问层基于中国开源软件SqlSugar 开发,兼容SQLServer、MySQL、SQLite等所有SqlSugar支持的数据库。根据工程地质数据库的特点,数据访问层一般采用DBFirst方式实现,即先建立数据库,再根据数据库生成实体模型,实现数据持久化。此外,还需要针对不同的数据库进行功能封装,实现通用的增、删、改、查功能;对于有特殊需求的表,可先用代码生成器生成增、删、改、查的代码,再在此基础上进行修改生成。事务机制可以保证所有操作正确完成,在操作过程中,一旦出错便立即回滚到初始状态,从而保证数据的完整性。因此在对多个表进行删除操作时,应使用事务机制进行控制,确保删除操作正确执行。
2.3 基础服务层实现
虽然直接调用开源.NET组件库可以实现相关功能,但代码编写量大,维护困难。针对工程地质数字化的具体需求,通过对开源.NET组件库进行二次封装、建立基础服务层,既可以避免重复开发,大幅降低开发难度,同时也可以促进标准化进程,方便以后替换为更合适的开源组件。
(1) 平台管理模块。平台管理模块主要通过调用数据访问层实现平台通用管理,包括组织机构、人员、物资、资源的管理,字典管理,角色、权限管理及登录、注销等功能。
(2) CAD读写模块。基于NetDXF开发,能够实现新建、打开和保存dxf文件,新建和选择图层,设置字体、字高,绘制直线,绘制多义线,绘制文字,插入图块,填充花纹等功能。
(3) Excel读写模块。基于NPOI开发,能够新建或打开xls,xlsx格式文件,并在该文件中指定单元格读取或写入内容,以及画表格线、合并单元格等功能。
(4) Word读写模块。基于NPOI开发,能够新建或打开doc,docx格式文件,根据标签定位并读取或写入内容,实现添加或修改表格、段落、页眉页脚等功能。
(5) 三维操作模块。基于Activiz实现,能够打开和显示ts(受GOCAD,ItasCAD,CATIA支持)或其他格式三维地质模型,并进行分层显示、浏览、缩放、视图、面与面的求交运算等功能,其中面与面的求交运算关系到能否根据三维模型实现二维剖面出图功能,Activiz 5.8版尚未提供此项功能,但在Activiz 9.0试用版中已经实现。
(6) 自定义控件库。软件开发过程中不可避免地需要自定义一些控件或对已有控件进行改造。该库对自定义控件进行统一管理,便于重复使用。
(7) 其他开发模块。基础服务层是可扩展的,根据需要还可以添加图表模块、地理模块等。图表模块主要用于数据可视化,可将数据以柱状图、饼图、折线图等形式动态展现;可基于MsChart(为Visual Studio自带组件)或ZedGraph,ECharts.Net等进行具体开发。地理模块主要用于地图操作、坐标变换等;其中地图操作选用GMap.Net开发,坐标变换可基于DotSpatial开发。
2.4 业务逻辑层实现
(1) 勘测数据管理。主要实现钻孔、平硐、地质点等勘测数据的增、删、改、查等,包括数据批量导入、数据检查与清洗等。
(2) 地质图自动生成。主要通过调用CAD和数据库实现,包括钻孔柱状图、地质剖面图、平切图等的自动生成功能。运用模板技术和通过定制模板,可以满足不同工程的出图需求。
(3) 报告自动生成。通过调用Word读写模块实现,且通过报告模板定制,可以根据数据库中的数据生成地质报告。
(4) 地质模型管理。通过调用3D操作模块,可实现地质模型的导入、缩放、浏览等,以及通过三维地质模型生成剖面图的功能。目前三维地质建模软件价格较高,考虑到地质模型通常由少数人建立、供多数人应用的特点,通过开源软件开发的切剖面功能可以大幅减少三维建模软件的采购数量,节约企业资金。
2.5 表示层实现
(1) 桌面应用。基于WinForm开发。由于原生控件在功能性、美观性上均不尽人意,因此商业软件一般会采用DevExpress等价格昂贵的第三方商业控件;而开源控件Krypton Component Factory具有Office风格界面,在功能性和美观性上达到了较好的平衡,开发时可以优先选用。此外,也可选用国产的开源控件SunnyUI,该控件时尚美观,但在功能性方面没有增强。
(2) Web应用。采用微软的MVC架构开发,界面可以选用国产的LayUI等开发。
(3) 移动应用。采用微软的Xamarin实现,也可以用国产的Smobiler开发。二者都支持C#开发移动应用,前者的运用需要掌握一定的安卓开发知识,后者可以通过拖拽直接生成界面,但如果开发专业应用,需要支付一定费用。
3 测试与验证
针对开发平台进行了部分测试和验证,主要包括数据库、Excel、Word、3D、CAD等,均采用文中所述开源软件实现。
(1) 数据库、多层结构及文档读写。基于SQLite数据库、SqlSugar框架和多层结构开发了DB Builder,界面采用Krypton控件设计(图2),实现了工程地质信息数据库的表结构的管理、数据库自动创建、文档自动生成(图3)等功能。
“工程地质信息系统”实现了Excel格式钻孔数据的批量导入、数据清洗等功能,可以自动检查并指出错误位置(精确到行和列);同时可以导出符合标准的钻孔Excel格式文件并用于CATIA三维钻孔建立。
(2) CAD 自动成图。开发了灌浆数据管理程序,其CAD自动成图部分采用netDxf开发,可以根据灌浆数据自动绘制CAD灌浆钻孔展示图(图4)。
(3) 3D操作。采用Activiz 9.0试用版进行试验研究,实现了ts文件的解析,可以打开三维地质模型并进行分层显示、缩放、旋转、平移等操作(图5)。
根据模型获取三维剖面线是地质切剖面开发的关键技术(图6),为后续开发扫平了障碍。
测试结果表明:基于开源软件和多层结构的工程地质数字化开发平台方案是可行且高效的,可以在不依赖商业软件的情况下,较好地满足工程地质数字化开发的需求。
4 结 语
随着计算机技术特别是网络技术的发展,开源软件已经成为人类智慧的宝库。在工程地质数字化研发中引入开源软件,结合当前先进技术制定合理的开发方案,可以帮助勘测企业在投资较少的情况下,快速实现工程地质数字化,同时最大限度满足企业的个性化需求,对于勘测企业数字化转型具有重要意义。
值得注意的是,开源软件并不等同于免费软件,因此企业在引用开源软件时需充分了解并严格遵守开源协议,以避免法律风险。
参考文獻:
[1] 王国光, 李成翔, 陈键. GeoStation地质三维系统图件自动编绘方法研究[J]. 水力发电, 2014, 40(8): 69-71,85.
[2] 石伟明, 刘仕勇, 田华兵. GeoSmart在勘探生产管理中的应用[J]. 水电站设计, 2017, 33(2) :27-28.
[3] 刘聪元, 张春芳, 雷磊. 水利水电工程地质数据库系统初步研究与开发[J].人民长江, 2020, 51(增1): 127-131.
[4] 陈宇龙, 张宇宁. 工程地质信息化和自动成图技术研究[J]. 水利水电技术, 2018, 49(4): 145-153.
[5] 张伟伟. 地质矿产钻孔数据库管理及成图系统设计与开发[D]. 合肥:合肥工业大学, 2013.
[6] 段建肖, 廖立兵, 肖腾, 等. GOCAD三维地质建模成果的二次开发及应用研究[J]. 人民长江, 2015, 46(14): 51-54.
[7] OSCHINA.开源软件及国内发展现状[EB/OL]. [2021-09-16]. https://www.oschina.net/news/33260/china-opensource-status.
[8] Microsoft. C# 语言介绍[EB/OL]. [2021-09-16]. https: // docs.microsoft.com / zh-cn / dotnet / csharp / tour-of-csharp/.
[9] 涂林延. 开源软件许可证的法律属性分析[J]. 法制与社会, 2021(6): 189-190.
[10] 果糖大数据科技. SqlSugar ORM 5.X官网文档[EB/OL]. [2021-09-16]. https://www.donet5.com/Home/Doc.
[11] nissl-lab.npoi[EB/OL]. [2021-09-16]. https://github.com/nissl-lab/npoi.
[12] haplokuon.netDxf[EB/OL]. [2021-09-16]. https://github.com/haplokuon/netDxf.
[13] kitware. 3D Visualization Library for .Net C# and Unity[EB/OL]. [2021-09-16]. https://www.kitware.eu/activiz/.
[14] 朱玲, 薛贺. 基于.NET平台下的ORM组件的研究与应用[J].航空计算技术, 2007, 37(6): 89-91.
[15] 陳焕彬,浅谈. NET三层架构在系统开发中的应用[J].电脑与信息技术, 2016, 24(5): 45-47.
(编辑:高小雲)