甘业安
摘要: 本文叙述了MapGIS软件的先进成图理论;介绍了VC++开发语言的开发原理与代码机制;浅述了MapGIS二次开发类库的操作原理;讨论了基于MapGIS开发地质矿产钻孔柱状图的开发流程总图;深入探讨了钻孔柱状图各模块实现的原理与代码;最后,文章给出了地质矿产钻孔柱状图生成的基础步骤流程并分析了图形形成原理;希望能给广大同行带来一定的理论与实践意义。
关键词:MapGIS类库,钻孔柱状图,地质矿产,二次开发
中图分类号:F407.1 文献标识码:A 文章编号:
钻孔柱状图是工程地质中广泛使用的基础性图件,但是通常采用传统的手工绘制,效率低而且不易修改,不能满足实际工作的需要。近年来,随着计算机技术的应用与基于GIS(地理信息系统)利用数学地质方法进行矿产预测的应用,需要一种GIS支持的矿区钻孔柱状图绘制系统,其不仅要能绘制钻孔柱状图,而且还能对矿区钻孔数据进行对比和数据管理,为基于GIS应用数学地质方法对矿区进行矿产预测提供数据准备[1-2]。
本文基于国产地理信息系统软件平台MAPGIS,开发了针对地矿行业的钻孔柱状图自动生成系统,实现了图与数据的统一。
1 MapGIS概述
1.1 MapGIS软件
图形数据库管理子系统是地理信息系统的重要组成部分。MAPGIS的图形数据库管理系统可同时管理数千幅地理底图,其主要功能如下:
图库操作功能---提供了建立图库、修改及删除图库等一系列操作;以及图幅入库的参数设置,包括幅面的大小、经纬跨度和比例尺等等;对编辑好的图库,系统还提供了图库输出功能,将其转化为地理信息系统或管网属性系统等的底图,备其他系统使用。为严格确保数据的完整性,在建库过程中作值域检查、依赖关系检查、重复记录检查,系统对用户数据自动备份,用户数据一旦遭意外而被破坏,可启用备份数据。
引入“库类”的概念,建立了一种数据组织与管理的新方法,使得地图数据的存储与检索非常灵活。库类的操作提供了增加类、删除类、更换类、修改类名、浏览类。
图幅操作功能---提供了记录输入、显示、修改、删除等功能,每个记录(也称一个图幅)包括标识符、控制点及其所代表的图元的图形文件,用户根据需要可随时调用、存取、显示、查询任一图幅。
信息查询功能---系统提供了经纬查询、日期查询、标识查询和条件查询功能,用户根据需要可随时选择任何一种方式进行操作。图幅检索提供了空间条件检索、库类检索、图形属性检索以及综合条件检索;用户利用这些功能可将所需要的图形及属性数据从图库中提取出来。
图幅剪取功能---提供了输入剪取框、读入剪取框和临时构造剪取框三种方式,每种方式都可以任意设置剪取框,系统自动剪取框内的各幅图件,并生成新的图件。
图幅配准功能---提供了图幅变换功能,可随时对装入的图幅进行平移变换、比例变换、旋转变换和控制点变换,以满足用户的需求。
1.2 VC++开发语言
Visual C++作为一种程序设计语言,它同时也是一个集成开发工具,提供了软件代码自动生成和可视化的资源编辑功能。在使用Visual C++开发应用程序的过程中,系统为我们生成了大量的各种类型的文件。
扩展名为dsw的文件类型,这种类型的文件在VC中是级别最高的,称为Workspace文件。在VC中,应用程序是以Project的形式存在的,Project文件以.dsp扩展名,在Workspace文件中可以包含多个Project,由Workspace文件对它们进行统一的协调和管理。与dsw类型的Workspace文件相配合的一个重要的文件类型是以opt为扩展名的文件,这个文件中包含的是在Workspace文件中要用到的本地计算机的有关配置信息,所以这个文件不能在不同的计算机上共享,当我们打开一个Workspace文件时,如果系统找不到需要的opt类型文件,就会自动地创建一个与之配合的包含本地计算机信息的opt文件。
1.3 MapGIS开发类库
MapGIS软件提供了完备的二次开发函数库及类库,具有强大的二次开发功能。它具有开放性、多层次、全功能、高效率的特点,并支持VC++、VB、Delphi等集成开发环境。用户可在MapGIS平台上,开发面向各自领域的应用程序。目前,MapGIS二次开发库主要提供API函数、ActiveX控件、MFC类库等三种方式[3]。
MapGIS二次开发函数采用匈牙利命名法,即动宾结构命名法,并且所有函数都以下横线开始,以便和Windows函数以及其他语言函数明显区别开来,如_GetLin 表示取线实体。MapGIS动态函数库提供了从最基本数据单元的读取,保存,更新和维护到MapGIS地图库的建立和漫游,以及空间分析,图象处理等一系列功能,MapGIS应用程序可以根据需要在任何层次上进行开发。除了API函数外,MapGIS还为基于MFC(Microsft Foundation Class)的开发者提供多个可重用基类,将应用程序所需的常见基本功能作了封装,使用便利,改动灵活。
2总体结构图
基于MapGIS开发钻孔柱状图总体结构图如下所示:
图1 基于MapGIS开发钻孔柱状图总体结构图
3 模块开发
3.1 矿区操作
矿区操作可分为:新建矿区、追加矿区、删除矿区、清理系统库与系统数据导入等几大部分。程序要实现的具体功能如下:
(1)新建矿区
对于一个新的矿区,首先必须新建矿区。点击“矿区操作新建矿区”。其中矿区名称、矿区代码及基本分析数为必填项。上述信息输入完后,关闭“新建矿区”窗口,点击“浏览矿区”时,在列表中就可以看到了。
(2)追加矿区
追加矿区可以根据系统目前矿区代码编号情况,重新赋予备份矿区新的矿区代码。
(3)删除矿区
打开删除矿区界面,单击下一矿区到所选择矿区。点击删除按钮,即删除当前所选页面的矿区的全部数据(不会有删除提示)。
(4)清理系统库
置空数据库,数据库内的所有记录将全被删除。
(5)系统数据导入
打开矿区操作菜单,点击数据导入,进入系统数据导入子界面。其中矿区原代码为系统下矿区目录名,矿区新代码为本系统下的矿区代码。
矿区操作部分代码如下:
BOOL CMyPrjEditDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
m_Prj = _PRJCreateProject();
if(m_Prj)
{
SetPathName(m_Prj->FileName,FALSE);
}
else
return FALSE;
return TRUE;
}
void CMyPrjEditDoc::OnCloseDocument()
{
CDocument::OnCloseDocument();
}
3.2 钻孔地质编录
柱状图功能包括数据采集(钻孔地质编录)和柱状图绘制两部分,数据采集是利用EXCEL数据作为存储体。数据库数据录入必需在本程序里面打开,不然可能造成不可预料的错误。
钻孔地质编录部分代码如下:
CString ExcelFilePathName;
_Application objApp;
Workbooks objBooks;
_Workbook objBook;
Worksheets objSheets;
_Worksheet objSheet;
Range objRange,usedRange;
LPDISPATCH lpDisp;
COleVariant VOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
VARIANT ret;
CString cstr="";
if(!objApp.CreateDispatch("Excel.Application"))
{
AfxMessageBox("无法启动Excel服务器!");
return;
}
GetDlgItem(IDC_eName)->GetWindowText(ExcelFilePathName);
objBooks.AttachDispatch(objApp.GetWorkbooks());
3.3 花纹库建立
花纹库是需要数据库表中的图案号和MapGis图案库中的图案号对应的[4]。
花纹库部分代码如下:
if(cstr2.Compare(str8)==0)
{ index00[0]=row;index00[1]=2;
sa.GetElement(index00, &val00);
str3=(CString)val00.bstrVal;
break;
}
usedRange.ReleaseDispatch();
objRange.ReleaseDispatch();
objSheet.ReleaseDispatch();
objSheets.ReleaseDispatch();
objBook.ReleaseDispatch();
objBooks.ReleaseDispatch();
3.4 数据库逻辑检查
数据库逻辑检查主要是检查实体之间的空间对应与拓扑关系,实现的部分代码如下:
if(prj==NULL) return;
D_RECT mapRect;
double pagewid,pagehei,transx,transy;
_PRJGetRange(prj,&mapRect);
_PRJAutoSetPrnParamByScale(mapRect,XX,YY,0,0,&pagewid,&pagehei,&transx,&transy);
prj->Prj_Head.TranX = transx;
prj->Prj_Head.TranY = transy;
prj->Prj_Head.ScaleX =XX;
prj->Prj_Head.ScaleY =YY;
4 鉆孔柱状图生成
钻孔柱状图自动生成步骤如下:
(1)新建矿区。这个完成后会在“数据采集”菜单下的“矿区信息”查看。
(2)钻孔地质数据录入。
(3)填写剖面信息:需要填写剖面基本信息和剖面桩号信息。
(4)填写测井数据。
(5)编辑花纹库。
(6)数据逻辑检查。数据完成后需要数据逻辑检查。
(7)参数设置。
(8)钻孔柱状图自动生成。
5 小 结
本文利用了MapGIS软件二次开发类库结合VC++快速实现了图形与属性的互查等GIS功能,使得生成的图形更好地符合了编辑报告的需求,同时也为其它地
质矿产图件的自动生成做好了准备工作。
实践证明,程序运行稳定,生成图形美观协调。由于MapGIS在地质及相关行业得到了广泛的应用,所以该系统在地质勘探、金属矿产勘查与地质找矿等领域具有广阔的应用前景。
参考文献
[1] 张生伟.钻孔信息管理和柱状图成图方法的改进研究[D].武汉:中国地质大学,2009.
[2] 魏莲,卞州罡,卢建杰,等.基于MAPGIS的柱状图系统设计与实现[J]地球科学一中国地质大学学报。2006,31(5):743—746.
[3] 中地软件丛书编委会.MapGIS二次开发培训教程(c++版)[M].武汉:中地公司,2001.
[4] 杨荣新.露天采矿学(下册).第一版[M],徐州:中国矿业学院出版社,1986.