请问在vs中如何对google earth 在线进行二次开发?

2778人阅读
从这篇开始,我将陆续公布或者转载我收集的一些经典的GoogleEarth二次开发资料。
GoogleEarth二次开发难点和技巧
一、&基本步骤
1、安装GoogleEarth程序
2、对GoogleEarth activex控件进行注册(googleearth.exe /regserver)
3、在开发环境中引用googleearth activex
二、&开发方式
针对GE的开发有两种方式,一种是基于GE的com API,一种是基于KML。基于 Com API的开发方式主要用来控制GE的视角、实现动画效果,而基于KML的开发方式主要用来生成地理要素,实现数据的动态更新等。在实际应用中,需要结合这两种开发方式,这样才能得到比较理想的效果。
1、&基于ComAPI的开发
GE 公布的API目前是1.0a版,数量比较少,所能实现的功能也不多,在实际开发中主要用来加载KML数据、控制视角和实现动画播放。
A、 加载KML数据
IApplicationGE.&(kmlFilePath),加载指定的kml文件到GE中;
IApplicationGE.(kmlData),加载kml文本流到GE中
B、 控制视角
IApplicationGE.&(&,double&),设置GE当前的视角,第一个参数为视角参数,第二个参数为当前视角飞到这个视角的速度(取值范围为0--5);
IApplicationGE&.(,double),从当前视角飞到指定要素处的视角,第一个参数为指定的要素,这个要素的视角由KML中的&LookAt&标签来决定,第二个参数为飞行速度(取值范围为0—5)。
C、 动画效果
GE中实现动画效果有两种方法,第一种是通过KML中的&Annimation&标签来实现,这个标签内部放置的是每一帧所代表的视图,第二种方式是通过API来实现某个父要素下的所有子要素的视图的轮流切换。
.Play()&开始播放&Annimation&标签中的帧
ITourControllerGE.&&()&播放某个父要素下的子要素,或暂停播放
2、&基于KML的开发
GE实际上就是一个浏览器,被浏览的数据是KML,KML和GML、SVG等表示矢量图形的标准类似,不过他所描述的是三维的数据结构,可以认为KML是基于XML的一种三维矢量图形标准。
KML的结构组成可以参考(/apis/kml/documentation/kml_tags_beta1.html),从其结构图中可以看出,KML描述地物的方式和通用的GIS相类似,主要由要素、样式、视角、动画等部分组成。下面我说明KML中几个比较有难度的技术。
A、&&&&&&LOD技术
LOD(Level Of Detail)地图分级加载技术,利用LOD技术可以在PC机上浏览海量的影像地图数据。有GIS平台使用经验的都知道,我们可以设置某个图层在某个比例尺范围之内显示,小于或者超过这个范围则不显示。LOD技术非常类似,比如说,在视角高度很大的时候,我只加载1:5000W的影像数据,在视角高度很小的时候,我只加载1:1000的数据,这样的话,视角高度越低,我们所能看到的地物越详细。
在KML中用来实现LOD技术的是&Region&标签,这个标签定义了在什么范围内,在什么像素级别范围内显示某个要素。
B、动态数据更新技术
在GPS车辆监控系统中,需要对实时数据进行更新。利用KML中的&NetworkLink&和& refreshMode&标签可以实现数据的实时更新。将refreshMode设置为onInterval模式,并在& refreshInterval &中设置间隔时间,那么GE将间隔指定的时间来刷新一下&href&标签中的链接地址,这个链接地址可以是本地磁盘上的一个文件,也可以是一个网络链接。(可以参照gpsrealtime.kml来理解)
C、&&&&&&动画播放技术
KML中的& TimeSpan &或者&&TimeStamp &标签是用来控制动画播放的,& TimeSpan &或&&TimeStamp &都必须包含在在一个要素标签内,表示的是在某个时间点上,GE的视图转到当前要素标签所规定的视图上,并完成相应的动作。因此每一个包含时间戳标签的要素标签都表示动画过程中的一帧。(可以参照trackreplay.kml来理解)
D、&&&&&&三维建模技术
KML中的几何对象都包含三个属性:longitude、latitude、altitude,利用基本的几何图形(如点、线、面),加上高程数据,我们可以构建一些简单的三维图形。如果需要构建复杂的三维模型,可以借助三维建模工具,如3D max,google sketch,AutoCAD,然后将得到的三维模型转成dae格式即可,这样就可以直接在GE中调用这些三维模型了(利用&Model&标签来引用模型文件的位置)
三、几个技巧
1、如何将GE的地图控件引用到自定义的窗体中?
&&&&&&&& 在一般情况下,我们针对GE的开发都只能基于GE程序本身来进行,所有的操作都必须在GE本身的框架上进行,不能将GE的地图控件像一般可拖放的控件来操作。怎么解决这个问题呢,这里要用到一下Win API,将GE中的地图部分hook过来。
&&&&&&&&&&&&this._GEMainHandler = (IntPtr)this._googleEarth.GetMainHwnd();//获取GE程序的句柄
&&&&&&&&&&& SetWindowPos((int)this._GEMainHandler, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOSIZE + SWP_HIDEWINDOW);//将GE窗体移到屏幕可视范围之外,使之不可见
&&&&&&&&&&& this._GEHrender = (IntPtr)_googleEarth.GetRenderHwnd();//获取GE的地图控件的句柄
&&&&&&&&&&& this._GEParentHrender = GetParent(this._GEHrender);//获取GE地图控件的父控件的句柄
&&&&&&&&&&& PostMessage((int)this._GEParentHrender, WM_HIDE, 0, 0);//发送消息到地图控件的父控件,使之不可见
&&&&&&&&&&& SetParent(this._GEHrender, customControl.Handle);//将GE地图控件的父控件设置为我们指定的控件
使用上面的代码,我们就可以将GE中的地图控件抢夺到我们自己的winform中。(参考utilities\GEHandler.cs)
2、如何为GE提供动态数据?
&& 为GE提供动态数据,需要用到上面介绍的KML动态数据更新技术。在这里提供一个比较好的解决方案,架构动态数据提供服务器。这有点类似于B/S架构,browser就是GE,Server就是我们要架设的服务器,Server提供的是动态的符合KML规范的数据,GE间隔一定时间去服务器上获取一下数据。
3、&&& 如何得到GE中的指定要素?
当我们需要对某个要素进行操作时,首先必须得到这个要素。当KML文件被加载进入GE中后,这个文件也被当作一个要素看待,文件中的这个几何图形、图片、链接等都被当成这个要素的子要素看待。在GE中获取某个要素只有两个途径:通过要素名称和通过要素的链接地址
(name)通过要素名称来得到要素
(href)通过链接地址来得到要素(得到的是从链接地址中代表的内容)&
一、基本步骤
、安装程序
、对控件进行注册()
、在开发环境中引用
二、开发方式
针对的开发有两种方式,一种是基于的,一种是基于。基于的开发方式主要用来控制的视角、实现动画效果,而基于的开发方式主要用来生成地理要素,实现数据的动态更新等。在实际应用中,需要结合这两种开发方式,这样才能得到比较理想的效果。
基于的开发
公布的目前是版,数量比较少,所能实现的功能也不多,在实际开发中主要用来加载数据、控制视角和实现动画播放。
&(kmlFilePath),加载指定的kml文件到GE中;
(kmlData),加载kml文本流到GE中
(&,double&),设置GE当前的视角,第一个参数为视角参数,第二个参数为当前视角飞到这个视角的速度(取值范围为0--5);
&.(,double),从当前视角飞到指定要素处的视角,第一个参数为指定的要素,这个要素的视角由KML中的&LookAt&标签来决定,第二个参数为飞行速度(取值范围为0—5)。
中实现动画效果有两种方法,第一种是通过中的标签来实现,这个标签内部放置的是每一帧所代表的视图,第二种方式是通过来实现某个父要素下的所有子要素的视图的轮流切换。
.Play()&开始播放标签中的帧
&&()&播放某个父要素下的子要素,或暂停播放
基于的开发
实际上就是一个浏览器,被浏览的数据是,和、等表示矢量图形的标准类似,不过他所描述的是三维的数据结构,可以认为是基于的一种三维矢量图形标准。
的结构组成可以参考()从其结构图中可以看出,描述地物的方式和通用的相类似,主要由要素、样式、视角、动画等部分组成。下面我说明中几个比较有难度的技术。
(Level Of Detail)地图分级加载技术,利用技术可以在机上浏览海量的影像地图数据。有平台使用经验的都知道,我们可以设置某个图层在某个比例尺范围之内显示,小于或者超过这个范围则不显示。技术非常类似,比如说,在视角高度很大的时候,我只加载:的影像数据,在视角高度很小的时候,我只加载:的数据,这样的话,视角高度越低,我们所能看到的地物越详细。
在中用来实现技术的是标签,这个标签定义了在什么范围内,在什么像素级别范围内显示某个要素。
动态数据更新技术
在车辆监控系统中,需要对实时数据进行更新。利用中的和&refreshMode&标签可以实现数据的实时更新。将设置为模式,并在&refreshInterval
&中设置间隔时间,那么将间隔指定的时间来刷新一下标签中的链接地址,这个链接地址可以是本地磁盘上的一个文件,也可以是一个网络链接。(可以参照来理解)
动画播放技术
中的&TimeSpan &或者&TimeStamp标签是用来控制动画播放的,&TimeSpan
&或&TimeStamp都必须包含在在一个要素标签内,表示的是在某个时间点上,的视图转到当前要素标签所规定的视图上,并完成相应的动作。因此每一个包含时间戳标签的要素标签都表示动画过程中的一帧。(可以参照来理解)
三维建模技术
中的几何对象都包含三个属性:、、,利用基本的几何图形(如点、线、面),加上高程数据,我们可以构建一些简单的三维图形。如果需要构建复杂的三维模型,可以借助三维建模工具,如,然后将得到的三维模型转成格式即可,这样就可以直接在中调用这些三维模型了(利用Model标签来引用模型文件的位置)
三、几个技巧
、如何将的地图控件引用到自定义的窗体中?
在一般情况下,我们针对的开发都只能基于程序本身来进行,所有的操作都必须在本身的框架上进行,不能将的地图控件像一般可拖放的控件来操作。怎么解决这个问题呢,这里要用到一下,将中的地图部分过来。
&&&//获取程序的句柄
;//将窗体移到屏幕可视范围之外,使之不可见
this._GEHrender = (IntPtr)_googleEarth.GetRenderHwnd();//获取的地图控件的句柄
this._GEParentHrender = GetParent(this._GEHrender);//获取地图控件的父控件的句柄
PostMessage((int)this._GEParentHrender, WM_HIDE, 0, 0);//发送消息到地图控件的父控件,使之不可见
//将地图控件的父控件设置为我们指定的控件
使用上面的代码,我们就可以将中的地图控件抢夺到我们自己的中。(参考)
、如何为提供动态数据?
为提供动态数据,需要用到上面介绍的动态数据更新技术。在这里提供一个比较好的解决方案,架构动态数据提供服务器。这有点类似于架构,就是,就是我们要架设的服务器,提供的是动态的符合规范的数据,间隔一定时间去服务器上获取一下数据。
如何得到中的指定要素?
当我们需要对某个要素进行操作时,首先必须得到这个要素。当文件被加载进入中后,这个文件也被当作一个要素看待,文件中的这个几何图形、图片、链接等都被当成这个要素的子要素看待。在中获取某个要素只有两个途径:通过要素名称和通过要素的链接地址
(name)通过要素名称来得到要素
(href)通过链接地址来得到要素(得到的是从链接地址中代表的内容)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:195679次
积分:2126
积分:2126
排名:第15835名
原创:27篇
转载:52篇
评论:19条
(7)(1)(7)(11)(23)(17)(2)(11)1205人阅读
一、&基本步骤&
1、安装GoogleEarth程序&
2、对GoogleEarth&activex控件进行注册(googleearth.exe&/regserver)&
3、在开发环境中引用googleearth&activex&
二、&开发方式&
针对GE的开发有两种方式,一种是基于GE的com&API,一种是基于KML。基于&Com&API的开发方式主要用来控制GE的视角、实现动画效果,而基于KML的开发方式主要用来生成地理要素,实现数据的动态更新等。在实际应用中,需要结合这两种开发方式,这样才能得到比较理想的效果。&
1、&基于ComAPI的开发&
GE&公布的API目前是1.0a版,数量比较少,所能实现的功能也不多,在实际开发中主要用来加载KML数据、控制视角和实现动画播放。&
A、&加载KML数据&
IApplicationGE.&OpenKmlFile(kmlFilePath),加载指定的kml文件到GE中;&
IApplicationGE.LoadKmlData(kmlData),加载kml文本流到GE中&
B、&控制视角&
IApplicationGE.&SetCamera(ICameraInfoGE&,double&),设置GE当前的视角,第一个参数为视角参数,第二个参数为当前视角飞到这个视角的速度(取值范围为0--5);&
IApplicationGE&.SetFeatureView(IFeatureGE,double),从当前视角飞到指定要素处的视角,第一个参数为指定的要素,这个要素的视角由KML中的&LookAt&标签来决定,第二个参数为飞行速度(取值范围为0—5)。&
C、&动画效果&
GE中实现动画效果有两种方法,第一种是通过KML中的&Annimation&标签来实现,这个标签内部放置的是每一帧所代表的视图,第二种方式是通过API来实现某个父要素下的所有子要素的视图的轮流切换。&
ITimeIntervalGE.Play()&开始播放&Annimation&标签中的帧&
ITourControllerGE.&PlayOrPause&()&播放某个父要素下的子要素,或暂停播放&
2、&基于KML的开发&
GE实际上就是一个浏览器,被浏览的数据是KML,KML和GML、SVG等表示矢量图形的标准类似,不过他所描述的是三维的数据结构,可以认为KML是基于XML的一种三维矢量图形标准。&
KML的结构组成可以参考(),从其结构图中可以看出,KML描述地物的方式和通用的GIS相类似,主要由要素、样式、视角、动画等部分组成。下面我说明KML中几个比较有难度的技术。&
A、&LOD技术&
LOD(Level&Of&Detail)地图分级加载技术,利用LOD技术可以在PC机上浏览海量的影像地图数据。有GIS平台使用经验的都知道,我们可以设置某个图层在某个比例尺范围之内显示,小于或者超过这个范围则不显示。LOD技术非常类似,比如说,在视角高度很大的时候,我只加载1:5000W的影像数据,在视角高度很小的时候,我只加载1:1000的数据,这样的话,视角高度越低,我们所能看到的地物越详细。&
在KML中用来实现LOD技术的是&Region&标签,这个标签定义了在什么范围内,在什么像素级别范围内显示某个要素。&
B、动态数据更新技术&
在GPS车辆监控系统中,需要对实时数据进行更新。利用KML中的&NetworkLink&和&&refreshMode&标签可以实现数据的实时更新。将refreshMode设置为onInterval模式,并在&&refreshInterval&&中设置间隔时间,那么GE将间隔指定的时间来刷新一下&href&标签中的链接地址,这个链接地址可以是本地磁盘上的一个文件,也可以是一个网络链接。(可以参照gpsrealtime.kml来理解)&
C、&动画播放技术&
KML中的&&TimeSpan&&或者&&TimeStamp&&标签是用来控制动画播放的,&&TimeSpan&&或&&TimeStamp&&都必须包含在在一个要素标签内,表示的是在某个时间点上,GE的视图转到当前要素标签所规定的视图上,并完成相应的动作。因此每一个包含时间戳标签的要素标签都表示动画过程中的一帧。(可以参照trackreplay.kml来理解)&
D、&三维建模技术&
KML中的几何对象都包含三个属性:longitude、latitude、altitude,利用基本的几何图形(如点、线、面),加上高程数据,我们可以构建一些简单的三维图形。如果需要构建复杂的三维模型,可以借助三维建模工具,如3D&max,google&sketch,AutoCAD,然后将得到的三维模型转成dae格式即可,这样就可以直接在GE中调用这些三维模型了(利用&GetFeatureByName(name)通过要素名称来得到要素GetFeatureByHref(href)通过链接地址来得到要素(得到的是从链接地址中代表的内容)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:195681次
积分:2126
积分:2126
排名:第15835名
原创:27篇
转载:52篇
评论:19条
(7)(1)(7)(11)(23)(17)(2)(11)工具类服务
编辑部专用服务
作者专用服务
Google Earth的应用及开发初探
Google Earth是一款由Google公司开发的虚拟地球软件,它把航拍照片、卫星图像和GIS数据整合在一起,布置在一个三维的地球模型上。它作为数字地球平台是集地球空间数据采集、存储、传输、转换、处理、分析、检索、表达、输出为一体的开放、共享的计算机辅助决策系统,是空间信息技术发展的重要成果。Google Earth地理信息丰富直观,即便是在没有三维模型信息的地区,它提供的影像图也可以很好的表达城市的物质环境,包括城市道路、绿化等,这些地理信息也是城市设计中比较重要的资料。本文研究的重点在于如何利用Google Earth的功能特点,挖掘其在城市设计各阶段中所能发挥的作用,并尝试对其进行二次开发增强其作为城市设计平台的功能。  
全文共分为五部分。  
第一部分为绪论,主要介绍论文的研究背景、研究现状,论文的主要内容和组织结构。  
第二部分论述Google Earth的理论基础,首先介绍Google Earth的基本概况和主要的功能,以及对Google Earth的核心语言KML的相关介绍,其中包括语言的功能、特点和文件结构等,最后介绍在Google Earth中各种数据的KML表达形式。  
第三部分论述Google Earth作为展示平台的应用,首先介绍在Google Earth中建模的几种方式以及其中需要注意的问题,随后论述模型的转换精简以及纹理贴图。最后结合实际的工程项目,论述如何利用Google Earth中LOD原理,实现场景的漫游以及展示界面的创建等。  
第四部分首先介绍Google Earth的几种开发方式,以及Google Earth API的主要内容和各个接口之间的关系。最后重点论述基于Google Earth API对Google Earth进行的开发,增强其作为设计平台的功能。其中主要包括客户端的初始化、创建、编辑和文件的输入输出四个部分。实现的主要功能是创建多边形并可以对其进行拉伸,方便快捷地建立简单的体块模型,另外还可以绘制自由曲线、折线等。  
第五部分对全文进行总结,并给出进一步的工作设想。
学科专业:
授予学位:
学位授予单位:
导师姓名:
学位年度:
本文读者也读过
相关检索词
万方数据知识服务平台--国家科技支撑计划资助项目(编号:2006BAH03B01)(C)北京万方数据股份有限公司
万方数据电子出版社扫二维码下载作业帮
1.75亿学生的选择
下载作业帮安装包
扫二维码下载作业帮
1.75亿学生的选择
请问如何将google earth中选定路线的经纬度和海拔数据导出来呢?谢谢大家
扫二维码下载作业帮
1.75亿学生的选择
以下内容供您参考:1.google earth中 工具栏上有“添加地标” “添加路径”,可以选定点和路线.2.在左侧保存的地标和路径右键菜单里面有另存菜单项,导出kmz(解压为kml),文件里面有经纬度,但无海拔数据(海拔为0).google earth 应该是防止Dem数据被导出,所以不能导出海拔.(不要幻想了,嘿嘿 )如果想导出海拔,可以对google earth进行二次开发,这个就需要编程写点代码了.
为您推荐:
其他类似问题
扫描下载二维码

我要回帖

更多关于 google earth pro 的文章

 

随机推荐