如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
揭密GoogleMap的工作原理www.gps518.cn日期:2007-06-2010:16:46作者:未知来源:3S新闻周刊评论条我分析了googlemap的工作原理,特别是如何进行tiles编码。Googlemap使用预着色tiles,可以通过一个简单的url地址实现。这篇文章将解释如何从地理坐标(经纬度)建立tile的url地址。Maptile编码Googlemap使用两种算法对tile的位置进行编码。对于Googlemap,tile的url地址类似于:http://mt1.google.com/mt?n=404&v=w2.12&x=130&y=93&zoom=9使用x和y来设置tile坐标和放大因子。放大因子从17(完全缩小)到0(最大比例)。当放大因子为17时,整个地球在一个tile中显示,此时x=0,y=0;放大因子为16时,地球被分为2x2部分,这时0<=x<=1且0<=y<=1。每放大一次,每个tile被分为4个部分。因此,当放大因子为z时,显示的水平和垂直tile个数为2^(17-z)。算法:寻找经纬度和放大因子//correctthelatitudetogofrom0(north)to180(south),//insteadof90(north)to-90(south)latitude=90-latitude;//correctthelongitudetogofrom0to360longitude=180+longitude;//findtilesizefromzoomleveldoublelatTileSize=180/(pow(2,(17-zoom)));doublelongTileSize=360/(pow(2,(17-zoom)));//findthetilecoordinatesinttilex=(int)(longitude/longTileSize);inttiley=(int)(latitude/latTileSize);事实上,这个算法只是理论上的,覆盖的地带还无法和整个地球匹配。服务器:Google使用4台服务器维持加载。分别是mt0,mt1,mt2andmt3。显示位置:每个tile为256x256的.png格式的图像。对于卫星影像,编码方式有点不同Tile的url地址类似于http://kh0.google.com/kh?n=404&v=8&t=trtqtt,其中参数t对影像的位置进行编码。参数的长度表示缩放级别。t=t时,可观察整个地球,只有一个tile表示地球。下一个放大级别是,该tile被分为4个象限,从左上顺时针开始分别是'q''r''s'和't'。在你观察的影像那个象限后添加字母,就可以看见下一级象限。比如,'t=tq'时,给出't'影像的左上象限。依次类推,可以表示每个缩放级别…算法:寻找经纬度和放大因子Collapse//initialisethevariables;doublexmin=-180;doublexmax=180;doubleymin=-90;doubleymax=90;doublexmid=0;doubleymid=0;stringlocation=t;//googleusealatitudedividedby2;doublehalflat=latitude/2;for(inti=0;i<zoom;i++){xmoy=(xmax+xmin)/2;ymoy=(ymax+ymin)/2;if(halflat>ymoy)//upperpart(qorr){ymin=ymoy;if(longitude<xmoy){/*q*/location+=q;xmax=xmoy;}else{/*r*/location+=r;xmin=xmoy;}}else//lowerpart(tors){ymax=ymoy;if(longitude<xmoy){/*t*/location+=t;xmax=xmoy;}else{/*s*/location+=s;xmin=xmoy;}}}//here,thelocationshouldcontainsthestringcorrespondingtothetile...同样,这个算法也是理论上的,覆盖地带还无法和整个地球匹配。服务器:Google使用4台服务器维持加载。分别是kh0,kh1,kh2andkh3。显示位置:每个tile为256x256的.jpg格式图像。墨卡托投影由于在显示时使用了墨卡托投影,因此上述的算法需要进行修改。在墨卡托投影中,两条纬线间的距离不一定相等,所以描述tile的角度依据它的垂直位置。以下代码为从tile的纬度位置计算的tile的垂直个数Collapse/**<summary>Gettheverticalti