基于GDI+的钻孔柱状图自动成图方法
2012-10-27李海君张耀文孙文洁
李海君 张耀文 孙文洁,2
1.防灾科技学院,河北三河市 065201
2.中国矿业大学(北京)地球科学与测绘工程学院,北京 100083
基于GDI+的钻孔柱状图自动成图方法
李海君1张耀文1孙文洁1,2
1.防灾科技学院,河北三河市 065201
2.中国矿业大学(北京)地球科学与测绘工程学院,北京 100083
针对勘测设计企业业务信息管理的具体需求,分析了勘察设计企业业务信息管理系统的主要功能,建设的系统主要包括项目管理、合同管理、费用管理及系统管理等功能;在此基础上,阐述了系统的开发原则、
应用效果和特点。
勘察设计企业;合同管理;费用管理;设计与开发
ADO.NET, drilling database; GDI+; histogra m
mapping; double-buffering
引言
钻孔柱状图是地质勘探分析中的基础图件,可形象刻画岩层、矿体等的地质结构及相互关系,是编制其它综合图件基本依据[1]。编制钻孔柱状图是地勘单位的基本工作,也是投入精力最多的工作之一。我国钻孔柱状图的绘制工作主要有两种形式,一是在手工精细绘制基础上,然后利用GIS、CAD或Coredraw软件进行矢量化成图,成图慢、效率低[2];另一种则利用各种程序设计语言基于AutoCAD或各类GIS平台进行二次开发[3],效果较好,但是对于广大的地质工作者来说,平台开发比较复杂,需进行专门培训,从而限制了系统的推广和应用。此外,国内外现有成熟软件,如uMap、GeoMaster、RockWare等软件,行业性强,若只需生成钻孔柱状图一项功能,仍需要购买整个应用平台,需要培训;且国外工程地质软件 ,对中文不支持或支持较差,添加中文注释信息困难[4]。
因此,现行软件由于其功能不完善、不易使用等问题而未普及,钻孔柱状图的自动成图技术的研究探讨就有其必要性[5]。本文基于Access数据库(或改变连接字符串使用SqlSever),采用ADO.NET 与GDI+相结合,在Visual Studio环境下实现了钻孔柱状图的自动绘制,并对图例填充、薄层处理等细节问题进行了探讨。
1 数据库的设计
1.1 钻孔数据库
根据钻孔要表达信息,建立ACCESS格式的钻孔数据库,建立钻孔的基本信息(包括名称、位置、坐标、标高、勘察单位、完探深度等)、分层特征(顶高、底高、厚度、累积厚度等)、地层特征(地层系、统、组年代信息、岩性描述等)、测试数据(室外岩心采取率、动探测试、井下电视、标贯信息、抽水试验数据等和室内土工试验等)、岩性图例(岩性图例填充符号编号、名称)等总共7个数据表。
1.2 表与表之间关系
在已建好的7个表中,采用基本信息表(Location)作为主表,其余6表作为子表,均采用“钻孔编号”为关键字(Data表中有值均为“钻孔编号”的数据列),每个表中都可依据关键字调出所需信息以供查询或操作。
1.3 岩性符号的管理
通过Windows 提供的绘图软件或者专业的绘图软件如GIS、CAD、PS或者CoreDraw等依据《区域地质图图例》规范,按照标准岩性划分建立一套常用岩性符号图例,格式可以为bmp、jpg或gif,文件进行编码后存放到指定的目录,以便按编码直接调用,进行地质断面的填充。
2 技术思路
2.1 实现思路
本文钻孔资料自动成图主要思路是应用数据库ADO.NET,基于C#语言开发实现钻孔资料编辑管理模块与钻孔柱状图的成图算法。应用ADO接口提取钻孔数据的空间坐标和岩性特征生成相应的图斑,并在窗体的图形控件中实现成图显示。
在开发过程(见图1)中,数据库采用Microsoft Access作为数据平台,应用SQL数据库语言,建立钻孔资料的数据库,进行钻孔数据的输入、编辑、管理及提取;而成图则采用GDI+基本绘图模块,设置绘图参数以及柱状图的格式、框架,用ADO中读取分层和岩性描述数据进行框架填充,实现钻孔柱状图的自动成图,最终以方便的图片形式供研究人员分析。
图1 模块开发主要技术思路
2.2 开发中遇到的技术难点
2.2.1 绘图缓慢
工程地质软件有时要创建十分复杂的柱状图,将要绘制图形直接在窗口中绘出,即使配置较高的机器,也需较长时间才能显示。另外,图形或者文本在屏幕上绘制,会有意外闪烁。
2.2.2 分页问题
钻孔柱状图当前页绘制完成以后,会有当前钻孔未绘制完毕的情况,需要在新的一页甚至两到三页进行剩余部分的绘制,这就需要注意分层深度、岩性描述以及填充的衔接。有时某些钻孔剩余很少部分未绘制,需从实际应用考虑是否调整绘图比例,是否进行分页。
2.2.3 薄层处理
在绘制柱状图的沉积构造绘制时,由于薄层厚度太小,按既定的比例空间不够绘制分层数据和岩性描述,这就要求我们将薄层的绘出后,将要填写文字和数据的地方进行必要处理。
2.3 开发过程中的关键技术
所用程序设计语言C#.NET是微软在2000年7月推出.NET Framework的第一版是提供的一种新语言,近年来,由于其派生于C/C++简洁语法,仍能保持C/C++原来功能,对象定位简单,类型安全。尽管是新语言,已经成为Windows及Web开发人员的首选开发工具[6]。
GDI+(Graphics Device Interface,图形设备接口),将应用程序与图形硬件隔离,从而允许开发人员创建与设备无关的应用程序。它以继承类的方式,通过调用GDI+ 类提供方法,此方法又反过来调用相应特定设备的驱动程序,进而实现图形在屏幕或其它特定设备上的显示。GDI+提供的服务分为3个大类:二位矢量图形、图像处理和版式[7]。
ADO.NET是微软提供一组可用于和多种数据源(主要为数据库)进行交互的面向对象类库,其提供用与数据源进行交互的相关公共方法,可保证平台互用性和可伸缩的数据访问。类库主要有用于交互连接的Connection类,用于执行查询、修改、插入等操作的Command对象以及用于暂存数据的DataReader、DataAdapter类和DataSet对象等来撷取、处理与更新数据。
模块在开发过程中,针对开发中遇到的技术难点,一是采用双倍缓冲技术解决在计算机中直接绘图的速度缓慢并消除意外的闪烁效果,其次应用缓冲线绘制技术进行钻孔柱状图的薄层注释填充并用数组自动判断来实现分页,使得柱状图可以快速、美观的自动成图[8]。
3 基于GDI+进行地质钻孔柱状图的自动绘制
柱状图主要由表头、图框与填充内容等几大部分组成[9],其均绘制于Picture Box窗体中,具体各部分绘制分别实现,绘制代码所需命名空间为System.Drawing.2D。具体实现如下:
3.1 表头的绘制
表头包括钻孔的基本信息及柱状图的各列对应内容的列名,内容固定不变而且是各个钻孔的公用必需部分,可以在程序中事先设计好格式。与数据库的交互操作由数据连接读写类DataMean()与操作类DataOperate()实例化后执行。
(1)画表头线。不需连接数据库基于Pen()函数,已绘图控件左上为坐标原点,用屏幕起始点坐标绘制表头线,典型代码如下:
调节下拉ComboBox值,即可得所钻孔柱状图表头,如图2:
图2 钻孔柱状图的表头
3.2 图体框架部分及数据填充
因表头图幅已确定,图体框架的绘制也可以由DrawLine()函数绘出柱状图中固定的列线,而地层线的绘制则需要应用DataSet对象调用Data数据表中相应内容,转化为双精度值后进行绘制。程序的实现如下:
(1)读取分层数据,绘制地层线。读取数据以后,需要用数组有选择存储“累积厚度”字段值,然后进行定义Value[0]与Value[*],进一步进行绘制,典型代码如下。
(2)分页处理
若柱状图在当前页未能绘制完毕,就要考虑分页问题。表头,表体和表尾三部分,在钻孔深度较大不能绘制完毕时,具体分层步骤实现如下:
①计算表体(是累计厚度和岩性描述区域累计值的最大值)和表尾的高度,查看剩余部分,若仅剩表尾,则调整表体的(绘图控件)的大小,尽量绘制成一页,若剩余数层地层,则另起一个新窗体进行绘制,格式固定;
②新窗体绘制时,事先定义好String全局变量,分别存储文字型的岩性描述,系统组等地层信息;Double全局变量,存储上层表尾处剩余的分层数值,以便下层继续绘制。并且注意变量即是清零。
画地层界线填写层底标高,深度,厚度,岩性名称以岩性描述以及水位、动探、钎击数的绘制,绘制过程与上两步大体相同,不再赘述。
3.3 应用双倍缓冲进行岩性图例的填充
针对在屏幕中绘制文字或图像时的速度缓慢或意外闪烁问题,可首先将存储好的图形绘制到图像对象,绘制完图像后,再将图像绘制至窗口,这个技巧就是双倍缓冲`。同理,该技巧也可先进行背景绘制,然后再在背景上进行图像绘制,这样,既可以缩短绘图时间,亦可以消除闪烁。具体的实现步骤如下:
3.4 运用缓冲线绘制技术,进行薄层处理。
当地层划分较薄而岩性描述文字又多、所显示比例尺较小的情况下(见图3),既定岩性描述区不能容纳全部岩性描述 ,则需要画缓冲线来解决,使其能较美观地显示。
图3 柱状图的薄层处理
具体的算法如下:
(1)定义一个数组,每次画完一行,记录这个行线的累积深度,根据ADO读出的岩性描述和岩性名称所占字符,计算出需要的最大行距,适当安排岩石名称和描述的位置;
(2) 如果描述文字所占的总高度大于该层厚度,则以岩性描述文字的最低位置画横线来结束该层,否则,则以岩性描述文字所占的总高度来结束该层;最后一层应特别处理,如果最后一层的层厚大于或等于该层岩性描述文字所占的总高度 ,则按照层厚来画底界限。
(3)画线完毕后,将这个行线和岩层厚度的底板线连成缓冲线。
本文所作的柱状图是单孔柱状图,旨在快速生成涵盖勘察工程中钻孔的绝大部分信息,以供研究人员分析。完整柱状图的生成效果如图4 所示。
4 结语
通过本程序模块开发,利用ADO.NET与GDI+相结合,以ACCESS数据库作为数据源进行交互,实现了钻孔柱状图的自动生成,可比较现有的柱状图成图的低效率,低精度以及分享性不足等缺点,缩短了绘图时间,简化了图件绘制程序,解决了一般编程制图过程中绘制缓慢以及意外效果等问题,并对地质图例的填充及薄层处理等进行探讨阐述。对实现钻孔柱状图成图标准化与规范化,以及其它测绘研究领域(如水文钻孔综合柱状图,测井曲线图等)的柱状图绘制技术进一步拓展具有较好的借鉴性意义。
但该程序的也存在不足之处:虽然该程序编制与应用十分方便、简单,但是在数据录入和其它图件的集成应用方面还存在繁琐流程,有待于加强对数据管理与集成模式的优化改进。
图4 成图结果
[1]贾柳静.地质剖面数据库管理及自动成图系统的研究与设计[D].中国地质大学(北京),2006年.
[2]许哲平,陈建强,迟文学.基于Delphi7和CoreDraw9 VBA的钻孔柱状图自动成图系统[J].桂林工学院学报,27(1),81-85.
[3]郑洁红,吴名彬.工程地震钻孔柱状图的微机绘图系统[J].华南地震,1998,18(2):72 - 77.
[4]牟乃夏,梁春利,张灵先,等.基于WebService的钻孔柱状图网络成图系统研究[J].金属矿山,2010,2,92-116.
[5]解华明,陈守余.基于MAPGIS的钻孔柱状图绘制软件的编制[J].物探化探计算技术,2004,26(1),85-90.
[6][美]内格尔,伊夫杰等.C#高级编程[M].李敏波译.北京:清华大学出版社,2006:204-205.
[7][美]怀特.GDI+程序设计[M].杨浩,张哲峰译.北京:清华大学出版社,2002:18-21.
[8]迟文学,陈建强,许哲平等.钻孔柱状图中缓冲线绘制技术[J].地质科技情报,2006,25(5),2-5.
[9]陈文杰, 应轶.第四系钻孔柱状图成图系统的设计与实现[J].地矿测绘,2007,23(4),12-16.
[10][美]沃森,内格尔.C#入门经典[M].齐立波译.北京:清华大学出版社,2008: 893-894.
The mapping method of drilling histogram based on GDI+
Li Haijun1,Zhang Yaowen1, Sun Wenjie2
1.Institute of Disaster Prevention, Hebei Province, S0a6n5h2e0 C1ity,
2.ChinaUniversity of Mining & Technology (Beijing),Ceoollsecgieen ocfe G a nd Surveying Engineering,Beijing,100083
The rapid and simple mappinogf drillingh istogram has very important significance for the development of Geologicrael search. Based on the discussioonf limitatioin n existing mappinmg etholds,ththis esis adopts ACCESS databaset o realize the mappi ng module with the combinatitoen chnologoyf ADO. NET and GDI+,expountdhs e difficulty solutions of paging algorithmp, rocessingT, LC drawing, pattern filling, and so on.. The proposemd ethod has simple operatioan nd high accuracy,qu ick efficiency as well as enlightenisnigg nificancine the applicatioonf computegrr aphicis n the field of Geological Prospecting on some extent.
P208
B
10.3969/j.issn.1001-8972.2012.20.021
李海君(1986-),男,山东德州人,助教,现主要从事GIS的地学应用开发、应急管理信息系统等方面的研究教学工作。