APP下载

浅谈Google地球高程数据的提取

2012-12-08唐胜军张立东王少杰河南省信阳水文水资源勘测局

河南水利与南水北调 2012年8期
关键词:窗体线程高程

□唐胜军 □张立东 □王少杰(河南省信阳水文水资源勘测局)

1.引言

随着卫星与遥测科技的迅速发展,数值高程模型(DigitalElevationModel)已经成为地球物理科学应用研究中相当重要的资料。数值高程模型数据可由许多技术得到,如地面测量、航拍、空载雷达、雷达高度测量,以及干涉合成孔径雷达等。Google地球自2005年推出,提供免费的全球性地理信息供人们浏览使用,可显示任意位置的3D地形与建筑物。Google地球的影像数据整合自卫星影像与航拍数据。其卫星影像部分来自于美国DigitalGlobe公司的QuickBird商业卫星与EarthSat公司的LANDSAT-7陆地卫星,其中,QuickBird卫星能够提供解析度为0.61m的高精度商用卫星影像。航拍部分来自于BlueSky公司、Sanborn公司等。Google地球以航天飞机雷达地形任务(SRTM)产生的地形资料为基本地形数据。航天飞机雷达地形任务完成对全球北纬60°和南纬56°间的地表扫描,一般地区的SRTM地形资料解析度为3rad/s,北美地区SRTM资料的空间解析度可达1rad/s。目前,用户计算机上不必储存大量的地图资料,通过Google地球即可动态取得质优价高的卫星影像和高程资料。实现从Google地球批量获取高程数据,将对实际工程应用非常有帮助。本文結合Google地球所提供的二次开发接口,实现对指定区域高程数据的提取。

2.Google地球简介

Google地球是Google公司发布的一款基于网络的三维地理信息浏览软件,它把卫星影像、航空照片、三维地面模型等GIS信息合成在一个三维地球模型上,用户通过该软件可以免费浏览全球各地的卫星影像。它的格栅数据精度以域地理位置的重要性而异,乡村区域卫星影像分辨率大约在10~30m,水系、河流、村庄、工厂等地物能清晰地判读。大中城市及大坝、油田、机场等重要设施的高清影像的分辨率达到0.6m,航空图像精度更高。Google地球提供全球30m至90m精度的数值高程模型。在平原中心地带,DEM精度在2m左右;山丘地区精度在10m左右,高山区精度在30m左右,能够满足一般工程应用需要,具有很高的应用价值。

Google地球应用通常有两种扩展方式,一种是基于组件的二次开发方式,另一种是基于KML文件扩展数据的方式。在实际应用中,基于组件二次开发的方式更为方便灵活。Google EarthCOMAPI是GoogleEarth发布的基于组件技术的应用程序接口,用户可以在不同的开发平台上调用GoogleEarthCOMAPI开发应用程序实现特定的功能。GoogleEarthCOMAPI类库包括11个类,主要有 IApplicationGE、ICameraInfoGE、IFeatureGE、IFeatureCollectionGE、IViewExtentsGE等接口。IApplicationGE接口是GoogleEarthCOMAPI主要部分,开发者可以通过IApplicationGE接口与GoogleEarth进程交互。ICameralnfoGE接口描述元素在GoogleEarth上的相机视角信息,以及相机相对于元素的方位信息。通过该接口,程序可以设置Google地球当前视图的相机视角。IFeatureGE描述加载到GoogleEarth中的KML元素的基本信息。IFeatureCollectionGE是元素集合的接口。

IViewExtentsGE描述在GoogleEarth中的观察范围,用户可通过该接口控制当前视图。

3.高程数据的提取

高程数据的提取工作是通过在MicrosoftVisualStudio2008平台编写应用程序来完成的。程序的实现需要多种编程技术,本软件中主要应用的有界面编程技术和多线程技术。基于Windows平台的界面编程技术使用比较容易。下面对界面编程技术、多线程技术和数据提取实现作简单阐述。

3.1 界面编程

本程序是一个单文档的项目。程序界面比较简洁,输入栏是4个文本框TextBox,显示栏是一个进度条ProgressBar。程序窗体FormBorderStyle属性为FixedToolWindow。东南西北4个文本框用于设置高程数据提取区域的经纬度范围。其中,西东两个文本框用来输入提取区域经度的最小值和最大值,南北两个文本框用来输入提取区域纬度的最小值和最大值。

图1 应用程序界面图

3.2 多线程技术

利用GoogleEarthCOMAPI提取高程数据会占用较多的计算机资源。如果直接在窗体按钮的click事件中处理整个数据提取过程,由于提取过程耗时较长,直到提取数据的过程运行完毕后,窗体线程才有时间处理其他事件。在此期间,窗体将无法响应用户输入或处理系统消息,出现“无响应”的情况。为了避免窗体界面无响应这种情况出现,本文采用多线程技术,让耗时的数据提取操作在后台完成,在程序运行过程中及时刷新显示栏上的进度条显示提取进度。微软.NETFramework2.0版中提供了一个名为Thread的类,该类允许开发者创建并控制线程,设置其优先级并获取其状态,使用Thread类可以较好地解决用户界面无响应的问题。在.net中可以通过Thread类的构造函数创建新的线程实例,在该线程上执行的方法将通过一个传递给Thread构造函数的ThreadStart委托或ParameterizedThreadStart委托来表示。本文将提取高程数据的方法定义为Elevation类的成员方法ExtractElevation,该方法的参数类型和返回值与ThreadStart委托相同。在窗体按钮的click事件中将ExtractElevation方法传递给新线程实例的构造函数,由Thread.Start使线程按计划执行数据提取操作。

3.3 高程提取

在EARTHLib命名空间中,Google地球为开发者提供了大量的虚方法,允许用户在派生类中重写这些方法。本文高程提取的方法实现中主要应用到其中的SetCameraParams和Get-PointOnTerrainFromScreenCoords两个虚方法。SetCameraParams方法用于调整当前Google地球的视场焦点的各个参数,无须重新定义照相对象,方法声明为publicvirtualvoidSetCamera-Params(doublelat,doublelon,doublealt,AltitudeModeGEaltMode,doubleRange,doubleTilt,doubleAzimuth,doublespeed),其中 alt-Mode参数类型为AltitudeModeGE枚举类型,表示高度模式。GetPointOnTerrainFromScreenCoords方法用于取得地面上某一点的屏幕坐标,方法声明为publicvirtualPointOnTerrainGEGet-PointOnTerrainFromScreenCoords(doublescreen_x,doublescreen_y)其中参数 screen_x和 screen_y的取值区间为(-1,1)。Get-PointOnTerrainFromScreenCoords方法返回值为IPointOnTerrainGE接口,该接口描述点位的地理特征,提供了关于地形和点位的操作,有 Altitude、Latitude、Longitude、ProjectedOntoGlobe和ZeroElevationExaggeration5个属性。

本文的高程提取分为以下几个步骤:

一是获取用户设置的高程数据提取区域的经纬度范围,计算需要开启的Google地球进程数量。实例化ApplicationGEClass类并打开Google地球程序。通过操作系统提供的GetProcessesByName函数获取打开的Google地球进程句柄。

二是通过SetCameraParams方法设置当前Google地球的视场焦点经度、焦点纬度、焦点高度、视场范围、镜头倾角、镜头方位角和相机移动速度。调用Thread.Sleep方法休眠当前线程,等待地图传输完成。

三是执行GetPointOnTerrainFromScreenCoords(0,0)方法,获取当前屏幕坐标处的经纬度、高度、是否为投影点、是否拉伸等地理信息。按照方法返回值的结构将获取的地理信息保存到数组并刷新程序界面提示进度。

四是重复步骤二和三,直到用户设置区域的数据提取完毕。

五是新建文本文件,将提取的高程数据逐列写入文件。关闭Google地球程序,释放系统资源。

4.结语

Google地球是一款面向大众的商业软件,它向全世界的用户提供了一个开放的地理信息资源库。本文結合Google地球所提供的2次开发接口对多线程技术和从Google地球中获取高程数据进行了简单探讨。以高程数据为基础,用户可以构建诸如数值模拟、虚拟现实等分析应用,让高程数据为人们提供更好的应用体验。

猜你喜欢

窗体线程高程
8848.86m珠峰新高程
基于国产化环境的线程池模型研究与实现
试谈Access 2007数据库在林业档案管理中的应用
浅谈linux多线程协作
GPS高程拟合算法比较与分析
SDCORS高程代替等级水准测量的研究
回归支持向量机在区域高程异常拟合中的应用
巧设WPS窗体控件让表格填写更规范
么移动中间件线程池并发机制优化改进
WinCE.net下图形用户界面的开发