Google Earth 卫星地图影像数据获取与应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);