RSS DEV 社区
关注
地图是如何运作的:墨卡托投影、瓦片与你的 GPS 定位点
交互式地图(如 Google 地图)建立在两个基础数学概念之上。第一个是将地球球面投影到平面屏幕的方法;第二个是将该平面投影划分为更小、更易管理的方形图块网格,以实现高效加载。理解这些原理可以揭示地图应用的工作原理,并支持精确的位置计算。
核心挑战在于协调地球的球面性与平面的显示方式。这需要一种地图投影,即一套将经纬度转换为屏幕坐标的数学规则。大多数网络地图采用 Web 墨卡托投影,因为它保持角度和局部形状,确保方向一致且北方始终朝上。然而,这种投影会显著扭曲面积,导致极地地区在地图上不成比例地放大。
墨卡托投影通过将经度直接映射到 x 轴来展平地球。纬度则通过一个对数函数进行变换,该函数比赤道地区更大幅度地拉伸极地附近的区域。这一对数变换是墨卡托投影运作的关键。生成的投影世界随后被划分为由 256x256 像素图块组成的四叉树结构。
这些图块按照基于缩放级别的分层系统进行组织,每个图块由其缩放级别和 x、y 坐标唯一标识。这种分块方案使得地图只需加载世界的相关部分,从而实现流畅的滚动和交互。存在一个公式,可将特定的纬度和经度转换为其所在的精确图块。
`asinh(tan(lat))` 函数代表归一化后的墨卡托 y 坐标,适用于图块网格系统。通过截断该计算结果的小数部分,即可确定具体的图块,而小数部分则表示在该图块内的精确位置。当用户拖动地图时,应用程序只需计算屏幕上可见的图块并获取它们。
代表用户位置的蓝点正是这一过程的直接结果。设备的 GPS 提供纬度和经度,随后使用相同的墨卡托数学进行投影。系统确定对应的图块,并将标记放置在屏幕上的投影位置。理解这些底层原理,能将不透明的地图界面转化为可理解的系统。