GIS标注算法服务化应用研究
2019-09-24谢祎杨建钦岳翔呼和
谢祎 杨建钦 岳翔 呼和
摘要:针对海洋石油GIS平台的文字标准功能,本文研究了通过服务器实现复杂算法服务的技术与方法。着重阐述了纯WEB前台调用后台算法服务的步骤,以及算法的COM封装、C#服务程序和COM算法模块通讯等关键技术,并提出了WEB前端结合后台算法服务复用原有资产以及高效的优势。最后通过项目实践验证了这种复杂算法后台服务化方案在中海油GIS平台中的应用效果及意义。
关键词:海洋石油;GIS平台;标注算法;COM技术;后台服务化应用
中图分类号:TP391 文献标识码:A
文章编号:1009-3044(2019)21-0024-02
开放科学(资源服务)标识码(OSID):
“数字海洋”已成为海洋石油行业信息化建设的发展方向和趋势。在对海洋石油资源的开发中,GIS平台作为一种界面友好直观的可视化手段,在海洋石油多系统、多层次并错综复杂的信息资源管理、分析和应用中发挥着重要作用。企业原有的GIS服务平台前端是基于C++编写的ActiveX控件,只能应用于Windows系统,不能应用于移动设备,且安装过程麻烦,限制了平台的应用。最近几年基于纯Web语言开发的GIS前端平台以其免安装,可运行于各版本浏览器,跨操作系统跨平台、移动设备友好等特点得到了广泛的应用。GIS平台也基于纯WEB前端技术进行了平台升级,相应也产了一些问题。首先,原有的算法大多用C++编写,算法移植需要大量的人力工时;其次,前端基于Javascript的代码在运行复杂算法时效率低、运算速度慢,达不到使用要求。怎样复用已有的算法资产且兼顾平台性能是GIS升级中必须要考虑的问题。
本文介绍了将原有的C++文字标注算法封装成COM,并用后台服务调用的方式,在升级后的GIS平台快速实现文字标注算功能的实用方案,并详细介绍了具体实现的步骤和其中的技术要点。
1 升级后GIS平台文字标注功能的实现研究
1.1 建设目标及思路
目标是将原有GIS平台的多边形文字标注功能移植到升级后基于纯Web语言的GIS平台。思路是将原有C++文字标注算法封装成后台服务模块,通过服务调用方式给各前台客户端提供算法服务。
1.2 关键技术及方法
1.2.1 升级后的基于服务GIS平台技术架构
升级后的基于服务的GIS平台架构如上图所示,移动设备、PC等客户端通过浏览器加载GIS前台核心框架代码,GIS核心框架再根据具体需求加载空间数据插件(负责后台数据库数据读取)、空间分析算法插件(坐标计算等算法)以及用户定制的其他功能插件,GIS核心框架负责用户交互、地图绘制、空间对象管理等核心功能。调用后台算法则由算法插件发起,C#网站服务程序负责接收调用参数,并调用本地COM算法,最终将结果返回前端GIS平台。
1.2.2 文字路径标注算法的封装
文字路径算法是根据多边形坐标,计算标注文字位置的算法。在GIS系统中经常应用于各种面类型空间对象(如盆地、油田、矿区、保护区)的名称标注。为了方便C#服务端程序调用,首先要将原有的C++代码算法封装成COM组件,以下是封装成COM过程中要注意的几个技术要点:
1)建立COM工程时,项目的通用框架和引用要使用和C#服务程序相同的.Net Framework版本,否则会导致C#服务程序加载COM时失败。
2)定义接口参数时,传入的内存指针地址用LONG类型,传出的内存指针地址用LONG *类型,目的是方便使用全局堆地址进行数据交互。
3)在接收数据和返回结果时,要在全局堆分配内存,保证数 据在托管和非托管代码间 传递时不会出错,代码示例如下:
1.2.3 服务器端C#程序和COM程序的通讯
在调用COM算法时,C#程序和C++ COM组件的通讯是其中难点,因为要涉及托管代码和非托管代码间的参数传递,以下是调用步骤和要注意的技术要点。
步骤 :
1)将生成的COM控件在服务器端进行注册。
2)在C#服务程序工程的引用中添加注册好的COM控件,添加引用后,会自动生成和C++ COM的非托管代码和C#托管代码进行交互的Interop类,通过这个类C#就可以调用COM的接口。
3)调用时首先new 一个第2步生成的Interop类,然后直接调用定义好的接口,如下所示:
技术要点:
1) 托管和非托管代码的通讯最容易出錯的地方是内存指针的传递。在C#托管代码向C++ COM非托管代码传递内存指针时,注意要在全局堆分配内存。示例如下:
2)传参前,要将托管代码本地数据拷贝到分配好的全局堆内存中,示例如下:
3)对于返回结果,则要执行相反的步骤,要将全局堆的数据,考入托管代码本地内存。示例如下:
4)在调用结束后,不要忘记释放全局堆内存,示例如下:
1.2.4 前端GIS调用后台算法服务
浏览器端通过http请求,将要计算文字标注路径的多边形坐标和其它参数以JSON格式发给服务器端,计算结束后,前端的GIS平台代码使用AJAX异步通讯技术接收服务器传回的JSON格式的计算结果,并负责解析成文字路径坐标,然后根据经纬度坐标将文字标准在地图上。
2 应用效果
图2显示的是升级后的GIS平台界面,底图是海洋石油GIS遥感底图,图中蓝色的面对象是加载的渤海海域的盆地,盆地的名称则是调用后台文字路径标注算法服务实现的文字标注,在实际使用中速度快、无延迟,完全满足了升级后GIS平台需求。
3 应用意义
通过以上描述的方法步骤,我们在很短的时间内为升级后的GIS平台实现了文字路径标注功能。其重要意义在于以下两点:
1)为企业传统软件升级改造提供了一种重复利用原有算法,节约成本,减少开发周期的切实可行的方案。
2)将WEB技术前端跨平台、跨浏览器、移动端友好等优点和后台C++程序计算速度快、效率高的优点很好地结合在一起。为将来给升级后GIS平台添加其他所需的复杂算法,如投影算法、空间分析算法等功能提供了一套成熟的解决方案。
参考文献:
[1] 张云飞,张钦,杨建钦,欧阳侃夫. 基于空间对象的公共GIS模型及其在海洋石油信息化中的应用[J].中国海上油气,2009 21(3): 211-214.
[2] 黄际洲,崔晓源. 精通.NET互操作:P/Invoke、C++ Interop和 COM Interop[M].北京:人民邮电出版社,ISBN:978-7-20434-9 .
【通联编辑:梁书】