论文部分内容阅读
摘要:近年来,海洋石油建成了服务石油专业的公共GIS平台,并且在多个石油专业系统中获得推广使用。本文主要介绍了海洋石油第二代XGIS的主要架构、组件式开发技术及系统中使用到的接口技术。设计并实现了GIS交互和绘制功能接口的开发工作。
关键词:GIS地理信息系统;组件式开发;接口;ActiveX;DLL技术
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)06-0246-02
近几年来,组件式GIS发展为GIS的前沿技术,并逐渐成为主流趋势。目前,已经商业化的组件式GIS平台有MapObjects、ArcObjects、GeoMedia等[1]。GIS组件之间以及GIS组件与其他组件之间可以通过标准的通信接口实现交互,这种交互甚至可以跨计算机实现。总院的GIS平台就是基于此架构自主研发了组件式XGIS系统。
1 GIS系统的基本框架结构
XGIS采用的是MVC(Model View Controller)系统设计模式在XGIS中体现为三个具体的层次组成:可视化组件组、功能组件组和数据访问组件组。对用户来说,功能组件组是可以定制的[2]。
1.1 XGIS系统组成
图1是XGIS的系统架构,包括客户端和服务器端两部分。客户端能过浏览器对XGIS进行访问。在服务器端,底层通过数据库做数据支持,之上通过WebSvrLock和WebSvrBin(提供WebService服务)来验证用户相关信息和提供相应的下载服务。
图1 XGIS整体架构图
核心程序是XGIS.OCX主程序,负责整个GIS程序DLL组件的加载工作等。
1.2主要技术
为了减少网络中的传输负载,采用了动态加载技术,软件核心模块采用ActiveX形式,使得在互联网环境下实现单机和C/S应用的功能成为可能。在ActiveX模块内部,充分利用各种网络通讯协议(如FTP、HTTP等),与服务器端的Web Service服务程序一起,实现地震等数据的高速传输,利用c 语言的高效性实现图形的绘制[3]。
功能模块采用了静态连接库(LIB)和动态链接(DLL)相结合的方式,主要的功能使用LIB的方式,扩展功能采用动态链接(DLL)的方式,前台模块与后台数据的交换采用大数据二进制文件格式进行传输,并且兼容了jason、xml等形式的数据的交换格式,便于与其他系统扩展结合。
2系统接口研究
在XGIS系统中主要使用了四种接口方式。
(1)SOAP服务挂接方式
将SOAP服务引入到GIS中,以GIS为平台,以空间图元为对象,几乎可以遍历整个的勘探、开发等数据库系统。在GIS上的某个图元下按下鼠标右键,则系统在“弹出菜单”的顶部列出所有注册的SOAP服务。
(2)script脚本语言接口
脚本语言是一种宿主语言,本GIS系统也内嵌了一种自行开发的脚本语言,主要是读取一些不规则的、驻留于数据库之外的数据到GIS图件上。
(3)VC 的MIDL 接口
基于MIDL语言对XGIS 二次开发接口进行定义。通过此接口,可以在其他系统如网页、C#的窗口程序中对GIS进行调用和传参。
(4)DLL接口
Dll接口方式是系统最常采用的方式,动态调用方式的特点是完全由编程者用API函数加载和卸载DLL,程序员可以决定DLL文件何时加载或不加载,在运行时决定加载哪个DLL文件。需要函数指针和WIN32 API函数LoadLibrary、GetProcAddress装载。此种接口具有最大的灵活性和可扩展性,同时对编程能力的要求也较高。
3接口应用案例
本文编写了交互输入定位点和交互输入选择区域两种功能组件,采用动态调试的方式进行灵活的加载与释放,也就是第四种DLL接口的方式来进行编程。下面的例子为交互输入定位点的DLL对外接口函数为
RETCODE __declspec(dllexport) InterLLXY(void *model, TFunPtr pInterface );
此函数声明负责告诉主程序调入此交互输入点位点功能组件的函数入口,在函数中作相应的声明就可以调用此组件功能。
以下为InterLLXY函数主要代码展示:
RETCODE __declspec(dllexport) InterLLXY(void *model, TFunPtr pInterface )
{ AFX_MANAGE_STATE(AfxGetStaticModuleState());
//通过CXGISCtrl指针来获得程序的相关对象
ctrl = (CXGISCtrl *)model;
/*中间省略一些运算函数*/
ctrl->pdrawview->isTrackPopupMenu=0;
return 1;
}//函数结束
下面函数为销毁函数的声明:
RETCODE __declspec(dllexport) DestroyInterLLXY(void *model );
函数的实现如下所示:
RETCODE __declspec(dllexport) DestroyInterLLXY(void *model )
{AFX_MANAGE_STATE(AfxGetStaticModuleState());
if (interllxy )
{/*此处省略运算代码*/}
return 1;
}
XGIS的运行界面如图2所示
图2 交互输入定位点
从图2中可以看到,本文编写并加载DLL组件(交互输入定位点)、通过点击鼠标右键把这两个功能挂载到交互菜单下。在输入相应的点的坐标后,会出现图3显示的界面,系统通过计算点的坐标自动定位点,并通过相应的五角形将其标记出来。
图3 定位后显示
4结束语
XGIS的组件式开发,使得运行与维护效率大大提高,多功能的接口调用方式使GIS在专业应用方面更为方便,功能扩展更强大。
参考文献:
[1] 朱大明,徐景中.基于組件式GIS的旅游景点查询系统开发研究[J].昆明理工大学学报:理工版, 2007, 32(5):1-4.
[2] 张云飞,张钦,杨建钦,等.基于空间对象的公共GIS模型及其在海洋石油信息化中的应用[J].中国海上油气,2009,21(3):211-214.
[3] 张爱华.基于SuperMap Objects组件式开发的GIS空间网络分析功能实现方法[J]. 科技信息, 2013(36).
关键词:GIS地理信息系统;组件式开发;接口;ActiveX;DLL技术
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)06-0246-02
近几年来,组件式GIS发展为GIS的前沿技术,并逐渐成为主流趋势。目前,已经商业化的组件式GIS平台有MapObjects、ArcObjects、GeoMedia等[1]。GIS组件之间以及GIS组件与其他组件之间可以通过标准的通信接口实现交互,这种交互甚至可以跨计算机实现。总院的GIS平台就是基于此架构自主研发了组件式XGIS系统。
1 GIS系统的基本框架结构
XGIS采用的是MVC(Model View Controller)系统设计模式在XGIS中体现为三个具体的层次组成:可视化组件组、功能组件组和数据访问组件组。对用户来说,功能组件组是可以定制的[2]。
1.1 XGIS系统组成
图1是XGIS的系统架构,包括客户端和服务器端两部分。客户端能过浏览器对XGIS进行访问。在服务器端,底层通过数据库做数据支持,之上通过WebSvrLock和WebSvrBin(提供WebService服务)来验证用户相关信息和提供相应的下载服务。
图1 XGIS整体架构图
核心程序是XGIS.OCX主程序,负责整个GIS程序DLL组件的加载工作等。
1.2主要技术
为了减少网络中的传输负载,采用了动态加载技术,软件核心模块采用ActiveX形式,使得在互联网环境下实现单机和C/S应用的功能成为可能。在ActiveX模块内部,充分利用各种网络通讯协议(如FTP、HTTP等),与服务器端的Web Service服务程序一起,实现地震等数据的高速传输,利用c 语言的高效性实现图形的绘制[3]。
功能模块采用了静态连接库(LIB)和动态链接(DLL)相结合的方式,主要的功能使用LIB的方式,扩展功能采用动态链接(DLL)的方式,前台模块与后台数据的交换采用大数据二进制文件格式进行传输,并且兼容了jason、xml等形式的数据的交换格式,便于与其他系统扩展结合。
2系统接口研究
在XGIS系统中主要使用了四种接口方式。
(1)SOAP服务挂接方式
将SOAP服务引入到GIS中,以GIS为平台,以空间图元为对象,几乎可以遍历整个的勘探、开发等数据库系统。在GIS上的某个图元下按下鼠标右键,则系统在“弹出菜单”的顶部列出所有注册的SOAP服务。
(2)script脚本语言接口
脚本语言是一种宿主语言,本GIS系统也内嵌了一种自行开发的脚本语言,主要是读取一些不规则的、驻留于数据库之外的数据到GIS图件上。
(3)VC 的MIDL 接口
基于MIDL语言对XGIS 二次开发接口进行定义。通过此接口,可以在其他系统如网页、C#的窗口程序中对GIS进行调用和传参。
(4)DLL接口
Dll接口方式是系统最常采用的方式,动态调用方式的特点是完全由编程者用API函数加载和卸载DLL,程序员可以决定DLL文件何时加载或不加载,在运行时决定加载哪个DLL文件。需要函数指针和WIN32 API函数LoadLibrary、GetProcAddress装载。此种接口具有最大的灵活性和可扩展性,同时对编程能力的要求也较高。
3接口应用案例
本文编写了交互输入定位点和交互输入选择区域两种功能组件,采用动态调试的方式进行灵活的加载与释放,也就是第四种DLL接口的方式来进行编程。下面的例子为交互输入定位点的DLL对外接口函数为
RETCODE __declspec(dllexport) InterLLXY(void *model, TFunPtr pInterface );
此函数声明负责告诉主程序调入此交互输入点位点功能组件的函数入口,在函数中作相应的声明就可以调用此组件功能。
以下为InterLLXY函数主要代码展示:
RETCODE __declspec(dllexport) InterLLXY(void *model, TFunPtr pInterface )
{ AFX_MANAGE_STATE(AfxGetStaticModuleState());
//通过CXGISCtrl指针来获得程序的相关对象
ctrl = (CXGISCtrl *)model;
/*中间省略一些运算函数*/
ctrl->pdrawview->isTrackPopupMenu=0;
return 1;
}//函数结束
下面函数为销毁函数的声明:
RETCODE __declspec(dllexport) DestroyInterLLXY(void *model );
函数的实现如下所示:
RETCODE __declspec(dllexport) DestroyInterLLXY(void *model )
{AFX_MANAGE_STATE(AfxGetStaticModuleState());
if (interllxy )
{/*此处省略运算代码*/}
return 1;
}
XGIS的运行界面如图2所示
图2 交互输入定位点
从图2中可以看到,本文编写并加载DLL组件(交互输入定位点)、通过点击鼠标右键把这两个功能挂载到交互菜单下。在输入相应的点的坐标后,会出现图3显示的界面,系统通过计算点的坐标自动定位点,并通过相应的五角形将其标记出来。
图3 定位后显示
4结束语
XGIS的组件式开发,使得运行与维护效率大大提高,多功能的接口调用方式使GIS在专业应用方面更为方便,功能扩展更强大。
参考文献:
[1] 朱大明,徐景中.基于組件式GIS的旅游景点查询系统开发研究[J].昆明理工大学学报:理工版, 2007, 32(5):1-4.
[2] 张云飞,张钦,杨建钦,等.基于空间对象的公共GIS模型及其在海洋石油信息化中的应用[J].中国海上油气,2009,21(3):211-214.
[3] 张爱华.基于SuperMap Objects组件式开发的GIS空间网络分析功能实现方法[J]. 科技信息, 2013(36).