简介
这是我的谷歌地图是如何工作的分析,以及专门的瓷砖是如何编码。谷歌地图使用预渲染,可以用一个简单的URL获得的瓷砖。本文介绍了如何建立一个从它的地理坐标(经度/纬度)瓷砖的URL。地图平铺编码
谷歌地图使用两种不同的算法进行编码的瓷砖的位置。
对于谷歌地图,瓷砖的URL看起来像http://mt1.google.com/mt?n=404amp V = w2.12amp; X =130安培; Y =93安培;变焦= 9用X和y为瓷砖的坐标和缩放因子。变焦倍数从17(完全缩小)到0(最高清晰度)。 17的一个因素,整个地球是在一瓦,其中x = 0和y = 0。在16的一个因素,地球被分为2x2的部分,其中0lt; = XLT; = 1和0lt; = YLT; = 1,并在每个变焦步骤,每个tile是划分成4个部分。因此,在一个缩放因子Z,横向和纵向的瓷砖数量是2 ^(17 - Z)算法找到一个瓷砖从一个纬度,经度和变焦倍数//correct the latitude to go from 0 (north) to 180 (south),
// instead of 90(north) to -90(south)
latitude=90-latitude;
//correct the longitude to go from 0 to 360
longitude=180+longitude;
//find tile size from zoom level
double latTileSize=180/(pow(2,(17-zoom)));
double longTileSize=360/(pow(2,(17-zoom)));
//find the tile coordinates
int tilex=(int)(longitude/longTileSize);
int tiley=(int)(latitude/latTileSize);
其实这种算法理论所涵盖的区域不匹配整个地球。服务器
谷歌使用四台服务器来平衡负载。这些都是mt0,MT1,MT2和MT3。拼贴大小
每一层是一个256x256的PNG图片。卫星图像,编码是有点不同
的URL看起来像http://kh0.google.com/kh?n=404amp; V =8安培; T = trtqtt"T"参数编码图像的位置。该参数的长度表示缩放级别。
看到整个地球,只要用"T = T"。这给出了一个单一的瓷砖,代表地球。对于未来的缩放级别,这种瓷砖划分成4个象限的,从顶部顺时针左:'Q''R''S'和'T'。要看到一个象限,只是追加该象限的图像,您正在查看的信。例如:"T = TQ"会给左上角象限的"T"的形象。所以在每个缩放级别... ...算法找到一个瓷砖从一个纬度,经度和变焦倍数{C}
同样,这个算法是相当的理论,作为覆盖的区域不匹配完整的地球。服务器
谷歌使用四台服务器来平衡负载。这些都是kh0,kh1,KH2和kh3。拼贴大小
每一层是一个256x256的JPG图片。墨卡托投影
由于墨卡托投影,上面的算法必须进行修改。在墨卡托投影,两个平行之间的间距不恒定。所以一瓦所描述的角度取决于它的垂直位置。
来计算瓷砖的垂直数量从纬度一段代码。
涵盖区/**<summary>Get the vertical tile number from a latitude
using Mercator projection formula</summary>*/
private int getMercatorLatitude(double lati)
{
double maxlat = Math.PI;
double lat = lati;
if (lat > 90) lat = lat - 180;
if (lat < -90) lat = lat + 180;
// conversion degre=>radians
double phi = Math.PI * lat / 180;
double res;
//double temp = Math.Tan(Math.PI / 4 - phi / 2);
//res = Math.Log(temp);
res = 0.5 * Math.Log((1 + Math.Sin(phi)) / (1 - Math.Sin(phi)));
double maxTileY = Math.Pow(2, zoom);
int result = (int)(((1 - res / maxlat) / 2) * (maxTileY));
return (result);
}
理论上,纬度应该从-90到90,但实际上由于墨卡托投影,它发送到无穷的两极,覆盖的区域是一个比-90至90。事实上的最高纬度是一个PI(3.1415926),使上墨卡托投影,使用的公式:Y = 1 / 2((1罪(LAT))/(1 - SIN(LAT)))(见链接墨卡托段)。保护
谷歌地图使用一种保护机制,以保持良好的服务质量。如果人们太多的要求,谷歌地图将它的IP地址添加到黑名单,并发送一个不错的消息:谷歌错误
,我们深表歉意... ... ... ...但您的查询看起来类似于来自计算机病毒或间谍软件应用程序的自动请求。为了保护我们的用户,我们无法处理您的请求现在。我们将尽快恢复您的访问,所以再试一次。在此期间,如果您怀疑您的计算机或网络已被感染,您可能希望运行的病毒检查程序或间谍软件去除,以确保您的系统是无病毒和其它的寄生软件。我们对带来的不便表示歉意,并希望我们将再次看到你在Google上。
为了避免被列入黑名单,开发人员应该使用缓存机制,如果可能的话...星期六的例子
{A}整个地球。{S0}
和四个相应象限:(注4服务器的名称来平衡负载)http://kh0.google.com/kh?n=404amp; V =8安培T = TQhttp://kh1.google.com/kh?n=404amp; V =8安培T = TRhttp://kh2.google.com/kh?n=404amp; V =8安培T = TShttp://kh3.google.com/kh?n=404amp; V =8安培T = TT{S2}{S3}{S4}的地图的例子
整个地球。{五}
和相应的四个象限:http://mt0.google.com/mt?n=404amp; V =安培; X =0安培; Y =0安培;变焦= 16http://mt1.google.com/mt?n=404amp; V =安培; X =1安培; Y =0安培;变焦= 16http://mt2.google.com/mt?n=404amp; V =安培; X =0安培; Y =1安培;变焦= 16http://mt3.google.com/mt?n=404amp; V =安培; X =1安培; Y =1安培;变焦= 16{中六}{七}{S8}
尼斯,是不是?
C语言编写的示例代码,请参阅本文顶部下载。历史文章编辑:谷歌地图已经改变了地图v参数。为2.12,当我写这篇文章,但它现在的2.66。我想这是一个版本号或类似的东西... ...