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


发布评论