Google Map 怎样工作 这是我对google map工作的一个分析,特别是地图卫片怎样被编码.google map 用简单的url预载入卫片的方式获得。这篇文章解释怎样建立从它们的地理坐标(经纬度)来建立url。 地图卫片编码 1) Google Map 用两个不同的算法来编码卫片们的定位。 比如说,有这么一个url: http://mt1.google.com/mt?n=404&v=w2.12&x=130&y=93&zoom=9,其中X, Y坐标,和一个比例因素。比例因素从最大的17到最小的0。在zoom=17,整个地球在一个卫片中,在zoom=16,地球被卫成2*2片……以此类推,每一级比例使卫片多分为4片,所以在z比例因素中,水平和垂直的卫片数目为2^(17-z)个. 算法:从经纬度和一个比例因素中查找一个卫片坐标 latitude=90-latitude; longitude=180+longitude; double latTileSize=180/(pow(2,(17-zoom))); double longTileSize=360/(pow(2,(17-zoom))); int tilex=(int)(longitude/longTileSize); int tiley=(int)(latitude/latTileSize); 事实上,这个算法理论上是覆盖整个地区位置的但并不匹配整个地球。 服务: Google用了4个服务来平衡加载,它们是m1,m2,m3,m4 卫片大小: 每个卫片是一个256*256的png格式图片. 2) 对于卫星图片,编码有些不同。 象这样的链接:http://kh0.google.com/kh?n=404&v=8&t=trtqtt 。’t’参数编码图片定位。参数的长度指定一个zoom水平。 要看整个地球,用’t=t’,这给单一的卫片代表地球。在下一个zoom水平,这个卫片北分成4个象限,按顺时针方向: ‘q’ ‘r’ ‘s’ 和 ‘t’。看其中一个象限,增加一个字母在你所能看到的图象上。例如:’t=tq’,给’t’图象的左上象限。 算法:从经纬度和一个比例因素中查找一个卫片坐标 double xmin=-180; double xmax=180; double ymin=-90; double ymax=90; double xmid=0; double ymid=0; string location="t"; double halflat = latitude / 2; for (int i = 0; i < zoom; i++) { xmoy = (xmax + xmin) / 2; ymoy = (ymax + ymin) / 2; if (halflat > ymoy) //upper part (q or r) { ymin = ymoy; if (longitude < xmoy) { /*q*/ location+= "q"; xmax = xmoy; } else {/*r*/ location+= "r"; xmin = xmoy; } } else //lower part (t or s) { ymax = ymoy; if (longitude < xmoy) { /*t*/ location+= "t"; xmax = xmoy; } else {/*s*/ location+= "s"; xmin = xmoy; } } } 和前面一样,这个算法理论上是覆盖整个地区位置的但并不匹配整个地球。 服务: Google用了4个服务来平衡加载,它们是kh0, kh1, kh2 and kh3 卫片大小: 每个卫片是一个256*256的jpg格式图片 例子: http://kh0.google.com/kh?n=404&v=8&t=t 并且四个象限加载 :
|
|