您的位置:首页 > 编程语言 > Go语言

关于Google卫星影像下载的若干问题

2007-07-07 11:14 731 查看
经纬度怎么填?

纬度必须是-90°~90°之间的实数,北正南负。 实际上只有大约-85°~85°内的范围是有效的。
经度必须是-180°~180°之间的实数,东正西负。

例如
(40°0'0"N, 116°0'0"E)可以写成(纬度=40, 经度=116)
(36°15'0"N, 115°30'0"W)可以写成(纬度=36.25, 经度=-115.5)

墨卡托投影 (Mercator Projection) 

Google Maps 使用的投影方法是墨卡托投影,右图就是整个地球的一个墨卡托投影。

经过墨卡托投影后的经线是均匀分布,在此主要介绍纬度的变换方法。

墨卡托投影把纬度为Φ (-90°<Φ<90°)的点投影到

y = ln(tan(45° + Φ/2))

这种投影算法使得赤道附近的纬线较密,极地附近的纬线较稀。极点被投影到无穷远,所以这种投影不适合在高纬度地区使用。Google Maps的选取的范围为 -π<y<π ,这样近似的有 -85°<Φ<85°

墨卡托投影详见
http://en.wikipedia.org/wiki/Mercator_projection

根据坐标计算url

这里引用river4season的一段话(略作了修改)。下文的 kh0.google.com 可被替换为 kh1.google.com 或 kh2.google.com 或 kh3.google.com

Google卫星地图是由256x256大小的jpeg图片拼接而成,每块图片的URL格式为“http://kh0.google.com/kh?n=404&v=7&t=trstrqqstsrqttsttq”样。主要是参数t起作用,它是“qrst”4个字符排列而成的字符串。为获取某经纬度的URL,就需要把经纬度转化为“qrst”字符串。
Google卫星地图在zoom=1时,全球就为一个256x256的图片,它的中心经纬度为(0,0),URL为“http://kh0.google.com/kh?n=404&v=7&t=t”。zoom=2时裂化为4块,每块的编号为:左上“t=tq”,右上“t=tr”,右下“t=ts”,左下“t=tt”。依此类推,每放大一倍,每一小块都裂分为四,从左上到右下顺时针按qrst编号,裂分后的编码为裂分前的编号上小块的编号。由以上分析可知,在知道了某地的经纬度之后,可以由最开始的全球地图不断细分,最后得到所需的URL。

坐标转换程序

int longitude2x(double longitude, int zoom) {
    return (int)((longitude + 180) / 360 * (1 << zoom));
}

int latitude2y(double latitude, int zoom) {
    return (int)((Math.log(Math.tan(Math.PI / 4 + latitude / 180 * Math.PI / 2)) / Math.PI + 1) / 2 * (1 << zoom));
}

根据转换后x,y的二进制表示就可以直接计算出url
注:程序中的zoom比上文说道的zoom少1。若要自己写程序,请注意y轴方向。

感谢“水木id: wcgbg”
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  google url 算法 360