大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
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就可以了
转自:hi.baidu.com/sjk2046/blog/item/33fb1e24e5e92734c89559fa.html
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/170046.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...