Welcome 微信登录
编程资源 图片资源库

首页 / 软件开发 / 数据结构与算法 / 也说Google卫星地图的URL地址的qrts编码算法

也说Google卫星地图的URL地址的qrts编码算法2011-08-24 博客园 hai今天看到有人已经在讨论如何获取google卫星图片,见 http://www.cnblogs.com/tangf/archive/2006/07/23/457902.html? login=1&CommentID=1507040#Post的一篇博客,里面抄了JavaScript和delphi的代码过来,我在此 再重抄一遍免得大家找来找去。

算法思想如下:Google卫星图片服务器,由不同层次的256x256大小的jpeg图片无缝拼接而成,其编 码方式是按照qrst编码方法进行索引:

zoom=1时,全球只有一个256x256的图片,它的中心经纬度为(0,0),其URL为 “http://kh.google.com/kh?v=3&t=t”(大家可以把改URL复制到浏览器看下),其范围是地球按等 角纵切圆柱投影后,左右为从西径180度到东径180度,上下范围为从南180度到北180度(这里并不是完 全按地球南北只有90度进行划分),中点为赤道与中央子午线的交点,其编码为t。

当zoom=2时进行第二级编码,即从中点开始上下左右从中分成相等的四等份,从左上开始按顺时针方 向分别编为左上q,右上r,右下s,左下t,每一块的编码就为:tq,tr,ts,tt。

依此类推,每增大一级编码,就放大一倍,每一块都从中分为四块进行下一级编码,编码在前组编码 的基础上再分别加上q,r,s,t。即一级编码由一个字母组成,二级编码由两个字母组成,三级由三个字母 组成,其它级依次类推,不同地区提供下载的图层级数不尽相同,最多可分到21级。

对于全球全部卫片的管理来讲,这种编码方法是最好的,是典型的金字塔索引编码方法,采用这种编 码要得到某一个图块编号时,看似要对编号进行字串生成计算,其实不然,这种编码方法对于编号是可 以用数值加或减就能直接计算,然后做一个数值与字符的转换即可。这对于查找、平移、定位等操作非 常快速方便。

JavaScript代码如下:

1function GetQuadtreeURL_(lon, lat)
2{
3 var PI = 3.1415926535897;
4 var digits = 18; // how many digits precision
5 // now convert to normalized square coordinates
6 // use standard equations to map into mercator projection
7 var x = (180.0 + parseFloat(lon)) / 360.0;
8 var y = -parseFloat(lat) * PI / 180; // convert to radians
9
10 y = 0.5 * Math.log((1+Math.sin(y)) / (1 - Math.sin(y)));
11
12 y *= 1.0/(2 * PI); // scale factor from radians to normalized
13 y += 0.5; // and make y range from 0 - 1
14
15 var quad = "t"; // google addresses start with t
16 var lookup = "qrts"; // tl tr bl br
17
18 while (digits–) {
19 // make sure we only look at fractional part
20 x -= Math.floor(x);
21 y -= Math.floor(y);
22 quad = quad + lookup.substr((x >= 0.5 ? 1 : 0) + (y >= 0.5 ? 2 : 0), 1);
23 // now descend into that square
24 x *= 2;
25 y *= 2;
26 }
27 return quad;
28}