ITPub博客

利用VC控制GE -----Google Earth COM API学习笔记

原创 作者:yuxin850412 时间:2007-05-05 09:48:31 0 删除 编辑

利用VC控制GE

-----Google Earth COM API学习笔记

1、 如何将Google Earth COM API 导入到VS2003项目中?

添加类---〉类型:MFC—〉类型库中的MFC---〉选中“文件”然后到安装GoogleEarth的目录下,找到googleearth.exe文件

2、 如何在VC中自动调用GE

1) 初始化COM

2) 在头文件中初始化一个IApplicationGE 对象:m_geApplication(控制变量,可以用来控制GE)。

3) 在实现文件中定义一个全局变量:

CLSID_ApplicationGE= {0x8097D7E9,0xDB9E,0x4AEF,{0x9B,0x28,0x61,0xD8,0x2A,0x1D,0xF7,0x84}};

CLSID_ApplicationGEGoogle Earth COM API中定义的一个GUID

4) OnInitDialog()中加入以下代码:
m_geApplication.CreateDispatch(CLSID_ApplicationGE);
现在就自动运行了GE

至此,GE运行起来。

3、 利用VCGoogle Earth中载入KML文件

利用HRESULT IApplicationGE::OpenKmlFile[in] BSTR filename,[in] suppressMessages;

按道理也可以利用HRESULT IApplicationGE::LoadKmlData[in] BSTR * kmlData这个函数从string中装载KML

不知道这两个到底哪个更好,感觉应该都差不多。

注意:该方法也可以打开KMZ文件

4、 Google Earth的启动过程探究

1) 启动过程:Performing login -----Initialization---finish server login---loading my places kml,including enabled overlays

2) GE读取数据过程:

5、 利用VCGoogle Earth地标写入KML文件

[@more@]

利用VC控制GE

-----Google Earth COM API学习笔记

1、 如何将Google Earth COM API 导入到VS2003项目中?

添加类---〉类型:MFC—〉类型库中的MFC---〉选中“文件”然后到安装GoogleEarth的目录下,找到googleearth.exe文件,点击打开按键---〉选择要加载的接口。默认情况下,每个接口对应一个类和一个头文件。如果想把这些类的声明全部放在一个头文件中,可以在“文件”框输入该头文件名。

VS2003在这里存在很大的不完善之处:一一次只能添加一个类到该头文件中,二该头文件名不能通过浏览选中输入,一定要手动输入才行。)

2、 如何在VC中自动调用GE

1) 初始化COM

我们得调用一下::CoInitialize(NULL);初始化一下COM库了,这个函数可以在ControlGe.cpp文件中的InitInstance()函数里面调用。

2) 在头文件中初始化一个IApplicationGE 对象:m_geApplication(控制变量,可以用来控制GE)。

顺便说一下,IApplicationGEGoogle COM API最主要的一个接口

3) 在实现文件中定义一个全局变量:

CLSID_ApplicationGE= {0x8097D7E9,0xDB9E,0x4AEF,{0x9B,0x28,0x61,0xD8,0x2A,0x1D,0xF7,0x84}};

CLSID_ApplicationGEGoogle Earth COM API中定义的一个GUID

4) OnInitDialog()中加入以下代码:
m_geApplication.CreateDispatch(CLSID_ApplicationGE);
现在就自动运行了GE

该步详细执行过程如下:

m_geApplication.CreateDispatch(CLSID_ApplicationGE)-----oledip2.cpp中:COleDispatchDriver::CreateDispatch(REFCLSID clsid, COleException* pError)---(调用) CoCreateInstance(clsid, NULL, CLSCTX_ALL | CLSCTX_REMOTE_SERVER,IID_IUnknown,

(LPLP)&lpUnknown)

The CoCreateInstance function initializes the ActiveX or OLE object's class factory

至此,GE运行起来。

3、 利用VCGoogle Earth中载入KML文件

利用HRESULT IApplicationGE::OpenKmlFile[in] BSTR filename,[in] suppressMessages;

按道理也可以利用HRESULT IApplicationGE::LoadKmlData[in] BSTR * kmlData这个函数从string中装载KML

不知道这两个到底哪个更好,感觉应该都差不多。

注意:该方法也可以打开KMZ文件

4、 Google Earth的启动过程探究

1) 启动过程:Performing login -----Initialization---finish server login---loading my places kml,including enabled overlays

2) GE读取数据过程:

默认情况下,GE 启动后到My Places folder读数据,然后再读取要打开的文件中的数据。利用CreateDispatch (CLSID_ApplicationGE)启动GEGE要先读取My Places folder的数据。

3) 利用Google Earth COM API自己写代码实现启动GE

根据API说明应该是:

login():Initializes the application, in which case IsInitialized becomes TRUE

IsInitialized():判断是否启动,如果启动就可以按照计划进行其他操作

但实际上,login()不能实现初始化应用程序的工作。不知道是导入的类型库有问题还是API上的说明有误。

5、 利用VCGoogle Earth地标写入KML文件

API不提供写入KML文件的方法,得要自己写。

下一篇: 设计模式
请登录后发表评论 登录
全部评论
  • 博文量
    8
  • 访问量
    380662