google map是怎样工作的
Google Map 怎样工作
这是我对google map工作的一个分析,特别是地图卫片怎样被编码.google map 用简单的url预载入卫片的方式获得。这篇文章解释怎样建立从它们的地理坐标(经纬度)来建立url。
地图卫片编码
1) Google Map 用两个不同的算法来编码卫片们的定位。
比如说,有这么一个url: http://mt1.google.com/mt?n=404&v=w2.12&x=130&y=93&zoom=9,其中X, Y坐标,和一个比例因素。比例因素从最大的17到最小的0。在zoom=17,整个地球在一个卫片中,在zoom=16,地球被卫成2*2片……以此类推,每一级比例使卫片多分为4片,所以在z比例因素中,水平和垂直的卫片数目为2^(17-z)个.
算法:从经纬度和一个比例因素中查找一个卫片坐标
latitude=90-latitude;
longitude=180+longitude;
double latTileSize=180/(pow(2,(17-zoom)));
double longTileSize=360/(pow(2,(17-zoom)));
int tilex=(int)(longitude/longTileSize);
int tiley=(int)(latitude/latTileSize);
事实上,这个算法理论上是覆盖整个地区位置的但并不匹配整个地球。
服务:
Google用了4个服务来平衡加载,它们是m1,m2,m3,m4
卫片大小:
每个卫片是一个256*256的png格式图片.
2) 对于卫星图片,编码有些不同。
象这样的链接:http://kh0.google.com/kh?n=404&v=8&t=trtqtt 。’t’参数编码图片定位。参数的长度指定一个zoom水平。
要看整个地球,用’t=t’,这给单一的卫片代表地球。在下一个zoom水平,这个卫片北分成4个象限,按顺时针方向: ‘q’ ‘r’ ‘s’ 和 ‘t’。看其中一个象限,增加一个字母在你所能看到的图象上。例如:’t=tq’,给’t’图象的左上象限。
算法:从经纬度和一个比例因素中查找一个卫片坐标
double xmin=-180;
double xmax=180;
double ymin=-90;
double ymax=90;
double xmid=0;
double ymid=0;
string location="t";
double halflat = latitude / 2;
for (int i = 0; i < zoom; i++)
{
xmoy = (xmax + xmin) / 2;
ymoy = (ymax + ymin) / 2;
if (halflat > ymoy) //upper part (q or r)
{
ymin = ymoy;
if (longitude < xmoy)
{ /*q*/
location+= "q";
xmax = xmoy;
}
else
{/*r*/
location+= "r";
xmin = xmoy;
}
}
else //lower part (t or s)
{
ymax = ymoy;
if (longitude < xmoy)
{ /*t*/
location+= "t";
xmax = xmoy;
}
else
{/*s*/
location+= "s";
xmin = xmoy;
}
}
}
和前面一样,这个算法理论上是覆盖整个地区位置的但并不匹配整个地球。
服务:
Google用了4个服务来平衡加载,它们是kh0, kh1, kh2 and kh3
卫片大小:
每个卫片是一个256*256的jpg格式图片
例子:
http://kh0.google.com/kh?n=404&v=8&t=t
并且四个象限加载 :
- http://kh0.google.com/kh?n=404&v=8&t=tq
- http://kh1.google.com/kh?n=404&v=8&t=tr
- http://kh2.google.com/kh?n=404&v=8&t=ts
- http://kh3.google.com/kh?n=404&v=8&t=tt
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫