Google地图数据算法

用Google地图的API给一个项目做了个地图。然后顺带着研究了一下google的图片存取算法,感觉不是很难。
好下面我们来看看,我们学校的图。
Google Maps与Google Earth中的每个级别的每一副图片都有一个URL,例如下面这幅我们学校的图的地址是 http://kh.google.com/kh?v=3&t=trstrqqrsstttqtss (这个就是图的URL)
      
URL中的变量v=3代表,卫星图的投影算法采用 Mercator projection算法,v=2代表另外一种算法(已不再支持)

变量t=trstrqqrsstttqtss,这个就是这张图片的编码了,trstrqqrsstttqtss是由一种类似“Q树”的算法计算的。他将一幅图片的左上、右上、左下、右下用q,r,t,s分别表示。然后依次递归下去。最上层的是t

如果我想看最顶级别的世界地图那么编码就是“t”,URL如下:
http://kh.google.com/kh?v=3&t=t  点击左边的链接你将看到世界地图(最大的级别)。

如果我继续找到中国所在的图(实际上就是上图中的右上角部分),那么编码是“tr”,URL如下:
http://kh.google.com/kh?v=3&t=tr 点击左边的链接你将看到上幅世界地图的右上角部分(也就是包含中国的部分)。
依次类推你就能找到你需要找的位置的地图了。(下图是对这个操纵的一个简单解释,右上角用黄色框表示“r”)

下面是一个工具,在这个工具中输入你的经纬度,他将自动递归每一幅图像。你可以一步步看看google maps是怎么找到你的位置的。http://intepid.com/stuff/gmkh/

关于Q-tress可以找本数据结构的书学习一下,下面是我从维基百科中找到的图

下面是javascript对于此算法的程序(包含编码以及经纬度)

function GetQuadtreeAddress (long, lat )
{
var PI = 3.1415926535897 ;
var digits = 18 ; // how many digits precision
// now convert to normalized square coordinates
// use standard equations to map into mercator projection
var x = ( 180.0 + parseFloat (long )) / 360.0 ;
var y = - parseFloat (lat ) * PI / 180 ; // convert to radians
y = 0.5 * Math. log (( 1+ Math. sin (y )) / ( 1 - Math. sin (y )));
y *= 1.0/ ( 2 * PI ); // scale factor from radians to normalized
y += 0.5 ; // and make y range from 0 - 1
var quad = "t" ; // google addresses start with t
var lookup = "qrts" ; // tl tr bl br
while (digits– ) // (post-decrement)
{
// make sure we only look at fractional part
x -= Math. floor (x );
y -= Math. floor (y );
quad = quad + lookup. substr ((x >= 0.5 ? 1 : 0 ) + (y >= 0.5 ? 2 : 0 ), 1 );
// now descend into that square
x *= 2 ;
y *= 2 ;
}
return quad ;
}

以上内容参考:
http://intepid.com/2005-07-17/21.50/ 

转载于:https://www.cnblogs.com/bluespot/archive/2009/05/20/1467771.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值