目前市场上对以Web上的3DGIS需求越来越强烈,但是ArcGIS的产品体系结构中并没有相关的技术产品。但是ArcGIS有强大空间分析能力,这是其他产品所不具备的优势。
基于这样的需求考虑,我在ArcGIS EngineSDK的基础上,封装了Globe控件,把Glboe控件打包成ActiveX控件,可以基本上解决在IE下浏览3DGIS的需求。
大家知道,在ArcGIS产品体系当中,曾经有一款ArcGIS Explorer 500开发过相关的产品,可以基于IE上做相关的3DGIS开发,但是由于某种原因,ESRI并没有推出过后续的产品。现在推出的ArcGIS Explorer 1500只可以做Add-in的开发定制。
综合以上的情况,在满足功能和浏览效果的基础上,我选择了使用ArcGIS Engine打包ActiveX的方式。下面将通过一个简单的例子,向大家介绍一下这种解决方式的实现步骤。
实现步骤
开发环境
操作系统:Windows XP SP3
软件环境:ArcGISDeskTop 9.3.1、ArcGIS Engine 9.3 Developer Kit
开发工具:Visual Stadio2008
Web容器:IIS 6.0
功能实现
1) 首先在Visual Stadio中创建一个Windows控件工程。
2) 在UserControl1.cs窗体中添加相关控件(GlobeControl、LicenceControl)
3) 其实到了上面的步骤,一个简单的用户控件就完成了,那么要想把这个控件嵌入到IE中,就需要一些相关ActiveX的操作了。下面我们需要在工程的代码文件引用using System.Runtime.InteropServices。使用Guid生成功能生成一个Guid,或者通过代码生成。
[Guid("0521f488-96c3-4dd4-b9ff-ccc1fc3c13a7")]
那么这个Guid就是我们ArcGlobeControl的Guid,大家调试的时候无需更改。
我们在工程下的AssemblyInfo.cs文件中同样引用
using System.Runtime.InteropServices
在文件中添加
[assembly: AllowPartiallyTrustedCallers()]
4) 实现IobjectSafety接口。
这个步骤就比较重要,如果不实现这个接口的话,IE不能把我们制造的ActiveX控件默认为是安全的控件,无法再IE上正常运行。下面这段代码是网上找到的。大家可以借鉴一下。(由于空间原因,这段代码不在帖子里贴出来了,大家可以在网上找到)
5) 在程序中调用IobjectSafety接口。
publicpartialclassUserControl1 : UserControl, IobjectSafety
{
……
}
在ArcGlobeControl项目属性中,在生成选项卡上把“为COM互操作注册”选上。
6) 以上工作完成后,我们就可以先测试一下我们的ActiveX控件在本机是否可以运行。(注意,该步骤请使用纯HTML页面)。
<objectid=”demoActiveX”
classid=”clsid:0521f488-96c3-4dd4-b9ff-ccc1fc3c13a7″codebase=”setup.exe” Width=”500″Height=”400″>
</object>