Google Earth 卫星地图影像数据获取与应用

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Google Earth 卫星地图影像数据获取与应用

Google 公司通过Google Earth数字化平台和互联网络,向全世界免费发布其所拥有的全球卫星影像数据。本文阐述如何从Google Earth数字平台获得用户关心区域的地图卫星影像。

1 地图卫星影像获取方案

通过重写Google Earth的KML数据文件,将用户关心的区域以“路标”点阵的方式写入KML数据文件;然后利用Google Earth提供的游览功能,自动播放KML文件;与此同时使用智能抓图软件,同步将播放图像保存为本地数据文件,完成地图卫星影像获取。

1.1 “路标”点阵写入KML文件

Google Earth允许用户在地图上感兴趣的特定位置处设置标志,即“路标”(Place Mark),它是Google Earth定义的一种空间点类型,包括路标名称、位置(经纬度、高度)、视角、等信息。

为了能够一次获取一个地区的全部图像,需要在该地区所在的空间范围内布置“路标”点阵。

Google Earth提供了添加和编辑“路标”的功能,但是要获取一个地区的地图卫星影像,就必须采用直接写入KML数据文件的方式,将区域所包含的大量的“路标”点阵写入Google Earth中。

Google Earth的KML数据文件是一种通用非结构化数据文件(XML格式),通过KML数据文件,用户可以实现与Google Earth软件的沟通与交流。

KML数据文件包括文件头、数据体、文件结束三部分。附件1是一个Google Earth软件使用的KML 数据文件例子。

KML 数据文件的具体访问方法参考DQMAP 主程序KML 写入部分及XMLU.PAS 单元。写入KML 数据文件时, 通过设置Placemark 数据类型,将用户关心的区域进行覆盖。下图是Placemark 数据类型的格式,重要的是将Placemark 的空间位置(经度、纬度、高度)设置正确,其中经度、纬度数据单位是度,高度和视距单位是m 。

经度、纬度的计算方法根据视距和每屏覆盖的经差范围和纬差范围确定。保证相邻图像适度重合,然后计算每一幅图像的中心位置。

1.2 自动播放KML 文件

将KML 调入Google Earth ,在Google Earth 的Option 菜单中设置控制参数。关键是要根据网速,设置图像的停顿时间,以便让Google Earth 有充足的时间将图像数据通过网络从远端图像数据服务器传到本地。一般宽带网设置停顿时间为10-30秒,另外,为了加快抓图速度,可以先浏览一、两次,提前将数据下载到Google Earth 在本地的Cache 数据文件中,在实际抓图时,Google Earth 可以以较快的速度从Cache 数据文件中获取数据,此时可以将停顿时间缩短,一般4秒即可。

1.3 智能抓图

智能抓图与播放KML 文件同时进行,抓图功能由DQMAP 软件提供。DQMAP 可以根据Google Earth 播放KML 数据文件的进程,抓到最清晰的图像,并保存到设置的文件夹中。

为了保证抓图与播放动作同步,DQMAP 软件在写KML

文件和抓图时,在安排“路标”阵列与抓图数

据文件名称时,采用一对一的关系。

“路标”阵列的安排如下:

With DQ800[CurrentSec] do

For j:=0 to ACol -1 do

begin

Lon:=LonSt+j*DLon;

For i:=0 to ARow-1 do

begin

Lat:=LatSt-i*DLat;

XMLDoc_WritePlaceMark(F,Prefix+FormatDegSecRound(Lat)+'_'+

FormatDegSecRound(Lon),

Lon,Lat,DQ800[CurrentSec].Scale,False);

end;

end;

由定时器和图像自动识别单元组成的抓图图像文件列表安排如下:

With DQ800[CurrentSec] do

For j:=0 to ACol -1 do

begin

Lon:=LonSt+j*DLon;

For i:=0 to ARow-1 do

begin

Lat:=LatSt-i*DLat;

fn:=GetImageFileNameRound(Path,Prefix,Lat,Lon,NameLen,CheckBox1.Checked);

Inc(k);

SetLength(BMPFName,k);

BMPFName[k-1]:=fn;

end;

end;

2 图像数据的组织与使用

2.1 ImageSect数据类型

声明了两个实例DQ800,DQUnits:TImageSecArr,分别代表区域数列和当前区域的图像数列。它们具有相同的数据类型。

TImageSecArr=Array of TImageSec;

其中ImageSect是为了描述一个区域或图像数据而定义的数据类型。

TImageSec=record

LatSt,LonSt:Real; //区域或图像的起点,左上

LatEn,LonEn:Real; //区域或图像的终点,右下

DLat,DLon:Real; //区域或图像的范围纬差,经差

NERange:RangeType; //区域或图像的范围(MinP(左下),MaxP(右上))

Rows,Cols:Integer; //图像的行数、列数

Scale:Real; //视距,视野宽度

Lats,Lons:TpVector; //图像行阵列的纬度、图像行阵列的经度

NameLen:Integer; //2 for DD_MM,3 for DD_MM_SS

SecDir, Path, Prefix, //图像的存放目录

SecName:String; //区域名称

SizeX,SizeY:Integer; //图像单元的像素尺寸,图像的宽度、高度像素数

Width,Height:Integer; //区域图像尺寸(估计),宽度、高度像素数

PixelToX,PixelToY:Real; //水平像素系数,垂直像素系数

WidToHei:Real; //垂直—水平比例(估计)

ImageLoaded:Boolean;

MinScale,MaxScale:Real; //可见图像的比例尺范围

ID:String[16]; //数据库中区域的ID号

end;

2.2 数据库

将DQ800,DQUnits数据存放到数据库文件中,以便访问。附录3是从数据库文件中读取DQ800数据的程序段。下面是写当前Section 的程序段。

With ASec do

For i := 0 to Rows do

For j := 0 to Cols do

Begin

FName:=GetImageFileNameRound(Path,Prefix,Lats.vec[i],Lons.vec[j],NameLen,IsGrided);

FieldByName('ID').asString:=UnitID;

FieldByName('SectName').asString:=FName;

FieldByName('SectDir').asString:=SecDir;

FieldByName('MainPath').asString:=Path;

UnitLatSt:=LatSt-DLat*i;

UnitLonSt:=LonSt+DLon*j;

FieldByName('LatSt').asFloat:=UnitLatSt;

FieldByName('LonSt').asFloat:=UnitLonSt;

Deg2DMS(UnitLatSt,DD,MM,SS);

FieldByName('LatStDD').asinteger:=DD;

FieldByName('LatStMM').asinteger:=MM;

FieldByName('LatStSS').asinteger:=SS;

Deg2DMS(UnitLonSt,DD,MM,SS);

FieldByName('LonStDD').asinteger:=DD;

FieldByName('LonStMM').asinteger:=MM;

FieldByName('LonStSS').asinteger:=SS;

UnitLatEn:=LatSt-DLat*(i+1);

UnitLonEn:=LonSt+DLon*(j+1);

FieldByName('LatEn').asFloat:=UnitLatEn;

Deg2DMS(UnitLatEn,DD,MM,SS);

相关文档
最新文档