APP下载

基于组件GIS的区域物化探数据处理软件开发

2013-03-06韩绍阳吴曲波

世界核地质科学 2013年1期
关键词:物化调用数据处理

柯 丹, 韩绍阳, 喻 翔, 吴曲波, 李 希

(1.核工业北京地质研究院,中核集团铀资源勘查与评价技术重点实验室,北京 100029;2.中国核科技信息与经济研究院,北京 100037;3.中国地质大学(北京),北京 100083;)

区域物化探数据(重力、磁力、放射性和地球化学等)在断裂构造识别、盆地基底反演、岩体边界圈定和岩性识别等区域地质成矿环境分析与研究方面具有重要的作用[1]。GIS技术的快速发展,使传统物化探数据处理软件面临着巨大挑战,即,要求软件具有专业数据处理功能的同时,还要具有海量数据管理、坐标系统变换以及标准的制图输出等功能。目前国外软件厂商也已经注意到这一点,在软件开发上专为GIS应用预留了接口或开发了专用的组件 (如Geosoft montaj oasis软件提供的ArcGIS组件)。但国内物化探数据软件在这一方面目前还处于起步阶段,因此所开发出的集基本GIS功能、常规物化探数据处理功能,以及非常规数据处理功能于一体的区域物化探数据处理软件具有较强的实用性和前瞻性。

1 软件功能设计

区域物化探数据软件由基本GIS功能、常规数据处理功能和非常规数据处理功能三大功能模块组成。各功能模块共享同一区域物化探信息数据库,软件总体结构如图1所示。

1.1 基本GIS功能

基本GIS功能包括视图管理、矢量数据的查询和检索、属性数据管理、图形操作、空间分析和制图输出等功能,能够满足区域物化探数据处理时对GIS功能的需求(图2)。

1.2 常规数据处理功能

常规数据处理功能包括数据预处理、重磁数据处理和放射性数据处理3个部分(图3)。数据的预处理主要有空区补值及扩边、滑动平均和正则化滤波等常用功能。重磁数据处理功能主要包括解析延拓、化磁极、方向导数和欧拉反褶积反演等常规处理功能。放射性数据处理主要包括铀富集系数、变异系数、U2信息以及空间相关性分析等功能,为从放射性数据中提取出与铀矿化相关的各种信息提供了技术手段。

1.3 非常规数据处理功能

非常规数据处理功能包括分形外插、弱信息提取、断裂分维数测量和非线性重磁场分解等4个部分(图4)。分形外插功能可以对重磁数据进行空间外插,从而使数据满足频率域中处理的要求,与传统方法相比,可以很好地消除插值所引起的边缘效应。弱信息提取功能主要包括弱异常增强、自调节滤波和磁场二次差分等方法,可以对一些微弱重磁异常进行提取。断裂分维数功能可以快速有效地对单区或多区容量维和信息维进行计算,从而可以定量反映断裂构造的复杂程度,为描述断裂构造的空间分布提供依据。非线性重磁分解功能主要包括分形奇异值分解、DCT域和FFT域内和能谱-面积(SA)分形方法,它们均可以对重磁场进行区域场和局部场的有效分离。

2 软件开发关键技术

2.1 组件GIS技术

基于Visual Studio 2005和ArcGIS Engine 9.2平台进行软件开发。

ArcGIS Engine是一个基于ArcObjects构建的可编程的GIS工具包,可以提供常用的GIS功能。ArcGIS Engine主要由控件、工具和对象库3部分组成。ArcGIS Engine提供了20多个对象库,用户可以根据自己的需要在程序中添加相应的库。利用工具和对象库可以实现视图的浏览和缩放、图层的叠加显示、图形的编辑、文本标注、空间分析和制图输出等基本GIS功能。

2.2 混合编程技术

混合编程采用多种编程语言进行组合编程,相互调用,共享数据结构和信息。它集各种语言的优点于一身,从而避免了使用单独一种语言的不足[2]。可以在较短时间内对现有的由不同语言编写的程序代码进行修改,形成新的应用程序,缩短了开发周期、节约成本、提高效益。函数命名约定和参数传递方式是混合编程时需要注意的两个方面。命名约定是为了解决不同语言对名称标识符(如变量名、参数名、过程名和函数名等)的不同处理,对目标文件名的不同长度进行限制的约定。参数传递方式的一致性直接影响到程序调用的正确性,因此,发送参数的方式和接收参数的方式要完全一致。

混合编程的实现可以分为以下3个步骤:

(1)将由高级语言编写的区域物化探数据处理方法的计算机程序改写为动态链接库,并在动态链接库中设置相应的处理函数接口,以供Visual C#语言调用。

(2)利用Visual C#完成程序界面、参数对话框和功能菜单的设计。

(3)将模块中各个菜单项与相应的数据处理方法相连接,通过单击菜单项可以实现各种数据处理功能的调用。

2.3 动态链接库文件的生成与调用

在混合编程实现的过程中,动态链接库的生成是关键之一。下面重点介绍VC++和Fortran动态链接库的生成,以及Visual C#对Matlab的调用。

2.3.1 VC++库文件的生成

以化磁极程序为例,说明VC++动态链接库的生成,具体实现过程分为如下3个步骤:

(1)新建一个名称为MagRTP的动态链接库项目(MFC AppWizard(dll)), 并为项目添加一个成员函数 (Add Member Function),函数类型为void,声明为:

MagRTP (float D, float I, char FileIn [],char FileOut[])

其中变量D为磁偏角,I为磁倾角,FileIn[]为输入数据文件名,FileOut[]为输出数据文件名。

在项目的FileView一栏的Source Files中找到文件MagRTP.def,在EXPORTS的下面一行加入要输出的函数名称,即MagRTP。这样就完成了动态链接库项目的建立及导出函数的声明。

(2) 在 MagRTP (float D, float I, char FileIn[], char FileOut[])函数中输入实现化磁极的程序代码(由于文章篇幅限制,此处程序代码省略)。

(3)将输出文件设置为发行版,即在Build菜单下选择Set Active Project Configuration菜单项,将它的值设置为Win32 Release。然后对程序进行编译、连接、执行,在项目所在目录的Release文件夹中可以找到编译后的动态链接库文件MagRTP.dll,库中的导出函数为MagRTP。

2.3.2 Fortran库文件的生成

以解析延拓程序为例,说明Fortran动态链接库的生成,具体实现过程分为如下3个步骤:

(1)在Fortran PowerStation 4.0开发环境中创建一个类型为动态链接库(Dynamic-Link Library)的项目(名称为 Continuation), 将需要改写的源文件Continuation.for加入该项目文件,并将源文件另存为Continuation.f 90,在项目中删去文件Continuation.for,并导入文件Continuation.f 90。

(2)对文件Continuation.f 90进行改写。改写后的用于定义输出参数的程序代码如下:

程序代码第一行中的 “DLLEXPORT::CONTINUATION”表示导出函数为“CONTINUATION”。在Avenue语言中,调用导出函数 “CONTINUATION”时所用的具体名称(大小写),需要根据Fortran的调用约定来确定,默认情况下导出函数名称全部为大写;当调用约定为C或STDCALL时,导出函数名称全部为小写。为了调用方便,利用 “!MS $ ATTRIBUTES ALIAS:'Continuation'::CONTINUATION”语句,强制规定“CONTINUATION”函数被调用时的名称为“Continuation”。 通过修饰符 VALUE和REFERENCE控制参数的传递类型,VALUE表示参数的传递方式是值传递;REFERENCE表示参数的传递方式是地址传递,Fortran PowerStation中默认的参数传递方式是地址传递。

(3)对改写后的程序文件进行编译(Compile)、 连接(Link), 并生成 Continuation.dll文件,从库中导出的函数为Continuation。

2.3.3 Matlab库文件的生成

首先利用Matlab自带的 COM组件编译工具COM Builder将以.m文件编写的数值计算函数编译为COM组件(DLL文件),然后利用VS.NET友好的GUI功能和组件调用能力调用Matlab生成组件,从而达到综合利用两种软件平台优势的目的,并且使软件开发达到更好的模块化。

2.3.3.1 Matlab下COM组件的生成

(1)创建工程。在 COM Builder窗口中的Component name文本框中设置组件(DLL文件)的名称。

(2)添加M文件和编译创建组件。将.m文件添加到工程中,点击 Build/COM object,生成所需的头文件、源文件、接口描述文件、动态链接库文件等,在右侧的 Build status显示框中显示编译的过程和信息。

(3)打包和分发组件。点击ComponentAdd component将文件打包。打包后新建 distrib和src文件夹,包含调用所需文件、库、资源、接口等。

2.3.3.2 VS.NET调用COM组件

(1)添加引用。在 VS.NET环境下,点击“项目/添加引用”菜单。在该对话框中,选择中间选项卡COM,如果COM组件在系统中已注册,则可在列表中找到该组件。选择生成组件,并添加到项目中。打开.NET对象浏览器窗口,可看到由Matlab生成的COM类已添加到工程项目中。

(2)实例化COM引用。完成添加后,可在.NET代码中使用COM组件。VS.NET创建的名称空间与原来的COM组件有同样的名称,由COM组件提供的类放在该名称空间中,则可与使用C#固有对象相同的语言来创建其引用,并实例化和调用COM对象的包装。

3 软件功能开发

3.1 软件界面设计

软件界面按照Windows界面风格进行设计,主界面由菜单、工具条、图例内容表、视图和状态栏5部分组成(图5)。主要包括文件、视图管理、查询检索、属性管理、图形操作、空间分析、数据预处理、常规处理、弱信息提取、非线性分解、断裂分形维和放射性处理等菜单。

3.2 基本GIS功能开发

软件中基本GIS功能大部分可以直接通过ArcGIS Engine提供的工具按钮来实现,不需要进行任何编程,但是还有一些功能,如网格专题的添加、空间和属性查询、图例编辑等等都是需要通过编程来实现的。

3.3 物化探数据处理功能开发

常规与非常规数据处理功能开发的思路相同,就是先把需要处理的网格专题图层(GRID Files)转换成文本文件,然后再调用动态链接库中的数据处理函数对文本文件进行处理,最后再将处理得到的结果文本文件转换成栅格图层,并导入到软件的当前视图中进行其他分析。

4 结 论

基于组件GIS技术开发的专业应用软件,具有开发方式灵活、开发周期短、更专注于专业功能等优点。开发的区域物化探数据处理软件界面友好、操作简单、功能实用,高效地将基本GIS功能、常规数据处理功能,以及非常规数据处理功能集成在一起。该软件在桃山—诸广铀成矿带、内蒙古满洲里铀及多金属成矿带得到了应用,取得了较好的应用效果,并成功获得了国家版权局颁发的计算机软件著作权登记证书。

[1]柯 丹.花岗岩型铀矿勘查中区域物化探方法技术研究[D].北京:核工业北京地质研究院,2011.

[2]刘乃琦.IBM PC混合语言编程技术[M].北京:电子工业出版社,1990.

猜你喜欢

物化调用数据处理
认知诊断缺失数据处理方法的比较:零替换、多重插补与极大似然估计法*
ILWT-EEMD数据处理的ELM滚动轴承故障诊断
核电项目物项调用管理的应用研究
LabWindows/CVI下基于ActiveX技术的Excel调用
基于系统调用的恶意软件检测技术研究
重看图形界面“扁平化”与“拟物化”之争——关于设计思维的探讨
物的人化与人的物化——当代舞台美术的表演
基于希尔伯特- 黄变换的去噪法在外测数据处理中的应用
档案:一种物化的文化形态
利用RFC技术实现SAP系统接口通信