2024年5月3日发(作者:)

- 1 - 基于Google Earth的高程信息快速提取方法?? 杨鑫 郑新奇 赵璐 张扣强 中国

地质大学北京土地科学技术学院北京100083 Email: 摘 要高程数据在

诸多领域的研究中都有着重要作用。而数据的缺失及数据采集的复杂性 是制约高程

数据运用的关键因素。为解决这一问题本文提出从 Google Earth 上采集数据 充分

利用现有数据。并采用 VC 6.0 和 Google Earth 的 API 函数进行二次开发编写一

个 GE 高程提取软件模块。该模块能从 Google Earth 中快速提取大量高程信息以

供 GIS 软件 建立数字高程模型或做其它用途简化了数据采集的复杂性为用户使

用高程数据提供了极 大的方便。本文详细介绍了该模块的实现原理及算法并通过案

例分析此方法的有效性及高 效性。 关键词Google Earth高程信息算法 数字高程模

型简称DEM在各方面有着广泛的应用如矿区资源勘察、铁路交通、 耕地坡度分析

等。建立数字高程模型的方法有很多种从数据源及采集方式讲主要有①直 接从地面

测量例如用GPS、全站仪、野外测量等②根据航空或航天影像通过摄影测量 途径获

取如立体坐标仪观测及空三加密法、解析测图、数字摄影测量等等③从现有地形 图

上采集如格网读点法、数字化仪手扶跟踪及扫描仪半自动采集然后通过内插生产

DEM等 1。 这三种方式虽然有着各自的优点但都很费时费力。为改变繁琐的工作

过程已有学者 提出了一些快捷、可行的方法如利用计算机灰度处理技术从等高线地

图中提取高程信息 2、用GIS软件或编写VBA程序从AutoCAD中提取高程信息31等。

然而这些方法均以现有 数据为基础。 Google Earth以下简称“GE”共享了受许可的

航空图片、卫星图片及经纬度高程信 息数据涵盖全球。只要拥有一个GE软件便可

查看全球每个角落的经纬度及高程。已有文 章提出从Google Earth上提取高程数据

并提供程序下载但该程序操作较为复杂除启动 程序之前要调整GE的显示界面外它

只能按点提取高程且必须先将点的位置用经纬度 表示输入Excel表格程序的时间复

杂度也很大4。为了快速、灵活获取GE上的高程数据 笔者用VC和GE的API函数编

写了一个GE高程提取程序实现了批量、便捷地从GE上获 取高程信息为建立DEM等

各种应用提供支持。 1 GE 及 GE COM API 2005 年 6 月Google 推出了“Google

Earth”服务。它把卫星照片、航空照相和GIS 布置在一个地球的三维模型上是一款

虚拟地球仪软件。它在三维显示与免费资源数据 方面无与伦比的优势使其在短短几

年内已运用于诸多领域。如林业5、地质灾害管理 6、虚拟城市7等。GE的数据来源

是卫星影像与航拍数据的整合根据影像数据的分辨率将 其分为两类一类是高清影

像分辨率在 0.61m—2.5m一类为非高清影像分辨率在 30m— 500m。 项目资助国家

科技支撑项目资助课题2006BAB15B03 2006BAB15B06中国地质大学北京人才基金

资助项目 51900912300。 - 2 - 随着 Google Earth 的广泛应用Google 公司又公布了

它的二次开发接口 GE COM API 它包括 11 个接口IApplicationGE

IPointOnTerrainGE ICameraInfoGE IFeatureCollectionGE IFeatureGE

IAnimationControllerGE ISearchControllerGE ITimeGE ITimeIntervalGE

ITourControllerGE IViewExtentsGE。这 11 个接口涵盖了 GE 从显示到查询等诸多

功能为 程序员对 GE 进行二次开发提供了极大的方便。 从 GE 提取高程主要用

到前三个接口。在此仅对这三个接口作简单介绍。 IApplicationGE 是 Google Earth

COM API 函数最主要的接口通过这个接口可以让外 部程序访问和控制 GE 应用

程序。这个接口包括了 GE API 函数几乎所有的功能。 IPointOnTerrainGE 是函数

IApplicationGE::GetPointOnTerrainFromScreenCoords 的返回 接口它可以理解为一

个结构体记录了地面点的信息经度、纬度、高度以及一些其它 的相关信息。其属性

有IPointOnTerrainGE:: Latitude 、IPointOnTerrainGE:: Longitude 、

IPointOnTerrainGE:: Altitude 等。 ICameraInfoGE 接口用焦点即屏幕中心及视线方

向等信息描述了一个特殊的视角。 它包括的属性有屏幕中心的经纬度、高度、视点

与焦点的距离等。在 IApplicationGE 接口中 与之相关的两个函数是

IApplicationGE::GetCamera 和 IApplicationGE::SetCamera功能分 别为获得和设置

视角信息。 2 高程提取 2.1 基本原理 本文所介绍的方法其主要目的是利用 GE

的共享数据需要解决的问题是如何从 GE 上 快速获取并记录某一区域的高程数

据。解决办法是根据采集点在 GE 三维显示界面上的位置 将其转换为

IPointOnTerrainGE 类型的点并记录 IPointOnTerrainGE 中的属性。实现这一功 能

需要用到函数 IApplicationGE::GetPointOnTerrainFromScreenCoords其函数原型为

HRESULT IApplicationGE::GetPointOnTerrainFromScreenCoordsdouble screenx

double screeny IPointOnTerrainGE pPoint 其中前两个参数为输入参数screenxscreeny

表示标准化的屏幕坐标。它的取值 范围是从-1-1到11。GE 三维显示界面中心的标

准化屏幕坐标为00左上角的 坐标为-1-1右下角的坐标为11。为将 GE 三维显示界面

的像素坐标转换为这种标 准化屏幕坐标需要知道 GE 三维显示界面的像素长度和

宽度解决办法是首先用函数 IApplicationGE::GetRenderHwnd 返回 GE 三维显示

界面的句柄然后利用这个句柄来获取 GE 三维显示界面的像素长宽从而计算出

GE 三维显示界面上具体点位置的标准化屏幕坐 标screenx screeny 。pPoint 为输出

参数通过这个参数便可得到点的地理位置 de纬度、ude经

度、de高度。 2.2 算法实现 本程序的操作流程是⑴设置高程获取区域

即用需获取高程的区域充满 GE 三维显 示界面⑵从 GE 三维显示界面左上角开

始每隔一定间距根据用户输入的采样间隔来却确 定提取一个点的高程并保存点的

经纬度及高程信息。这两个主要步骤的程序实现并不复 杂这里只给出伪代码。 ⑴

设置高程获取区域。用户可以通过直接操作 GE 达到此目的也可以通过本程序界面

上的“设置屏幕中心”来实现该实现的代码是 - 3 - UpdateDataTRUE ICameraInfoGE

pCameraInfoGE Dispatchm_eraTRUE //

其中 m_geApplication 为 IApplicationGE 型变量 ge800

usPointLongitudem_lon

usPointLatitudem_lat

m_erapCameraInfoGE1.5 Dispatch ⑵提

取高程。该实现的伪代码是 ①用 GetRenderHwnd 函数获得 GE 三维显示界面的

句柄 hmain ②获得 GE 三维显示界面的像素长宽实现代码如下 CWnd ge_Wnd

ge_WndCWnd::FromHandlehmain RECT prect ge_Wnd-GetWindowRectprect RECT

型变量 prect 中就保存了 GE 三维显示界面的像素长宽。 ③根据采样间隔和 GE

三维显示界面的像素长宽计算经纬度方向采样的循环步长 ④在 GE 三维显示界面

中从左上角到右下角依次沿经度和纬度方向提取点信息。伪 代码如下 for double

i-1i