天天看点

GOOGLE

Google公司已经将Google COM API开放,这样我们就可以通过开放的API来对GoogleEarth进行操作了,比如控制当前视图的高度、中心经纬度,保存当前图片等等。下面是Google COM API的网址:

http://earth.google.com/comapi/

那么,VC程序员如何使用这些API来控制GoogleEarth呢?下面我们编写一个简单的程序来说明对Google COM API的使用。

源代码下载 http://bbs.godeyes.cn/upload/2007/03/29/113327.rar

首先用VC建立一个基于Dialog的工程(这个不用教了吧?),工程名为ControlGe,工程建好后,下面就是把Google提供的类添加到工程里边来。

Ctrl+W,打开类向导页面,点击“Add Class”按键,选择“From a type library”,然后到安装GoogleEarth的目录下,找到googleearth.exe文件,点击“打开”按键。

这时会弹出一个框来确认产生Google的类,直接点击“OK”键,这是会生成两个文件加入的工程中:googleearth.h和googleearth.cpp,里面就是我们想要的类了。

GoogleEarth的类已经生成了,那我们如何来用它们呢?各位看客不用着急,我们一步步来。

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

然后呢,我们再在ControlGeDlg.h中定义一个类成员变量:

IApplicationGE m_geApplication;

顺便说一下,IApplicationGE可是Google COM API最主要的一个接口了,从它提供的操作数量就可以看得出来。

好了,离成功不远了,控制的变量也定义了,下面就开始用它来控制GE吧。

那么我们如何将刚定义的变量取得对GE的控制权呢?费话少说,首先在ControlGeDlg.cpp文件中定义一个变量:

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

然后在OnInitDialog()中加入以下代码:

m_geApplication.CreateDispatch(CLSID_ApplicationGE);

呵呵,现在GE就归你操控了!

我们试着做个简单的操作吧,添加一个按键,然后添加按键的点击处理函数,在函数中加入以下代码:

CString strFileName;

static char BASED_CODE szFilter[] = "jpg Files (*.jpg)|All Files (*.*)|*.*||";

CFileDialog dlgFile(FALSE, "jpg", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, this);

if (dlgFile.DoModal() == IDOK)

{

CWaitCursor wait;

strFileName = dlgFile.GetPathName();

m_geApplication.SaveScreenShot(strFileName, 100);

}

试试看,这是将当前GE的地图给保存成一个jpg格式的图片,只可惜只能保存成黑白图片,google还是给自己留了一手的。

可能上面的代码运行会有些问题,也许是你的GE版本太低了,也许是你的Google COM未注册,注册一下就可以了,Google对注册的说明:

If, for some reason, the Google Earth COM API needs to be registered again, you can execute GoogleEarth.exe with "/RegServer" as a command line argument.

For instance, assuming GoogleEarth.exe is located in C:\Program Files\Google\Google Earth, the following command line would register Google Earth's COM API:

"C:\Program Files\Google\Google Earth\googleearth.exe" /RegServer

To unregister Google Earth's COM API, execute the following command:

"C:\Program Files\Google\Google Earth\googleearth.exe" /UnregServer

好了,我们下面就可以对照Google COM API的文档来试一试对GE的控制操作了。下面我再来演示一下如何把视图切换到指定地方,添加如下代码:

ICameraInfoGE geCamera;

geCamera.AttachDispatch(m_geApplication.GetCamera(TRUE));

geCamera.SetRange(800);

geCamera.SetFocusPointLongitude(113.972522);

geCamera.SetFocusPointLatitude(22.561294);

m_geApplication.SetCamera(geCamera, 1.5);

执行以上代码后,GE就会将视图切换到。。。嘿嘿,到俺家了。。。

【扩展】因为要做GoogleEarth的上位机,所以找了些相关的资料,有了上面的资料,就十分方便了

俺就添加了一个按钮,将生成的kml文件直接导入GoogleEarth打开

m_geApplication.OpenKmlFile("生成的Kml的路径",0);

如果要增加其他功能,就在http://earth.google.com/comapi/查相关API就可以了

继续阅读