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

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1GoogleEarth卫星地图影像数据获取与应用Google公司通过GoogleEarth数字化平台和互联网络,向全世界免费发布其所拥有的全球卫星影像数据。本文阐述如何从GoogleEarth数字平台获得用户关心区域的地图卫星影像。1地图卫星影像获取方案通过重写GoogleEarth的KML数据文件,将用户关心的区域以“路标”点阵的方式写入KML数据文件;然后利用GoogleEarth提供的游览功能,自动播放KML文件;与此同时使用智能抓图软件,同步将播放图像保存为本地数据文件,完成地图卫星影像获取。1.1“路标”点阵写入KML文件GoogleEarth允许用户在地图上感兴趣的特定位置处设置标志,即“路标”(PlaceMark),它是GoogleEarth定义的一种空间点类型,包括路标名称、位置(经纬度、高度)、视角、等信息。为了能够一次获取一个地区的全部图像,需要在该地区所在的空间范围内布置“路标”点阵。GoogleEarth提供了添加和编辑“路标”的功能,但是要获取一个地区的地图卫星影像,就必须采用直接写入KML数据文件的方式,将区域所包含的大量的“路标”点阵写入GoogleEarth中。GoogleEarth的KML数据文件是一种通用非结构化数据文件(XML格式),通过KML数据文件,用户可以实现与GoogleEarth软件的沟通与交流。KML数据文件包括文件头、数据体、文件结束三部分。附件1是一个GoogleEarth软件使用的KML数据文件例子。2KML数据文件的具体访问方法参考DQMAP主程序KML写入部分及XMLU.PAS单元。写入KML数据文件时,通过设置Placemark数据类型,将用户关心的区域进行覆盖。下图是Placemark数据类型的格式,重要的是将Placemark的空间位置(经度、纬度、高度)设置正确,其中经度、纬度数据单位是度,高度和视距单位是m。经度、纬度的计算方法根据视距和每屏覆盖的经差范围和纬差范围确定。保证相邻图像适度重合,然后计算每一幅图像的中心位置。1.2自动播放KML文件将KML调入GoogleEarth,在GoogleEarth的Option菜单中设置控制参数。关键是要根据网速,设置图像的停顿时间,以便让GoogleEarth有充足的时间将图像数据通过网络从远端图像数据服务器传到本地。一般宽带网设置停顿时间为10-30秒,另外,为了加快抓图速度,可以先浏览一、两次,提前将数据下载到GoogleEarth在本地的Cache数据文件中,在实际抓图时,GoogleEarth可以以较快的速度从Cache数据文件中获取数据,此时可以将停顿时间缩短,一般4秒即可。1.3智能抓图智能抓图与播放KML文件同时进行,抓图功能由DQMAP软件提供。DQMAP可以根据GoogleEarth播放KML数据文件的进程,抓到最清晰的图像,并保存到设置的文件夹中。为了保证抓图与播放动作同步,DQMAP软件在写KML文件和抓图时,在安排“路标”阵列与抓图数-PlacemarknameDQ47_05_125_00/name-LookAtid=khLookAt676longitude125/longitudelatitude47.0833333333333/latituderange8000/rangetilt0/tiltheading0/heading/LookAt-Styleid=khStyle677-LineStyleid=khLineStyle681colorffff00ff/color/LineStyle/Style-LineStringid=khLineString684tessellate1/tessellatecoordinates//LineString/Placemark3据文件名称时,采用一对一的关系。“路标”阵列的安排如下:WithDQ800[CurrentSec]doForj:=0toACol-1dobeginLon:=LonSt+j*DLon;Fori:=0toARow-1dobeginLat:=LatSt-i*DLat;XMLDoc_WritePlaceMark(F,Prefix+FormatDegSecRound(Lat)+'_'+FormatDegSecRound(Lon),Lon,Lat,DQ800[CurrentSec].Scale,False);end;end;由定时器和图像自动识别单元组成的抓图图像文件列表安排如下:WithDQ800[CurrentSec]doForj:=0toACol-1dobeginLon:=LonSt+j*DLon;Fori:=0toARow-1dobeginLat:=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.1ImageSect数据类型声明了两个实例DQ800,DQUnits:TImageSecArr,分别代表区域数列和当前区域的图像数列。它们具有相同的数据类型。TImageSecArr=ArrayofTImageSec;其中ImageSect是为了描述一个区域或图像数据而定义的数据类型。TImageSec=recordLatSt,LonSt:Real;//区域或图像的起点,左上LatEn,LonEn:Real;//区域或图像的终点,右下DLat,DLon:Real;//区域或图像的范围纬差,经差NERange:RangeType;//区域或图像的范围(MinP(左下),MaxP(右上))4Rows,Cols:Integer;//图像的行数、列数Scale:Real;//视距,视野宽度Lats,Lons:TpVector;//图像行阵列的纬度、图像行阵列的经度NameLen:Integer;//2forDD_MM,3forDD_MM_SSSecDir,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的程序段。WithASecdoFori:=0toRowsdoForj:=0toColsdoBeginFName:=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);5FieldByName('LatEnDD').asinteger:=DD;FieldByName('LatEnMM').asinteger:=MM;FieldByName('LatEnSS').asinteger:=SS;FieldByName('LonEn').asFloat:=UnitLonEn;Deg2DMS(UnitLonEn,DD,MM,SS);FieldByName('LonEnDD').asinteger:=DD;FieldByName('LonEnMM').asinteger:=MM;FieldByName('LonEnSS').asinteger:=SS;FieldByName('DLat').asFloat:=DLat;FieldByName('DLon').asFloat:=DLon;FieldByName('Rows').asFloat:=Rows;FieldByName('Cols').asFloat:=Cols;FieldByName('Scale').asFloat:=Scale;FieldByName('NameLen').asInteger:=NameLen;FieldByName('Prefix').asString:=Prefix;FieldByName('SizeX').asInteger:=SizeX;FieldByName('SizeY').asInteger:=SizeY;FieldByName('Width').asInteger:=Width;FieldByName('Height').asInteger:=Height;FieldByName('PixelToX').asFloat:=PixelToX;FieldByName('PixelToY').asFloat:=PixelToY;FieldByName('WidToHei').asFloat:=WidToHei;l:=1;Form:=i-1toi+1doForn:=j-1toj+1doIf(mi)or(nj)thenBeginXUnitID:=ID+I2S0(m,3)+I2S0(n,3);XFName:=GetImageFileNameRound(Path,Prefix,Lats.vec[m],Lons.vec[n],NameLen,IsGrided);IfFileExists(XFname)thenBeginFieldByName('ID'+Inttostr(l)).AsString:=XUnitID;End;Inc(l);End;Post;End;下面是读当前Section的程序段。LoadAUnit(ATable,ASec)WithATable,ASec,ImageSecOfsdobeginSecName:=FieldByName('SectName').asString;SecDir:=FieldBy

1 / 20
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功