利用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_ApplicationGE
是Google Earth COM API中定义的一个GUID。
4) 在OnInitDialog()中加入以下代码:
m_geApplication.CreateDispatch(CLSID_ApplicationGE);现在就自动运行了GE。
至此,GE运行起来。
3、 利用VC在Google 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、 利用VC将Google 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)。
顺便说一下,IApplicationGE是Google COM API最主要的一个接口。
3) 在实现文件中定义一个全局变量:
CLSID_ApplicationGE= {0x8097D7E9,0xDB9E,0x4AEF,{0x9B,0x28,0x61,0xD8,0x2A,0x1D,0xF7,0x84}};
CLSID_ApplicationGE
是Google 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、 利用VC在Google 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)启动GE,GE要先读取My Places folder的数据。
3) 利用Google Earth COM API自己写代码实现启动GE
根据API说明应该是:
login():Initializes the application, in which case IsInitialized becomes TRUE
;
IsInitialized():判断是否启动,如果启动就可以按照计划进行其他操作
但实际上,login()不能实现初始化应用程序的工作。不知道是导入的类型库有问题还是API上的说明有误。
5、 利用VC将Google Earth地标写入KML文件
API不提供写入KML文件的方法,得要自己写。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9705196/viewspace-913369/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9705196/viewspace-913369/