Google卫星地图的URL计算

写的重名了,Pany的原文:http://panyee.cnblogs.com/archive/2006/04/27/386914.html
只是用了下觉得算法不太对。
后来又找了下以前收集的在南京大学小百合BBS上的资料,找到了些有用的东西,摘录一些有用的文字
Google卫星地图是由256x256大小的jpeg图片拼接而成,每块图片的URL格式为“http://kh.google.com/kh?v=2&t=trstrqqstsrqttsttq”样。参数v与图片关系不大,主要是参数t起作用,它是“qrst”4个字符排列而成的字符串。为获取某经纬度的URL,就需要把经纬度转化为“qrst”字符串。 Google卫星地图在zoom=1时,全球就为一个256x256的图片,它的中心经纬度为(0,0),URL为“http://kh.google.com/kh?v=2&t=t”。zoom=2时裂化为4块,每块的编号为:左上”t=tq”,右上”t=tr”,右下“t=ts”,左下”t=tt”。依此类推,每放大一倍,每一小块都裂分为四,从左上到右下顺时针按qrst编号,裂分后的编码为裂分前的编号上小块的编号。
摘录一个网页:http://intepid.com/stuff/gmkh/,在这个网页上输入一个坐标和缩放级别就可以显示地图,并显示从世界图到详细图的逐层计算。
摘录两个代码,一个是上面这个网页中的JS代码,一个是小百合论坛上说的另一中Delphi的算法。

原文连接:
I was born at TSRRTRSQSQQQRQRTSS
有人知道google earth吗-小百合论坛

延伸:通过这样的算法可以看出Google切图的索引方式,那么能否推算出地图切割算法呢?

两个代码如下


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
= 0.5 * Math.log((1+Math.sin(y)) / (1 - Math.sin(y)));
*= 1.0/(2 * PI); // scale factor from radians to normalized
+= 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–)
{
// make sure we only look at fractional part
-= Math.floor(x);
-= Math.floor(y);
quad 
= quad + lookup.substr((x >= 0.5 ? 1 : 0+ (y >= 0.5 ? 2 : 0), 1);
// now descend into that square
*= 2;
*= 2;
}

return quad;
}


function getSatURL(zoom: integer; X, Y: double): string;
var
  wx, wy, cx, cy: 
double;
  tid: 
string;
  i: integer;
begin
  cx :
= 0;
  cy :
= 0;
  wx :
= 180;
  wy :
= 180;
  tid :
= 't';

  
for i := 1 to zoom-1 do
  begin
    
if (x >= cx) and (y >= cy) then
    begin
      tid :
= tid + 'r';
      cx :
= cx + wx / 2;
      cy :
= cy + wy / 2;
    end
    
else if (x >= cx) and (y < cy) then
    begin
      tid :
= tid + 's';
      cx :
= cx + wx / 2;
      cy :
= cy - wy / 2;
    end
    
else if (x < cx) and (y < cy) then
    begin
      tid :
= tid + 't';
      cx :
= cx - wx / 2;
      cy :
= cy - wy / 2;
    end
    
else
    begin
      tid :
= tid + 'q';
      cx :
= cx - wx / 2;
      cy :
= cy + wy / 2;
    end;
    wx :
= wx / 2;
    wy :
= wy / 2;
  end;
  result :
= 'http://kh.google.com/kh?v=2&t=' + tid;
end;

 
每次打开新选项卡时,都会从Himawari 8卫星体验地球的最新形象。 每次您打开新标签页时,此扩展程序都会显示从Himawari 8 Satellite中看到的地球的最新图像。 该卫星已由日本气象厅部署,每10分钟拍摄一次地球照片。 该扩展程序还支持来自GOES,DSCOVR和Meteosat卫星的图像。 更改:0.17.0添加GOES 17 0.16.1以降低的质量存储大图像,直到适合0.16.0借助@erget 0.15.0添加Meteosat图像借助@TheNeuralBit 0.14.0添加GOES 16自然图像删除GOES 13和15由于NASA不再支持它们,因此3.13.1更快的时间之前更新了0.12.0改进了动画初始化0.11.1了更快的动画0.11.0添加了GOES 16和动画0.10.0 Firefox支持0.9.0修复了Web扩展兼容性。 设置更改时立即加载新图像。 0.8.0与Firefox 0.6.1、0.7.0的Web扩展兼容:修复了GOES缓存0.6.0:添加了GOES 13和GOES 15图像(请参阅选项)。 解决DSCOVR的问题。 0.5.0:修复了DSCOVR的问题。 为DSCOVR添加增强的图像。 0.4.3:修复了Himawari彩色图像的最新日期的问题0.4.2:修复了DSCOVR EPIC基本URL 0.4.0:添加了DSCOVR图像并链接以进行在线浏览0.3.2:改进了样式0.3.1:修复了options.html的问题和options.js缺失0.3.0:添加选项以选择红外图像0.2.5:新的代理服务器0.2.2:更好的布局0.2.1:更快的加载,脱机支持功能:*加载最新图像,自动更新。 *自动以最佳分辨率(包括视网膜分辨率)加载图像。 如果需要多个图像,将自动下载图块。 *使用Google的缓存从图像服务器获取负载*将最新版本缓存在本地存储中(压缩的jpeg),并在您加载页面时立即显示。 然后加载最新图像。 *完全脱机支持*图像绘制在画布上,以便我们可以轻松缓存和加载它。 在Himawari 8的可见光和红外图像以及DSCOVR卫星上的EPIC摄像机的图像之间切换。 感谢CSS魔术,地球始终保持居中状态。 支持语言:English
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值