原文地址

本文将介绍瓦片坐标相关知识,并提供高德地图、百度地图、谷歌地图的经纬度坐标与瓦片坐标的相互转换方法和类库。

背景

互联网地图服务商的在线地图都通过瓦片的方式提供,称为瓦片地图服务。最常见的地图瓦片是图片格式的,现在有的地图服务商也提供了矢量的瓦片数据(例如 GeoJSON 格式的矢量数据),然后在用户端使用Canvas渲染成图片,如node-canvas实现百度地图个性化底图绘制。

在进行地图开发时,为获取特定经纬度所在区域的瓦片和获取瓦片上像素点对应的经纬度,经常需要进行经纬度坐标与瓦片坐标、像素坐标的相互转换。本文将介绍瓦片坐标相关知识,并提供高德地图、百度地图、谷歌地图的经纬度坐标与瓦片坐标的相互转换方法和转换类库–tile-lnglat-transform。

经纬度信息 – > 瓦片图片
瓦片图片上的像素点 – > 经纬度

主要经纬度坐标系

国际标准的经纬度坐标是 WGS84,Open Street Map、外国版的 Google Map 都是采用 WGS84;高德地图使用的坐标系是GCJ-02;百度地图使用的坐标系是BD-09。高德地图和百度地图都提供了在线的单向坐标转换接口,将其他坐标系换化到自己的坐标系,但这种转换受限于http url请求字段长度和网络请求延迟,批量处理并不实用。离线相互转换可以通过开源 JavaScript 库 coordtransform 实现,误差在10米左右。

虽然各地图服务商经纬度坐标系不同,但某一互联网地图的经纬度坐标与瓦片坐标相互转换只与该地图商的墨卡托投影和瓦片编号的定义有关,跟地图商采用的大地坐标系标准无关。

墨卡托投影

使用经纬度表示位置的大地坐标系虽然可以描述地球上点的位置,但是对于地图地理数据在二维平面内展示的场景,需要通过投影的方式将三维空间中的点映射到二维空间中。地图投影需要建立地球表面点与投影平面点的一一对应关系,在互联网地图中常使用墨卡托投影。墨卡托投影是荷兰地理学家墨卡托于1569年提出的一种地球投影方法,该方法是圆柱投影的一种。

投影的更多内容,可以查看地图投影的N种姿势。



墨卡托投影假设地球仪表面透明,且它的球心有光源,那么地球仪表面的大陆轮廓就被投影到了纸面上。用笔在纸面上记录下轮廓后,将直面展开,就得到了墨卡托投影的世界地图。

值得注意的是:

  • 墨卡托投影并不是一种坐标系,而是为了在二维平面上展示三维地球而进行的一种空间映射。所以在GIS地图和互联网地图中,虽然用户看到的地图经过了墨卡托投影,但依然使用经纬度坐标来表示地球上点的位置。
  • 在地图绘制和地图可视化时,就需要将地图数据使用投影的方式来呈现。

绝大多数地图服务商都采用了 Web Mercator 进行投影,瓦片坐标系的不同主要是投影截取的地球范围不同、瓦片坐标起点不同。

瓦片切割和瓦片坐标

对于经过墨卡托投影为平面的世界地图,在不同的地图分辨率(整个世界地图的像素大小)下,通过切割的方式将世界地图划分为像素为 256×256256\times256256×256 的地图单元,划分成的每一块地图单元称为地图瓦片。

地图瓦片具有以下特点:

  • 具有唯一的瓦片等级(Level)和瓦片坐标编号(tileX, tileY)。
  • 瓦片分辨率为 256×256256\times256256×256,也就是说无论地图分辨率为多少,瓦片图像的分辨率是不变的,永远都是 。
  • 最小的地图等级是0,此时世界地图只由一张瓦片组成。
  • 瓦片等级越高,组成世界地图的瓦片数越多,可以展示的地图越详细。
  • 某一瓦片等级地图的瓦片是由低一级的各瓦片切割成的4个瓦片组成,形成了瓦片金字塔。

高德地图瓦片坐标

坐标系定义

高德地图瓦片坐标与 Google Map、Open Street Map 相同。高德地图的墨卡托投影截取了纬度(约85.05ºS, 约85.05ºN)之间部分的地球,使得投影后的平面地图水平方向和垂直方向长度相等。将墨卡托投影地图的左上角作为瓦片坐标系起点,往左方向为X轴,X轴与北纬85.05º重合且方向向左;往下方向为Y轴,Y轴与东经180º(亦为西经180º)重合且方向向下。瓦片坐标最小等级为0级,此时平面地图是一个像素为256*256的瓦片。

在某一瓦片层级 Level 下,瓦片坐标的 X 轴和 Y 轴各有 2Level2^{Level}2Level 个瓦片编号,瓦片地图上的瓦片总数为 2Level×2Level2^{Level}\times2^{Level}2Level×2Level。


如上图所示,此时X方向和Y方向各有4个瓦片编号,总瓦片数为16。中国大概位于高德瓦片坐标的(3,1)中。

坐标转换图解


从高德地图坐标转换图解中可以看出,高德地图的坐标转换具有以下特点:

  • 所有坐标转换都在某一瓦片等级下进行,不同瓦片等级下的转换结果不同。
  • 经纬度坐标可以直接转换为瓦片坐标和瓦片像素坐标。
  • 瓦片像素坐标需要结合其瓦片坐标才能得到该像素坐标的经纬度坐标。

坐标转换公式

方法参考:Slippy map tilenames

地图瓦片坐标系定义及计算原理相关推荐

  1. 国内主要地图瓦片坐标系定义及计算原理

    国内主要地图瓦片坐标系定义及计算原理 作者 CntChen 关注 2016.05.10 20:05* 字数 3144 阅读 1571评论 0喜欢 9 本文将介绍瓦片坐标相关知识,并提供高德地图.百度地 ...

  2. ROC的定义与计算原理

    ROC的定义与计算原理 这个链接说的很详细 点击查看ROC曲线的定义与计算原理 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页.如果你想学习如何使用M ...

  3. 瓦片坐标系、经纬度、像素坐标的转换

    参考: 国内主要地图瓦片坐标系定义及计算原理 Slippy map tilenames coordtransform 坐标转换 点击查询瓦片信息 node-canvas实现百度地图个性化底图绘制

  4. WebGIS 瓦片地图引擎实现之——地图瓦片加载计算原理介绍

    1. 背景 1.1 地图瓦片之前 在地图瓦片技术使用之前,用户使用在线地图,一般都是客户端把将要显示的地理范围传送到服务端,服务器端将地理范围内的地理数据都查询出来,然后在服务端按照预先定义的专题地图 ...

  5. 瓦片地图服务与地图瓦片原理

    本文字数:9099字 预计阅读时间:25分钟 这里,首先我们从概念出发,搞清楚瓦片地图服务以及地图瓦片的原理,读起来似乎有点拗口,但是从字面上看得出它们必定拥有着区别与联系,前者是WebGIS中的一个 ...

  6. 关于45°角度地图坐标的计算原理 - LVin_A

    首先贴出代码,下面的代码是将屏幕点击的坐标转换成45°角度地图中的坐标. -(CGPoint) tilePosFromLocation:(CGPoint)location tileMap:(CCTMX ...

  7. GIS地图瓦片之缩放级别原理

    GIS地图瓦片之缩放级别原理 缩放级别.比例尺.分辨率简单关系 缩放级别越大,比例尺越大,分辨率越高 详情查看点击跳转www.giserdqy.com

  8. 地图瓦片相关学习总结

    瓦片地图 瓦片地图金字塔模型是一种多分辨率层次模型,从瓦片金字塔的底层到顶层,分辨率越来越低,但表示 的地理范围不变. 中文名 瓦片地图 模    型层次模型 软    件ArcGIS软件 发     ...

  9. 高德离线地图瓦片坐标偏移纠偏

    对于地图坐标偏移,以leaflet为例,有如下解决办法 方法1.修改leaflet源码,解决地图坐标偏移问题 方法2.将点位真实的经纬度经过偏移算法,添加到加密的地图上 方法3.直接对离线地图瓦片进行 ...

  10. 车载GNSS/INS/LiDAR坐标系定义与理解

    目录 一.基本坐标系 1.1 地心惯性坐标系(Inertial coordinate system,i系) 1.2 地心地固坐标系(Earth-Centered, Earth-Fixed,e系) 1. ...

最新文章

  1. 刻意练习:LeetCode实战 -- Task01. 两数之和
  2. iOS架构-cocoapods打包静态库(依赖私有库、开源库、私有库又包含静态库)(14)
  3. 这 31 条,或给你的数据分析工作一些启发
  4. POJ - 1236 Network of Schools(强连通缩点)
  5. Elasticsearch自定排序插件实现
  6. MyEclipse 8.0注冊码+原版下载_Java开发软件
  7. python机器学习常用包
  8. 有了这组新年元旦海报PSD模板素材,不愁晚交稿!
  9. 小度智能音响拆解 芯片_拆解报告:小度人工智能音箱1S
  10. matlab 二维数组转一维数组中,将二维数组映射到一维数组上
  11. (2)python_enumerate
  12. Android 程序清单详解
  13. Eclipse中添加外部Web浏览器
  14. qt导出word模板(模块化程序,直接调用保存数据到指定路径)
  15. win7 使用自带无线网卡分享无线网络
  16. 浅谈 css的zoom属性
  17. nodejs+vue+elementui鲜花销售商城管理系统410
  18. mysql5.7 yum 密码_yum 安装 Mysql 5.7,忘记密码解决方案
  19. Project的介绍
  20. 【linux】解决设置CentOS7虚拟机使用静态IP的常见错误解决方案

热门文章

  1. 历史经验之QT在WIN32下编译环境配置步骤
  2. Java的发展 Java在不同系统下的开发环境 Java语言特性 Java实现跨平台
  3. cjson构建_利用cJSON解析和创建JSON字符串
  4. Deecamp20 项目提交【如何用pcdet(second)跑自己的数据】
  5. C语言--逻辑判断题
  6. 如何用PPT制作一份可视化数据图表?
  7. 服务器系统安装net,.Net Framework的安装教程
  8. 操作系统的工作流程(流程图表示)
  9. java启动另一个程序_Java操作另一个Java程序使其重启的简单实现
  10. 金盾高级视频加密系统使用教程与经验分享 (金盾视频加密系统跨平台版)