/article/58.htm这里的Google Earth API(本文的Google Earth API和最新Google Earth API概念不同,前者是windows 程序以COM接口开发,目前的Google Earth API是通过Google Earth 插件在浏览器理开发的API 函数,本文主要是讲windows 程序以COM接口开发)不同于GoogleMAP API:大家可能对于GoogleMAP API有一些印象了而且网上对于GoogleMAP API的应用也有很多比如/那么什么是GoogleEarth API呢?GoogleEarth API能作什么呢?下面我就结合我编的一些东西讲讲GoogleEarth APIGoogle Earth API Keyhole 1.0 Type Library当你要使用GoogleEarth API时首先要在工程里引用他,以VB为例,在“工程”菜单中选择“引用”,如果你已经安装了GoogleEarth,那么引用栏里会有“Keyhole 1.0 Type Library ”而它是定位于GoogleEarth 的主程序的。
引用完毕后,打开对象浏览器,你就可以看到GoogleEarth API的类和函数及属性了!!GoogleEarth API有4个类,每个类下面有多个函数及属性下面将我常用的函数的说明写到下面:Class KHFeatureProperty hasView As Long 只读暂时还不知道什么意思,没用过,哪位高手能给个解释Property visibility As Long 地标的可视选项Class KHInterfaceProperty autopilotSpeed As DoubleGE的自动飞行速度Function currentView(terrain As Long) As KHViewInfo GE的当前视图Property currentViewExtents As KHViewExtents 只读Function getFeatureByName(name As String) As KHFeature Function getPointOnTerrainFromScreenCoords(screen_x As Double,screen_y As Double) As Double()Sub LoadKml(kmlData As String) 导入KML字符串,不支持中文Sub OpenFile(fileName As String) 打开地标文件Sub QuitApplication() 退出程序Sub SaveScreenShot(fileName As String, quality AsLong)保存截图Sub setFeatureView(feature As KHFeature, speed As Double) Sub SetRenderWindowSize(width As Long, height As Long) Sub setView(view As KHViewInfo, terrain As Long, speed As Double)用KHViewInfo设置视角范围Sub setViewParams(lat As Double, lon As Double, range As Double, _tilt As Double, azimuth As Double, terrain As Long,speed As Double)用数值设置视角范围Property streamingProgressPercentage As Long 只读数据传输进度百分比Class KHViewExtentsproperty east As Double 只读Property north As Double 只读Property south As Double 只读Property west As Double 只读Class KHViewInfoProperty azimuth As Double 方位角Property latitude As Double 纬度Property longitude As Double 经度Property range As Double 范围Property tilt As Double 倾角利用这些函数,可以对GE进行部分控制,实现一些小的功能,比如在我的地标管理器中就利用了GoogleEarth API实现了地标的隐藏与显示。
Google公司已经将Google COM API开放,这样我们就可以通过开放的API来对GoogleEarth进行操作了,比如控制当前视图的高度、中心经纬度,保存当前图片等等。
下面是Google COM API的网址:/comapi/那么,VC程序员如何使用这些API来控制GoogleEarth呢?下面我们编写一个简单的程序来说明对Google COM API的使用。
源代码下载点击下载此文件首先用VC建立一个基于Dialog的工程(这个不用教了吧?),工程名为ControlGe,工程建好后,下面就是把Google提供的类添加到工程里边来。
Ctrl+W,打开类向导页面,点击“Add Class”按键,选择“From a typelibrary”,然后到安装GoogleEarth的目录下,找到googleearth.exe文件,点击“打开”按键。
这时会弹出一个框来确认产生Google的类,直接点击“OK”键,这是会生成两个文件加入的工程中:googleearth.h和googleearth.cpp,里面就是我们想要的类了。
GoogleEarth的类已经生成了,那我们如何来用它们呢?各位看客不用着急,我们一步步来。
首先,我们得调用一下::CoInitialize(NULL);初始化一下COM库了,这个函数可以在ControlGe.cpp文件中的InitInstance()函数里面调用。
然后呢,我们再在ControlGeDlg.h中定义一个类成员变量:IApplicationGEm_geApplication;顺便说一下,IApplicationGE可是Google COMAPI最主要的一个接口了,从它提供的操作数量就可以看得出来。
好了,离成功不远了,控制的变量也定义了,下面就开始用它来控制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就归你操控了!我们试着做个简单的操作吧,添加一个按键,然后添加按键的点击处理函数,在函数中加入以下代码:CStringstrFileName;static char BASED_CODE szFilter[] = "jpg Files (*.jpg)|All Files(*.*)|*.*||";CFileDialogdlgFile(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版本太低了,也许是你的GoogleCOM未注册,注册一下就可以了,Google对注册的说明:If, for some reason, the Google Earth COM API needs to be registeredagain, you can execute GoogleEarth.exe with "/RegServer" as a commandline argument.For instance, assuming GoogleEarth.exe is located inC:\ProgramFiles\Google\Google Earth, the following command line would register GoogleEarth's COM API:"C:\Program Files\Google\Google Earth\googleearth.exe"/RegServerTo unregister Google Earth's COM API, execute the following command:"C:\Program Files\Google\Google Earth\googleearth.exe"/UnregServer好了,我们下面就可以对照Google COMAPI的文档来试一试对GE的控制操作了。
下面我再来演示一下如何把视图切换到指定地方,添加如下代码:ICameraInfoGEgeCamera;geCamera.AttachDispatch(m_geApplication.GetCamera(TRUE)); geCamera.SetRange(800);geCamera.SetFocusPointLongitude(113.972522);geCamera.SetFocusPointLatitude(22.561294);m_geApplication.SetCamera(geCamera, 1.5);执行以上代码后,GE就会将视图切换到。
嘿嘿,到俺家了。
OK,我要下班回家了,就写到这儿吧,其它功能大家对照着google的文档再试试,要是谁知道上传附件的方法,麻烦告诉我一下,我把上面示例的代码上传上来。
去年,水手版主给大家介绍过GE的API,详贴见这里,本贴对KHInterface 就不做过多说明了:/Announce/Announce.asp?BoardID=100&ID= 21506从GE API的官网上看,现在这些API已经更新了,原来大家使用的KHInterface 这个主类,现在已经基本被 ApplicationGE 这个主类给取代了。