吴 玺,成建梅,常 敏
(中国地质大学环境学院,武汉 430074)
MAPGIS软件是武汉中地信息工程有限公司研制的具有自主版权的大型基础地理信息系统软件平台,是一个集当代最先进的图形、图像、地质、地理、遥感、测绘、人工智能、计算机科学于一体的大型智能软件,是集数字制图、数据库管理及空间分析为一体的空间信息系统,是进行现代化管理与决策的先进工具。MAPGIS软件已经被广泛应用于各领域。其中,在土地、地籍、电信、管网、规划等系统成为国家各部委向全国重点推广的高科技产品,成为我国各领域进行数字化建设的首选软件。
MAPGIS的二次开发方式主要有 API函数、MFC类库、组件开发、ActiveX控件四种方式,MAPGIS二次开发库封装在若干动态链接库(DLL文件)中。MAPGIS提供的二次开发方式采用的开发接口独立于开发工具(MFC类库开发方式除外),用户无需学习新的开发工具就可以进行 MAPGIS二次开发,MAPGIS有四种二次开发方式:
(l)API函数开发:MAPGIS的 API函数开发方式与 Windows的 API开发方式一样[1]。
(2)MFC类库开发:MAPGIS类库是基于 MFC库的开发方式。用面向对象的思想把一些 API功能进行封装,形成多个派生于 MFC中 CView类的可重用基类,用户利用基于MFC的 MAPGIS类库,可构建面向对象软件工程的 MAPGIS应用系统。类库开发是针对 C++的[1]。
(3)组件开发:它是基于 COM(组件对象模型)标准的一种程序组件,能够嵌入程序中运行完成一定功能,在软件开发中实现了功能重用。开发中只需简单调用功能接口就可以了。在使用可视化程度很高的开发工具 VC来开发 MAPGIS应用程序的过程中,最快速有效的方法就是使用 MAPGIS组件(控件)[1]。
(4)ActiveX控件是 MAPGIS完成组件化改造的成果之一,它使得二次开发更为快捷便利,代码的可复用性更高[1]。
本文选择了基于MFC类库的开发。MAPGIS二次开发类库是建立在 MAPGIS API之上的一个类库层,用于支持基于MFC类库的面向对象的 W indows程序设计。MAPGIS二次开发类库,提供了一套强有力的 C++类,它屏蔽了基于 MAPGIS API之上开发MAPGIS实用程序的许多复杂性,同时仍然允许有经验的程序员使用底层的MAPGIS API功能。
烟台市环境地质信息管理系统具有数据管理、数据查询、数据分析、报表分析、图库管理与编辑、灾害评价分析等功能的综合性信息系统,为今后预警预报系统的建立奠定基础。整个系统的体系结构图如图 1所示:
图1 信息管理系统结构框图
系统最重要的内容是数据的建设,数据库可分两个部分,图件资料和数据资料,本文采用两者分离的方式进行数据库建设。
Visual C++6.0提供了各种各样的数据库访问技术——ODBC API、MFC ODBC、DAO、OLE DB等 。这些技 术各有自己的特点,具有简单、灵活、访问速度快、可扩展性好的特点。
ODBC(Open Database Connectivity)[2]是客户应用程序访问关系数据库时提供的一个统一接口,对于不同的数据库,ODBC提供了一套统一的 API,使用应用程序可以应用所提供的 API来访问任何提供了 ODBC驱动程序的数据库,并且,ODBC已经成为一种标准,目前所有的关系数据库[3]都提供了 ODBC驱动程序,这使ODBC的应用非常广泛,基本上可用于所有的关系数据库。
由于 ODBC是一种底层的访问技术,因此,直接使用 ODBCAPI编写应用程序需要编写大量代码。Visual C++提供了MFC ODBC类,其中封装了 ODBC API,因此,使用 MFC来创建 ODBC的应用程序非常简便。
烟台市海岸带环境地质问题复杂,数据种类及数据量繁多,关系复杂。因此,研究选取了基于 MFC ODBC数据库访问技术来进行开发。该系统集所有的数据管理、查询、统计、分析报表功能于一体。采用该方法开发了管理系统中的基础数据管理模块,包括监测点普查信息管理子系统、监测点水位数据管理子系统、监测点水量数据管理子系统、监测点水温数据管理子系统、监测点水质数据管理子系统、野外调查点水质数据管理子系统和降雨量数据管理子系统。
系统开发技术流程如图 2所示。
图2 基于 ODBC数据库访问技术的数据管理系统开发技术路线图
MAPGIS提供的类库有基于 CView类派生的 CGisView类、CGisEditView和 CPrjEditView类。本研究选取采用继承CGisEditView类和CPrjEditView类的方法,这样可以同时使用CGisView、CGisEditView类及 VC++的 CView类所提供的所有功能。
其中继承 CGisEditView类开发了图形信息库管理界面模块程序 Prjmapsee.exe,继而开发了基础图形库管理系统(jctk.exe)、海水入侵危险性评价系统(hsrq.exe)、海岸线变迁危险性评价系统(axbq.exe)、地下水环境质量评价系统(h jzl.exe)、地下水系统脆弱性评价系统(dscr.exe)、地下水资源潜力评价系统(zyq l.exe)、地下水库建设可行性评价系统(sk js.exe)、海岸带地质环境质量综合评价系统(dzhj.exe)和海岸带建设功能用地适宜性评价系统(hajs.exe)。开发流程图如图 3所示。
图3 基于 MAPGIS类库开发的图库管理与编辑系统开发流程图
根据系统程序结构的设计,该系统主要有:显示工程图件、数据输入、数据查询、数据输出[4]和数据备份功能模块,从而实现对烟台市海岸带环境地质相关数据的有效管理。
在基础图库的菜单中,选择任意一个图件,将弹出显示工程图件的界面,界面的左侧为树视图,选中图件名称前的方框,界面的右侧将显示该图件,还可以对图件进行放大显示、缩小显示和复位显示。该界面还具有添加 MAPGIS点文件、区文件、线文件和工程文件 MPJ的功能,在界面的右下角可以读取光标所在位置的坐标。
在基础信息库管理系统中,初始化了监测点普查信息、监测点水位数据、监测点水温数据、监测点水量数据、监测点水质数据、野外调查点水质数据和降雨量数据,可以在相应的界面下输入需要更新的数据。
基础信息库管理系统具有分类查询功能,可以选择查询
类别、查询条件,可供选择的有“大于、大于等于、等于、小于等于、等于”。点击查询即可从数据库中查询得到记录。
点击“报表”,系统提供了与Excel接口功能,查询结果将以 Excel格式报表输出,供用户使用。报表将存在安装目录下的“YTDZ报表 ”目录下。
在数据备份的界面中,选择我们想要备份的图件或其它格式的资料,并选择希望保存的路径,即可完成重要数据备份,非常方便。
系统采用 MAPGIS67SDK+VC模式编程,使用 MAPGIS67SDK显示图件资料和管理相关信息,使用 VC完成界面设计及数据库显示。以下是本系统基本功能实现的介绍。
调用_AppendArea(short ai)函数,将要显示的工作区添加到 CGisView类的显示列表中,即可由 CGisView来自动完成图形的显示,代码如下:
shortCTryAttCtrlView::OpenLinFile()
{//打开线文件
m_Ai=_OpenLinArea(m_h Inst);//m_h Inst为打开的工作区实例
_LoadFile(m_Ai);
_AppendArea(m_Ai);
return 1;
}
放大功能:void_dsEnlargeMapDbs(HWND hWnd,DbsAI dbsAi);
缩小功能:void_dsDelargeMapDbs(HWND hWnd,DbsAI dbsAi);
复位显示:_RestoreWindow();装入点文件:LoadPoint();装入线文件:LoadLine();
装入区文件:LoadRegion();装入工程文件:LoadProject()。
系统的数据库通过 access的关系模型建立起来,VC将其连接并显示出来,代码如下:
CString VSjxxset::GetDefaultConnect()//连接数据库
{return_T("ODBC;DSN=y tdz");//ytdz是数据库的名称}
CString VSjxxset::GetDefaultSQL()
{return_T("[sw水温]");//sw水温是数据表的名称}
数据输入:m_time.GetW indowText(str);m_pset.m_time=str;
数据删除:
if(m_list.GetItemState(i,LVIS_SELECTED)==LVIS_SELECTED)
{
str.Format(_T("确实要删除第%d条记录?"),i+1);
if(AfxMessageBox(str,MB_YESNO,0)==IDYES)
{
m_list.GetItem Text(i,0,ctemp,sizeof(char[20]));
m_list.DeleteItem(i);
VSjxxsetm_pset;
UpdateData(TRUE);
m_pset.Open(CRecordset::snapshot,NULL,CRecordset::none);
m_pset.m_strFilter.Format("ID=%d",atoi(ctemp));
m_pset.Requery();
m_pset.Delete();
if(m_pset.IsOpen())
{
m_pset.Close();
}}}
数据查询:m_pSet->Close();
m_strfiter="...";//定义查询条件
m_pSet->Open();
m_pSet->Requery();//来更新记录集数据输出:CSpreadSheet SS(szCurrentDir[0],"TestSheet");//新建 Excel文件名及路径,TestSheet为内部表名
samp leArray.RemoveAll();
samp leArray.Add("ID");//加入标题
samp leArray.Add(m_list.GetItem Text(i,j));//加入数据
烟台市海岸带环境地质问题评价系统将烟台市主要的环境地质问题的相关资料数据整理在一起,形成了规范的数据资料列表,解决了实际工作中,数据资料格式不统一和纸质图不易保存的问题,对当地相关部门了解海岸带的具体情况提供了很大的方便。
[1]中地软件公司.MAPGIS二次开发培训教程.2001.10.
[2]施伯乐,顾宁,刘国华 译.数据库处理——基础、设计与实现(第七版)[M].北京:电子工业出版社,2001.3.
[3]张强.巧学巧用 Access 2003数据库应用开发实例[M].北京:电子工业出版社,2007.1.
[4]杨志,郭福生,刘林清.基于 MAPGIS的江西省丹霞地貌信息系统设计与开发[J].测绘与空间地理信息,2006.2.