https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames
1、Slippy Map 和tms的区别
Slippy Map 和 TMS(Tile Map Service)在瓦片组织和命名上有几个关键区别:
坐标原点
-
Slippy Map:
- 坐标原点在左上角。
- Y 轴从上到下增加。
-
TMS:
- 坐标原点在左下角。
- Y 轴从下到上增加。
瓦片行列号
-
Slippy Map:
- URL 格式为
/{z}/{x}/{y}.png
,其中 Y 从上到下增加。
- URL 格式为
-
TMS:
- URL 格式为
/{z}/{x}/{y}.png
,但 Y 需要进行翻转计算,因为 Y 从下到上增加。
- URL 格式为
Y 轴计算
-
Slippy Map:
- 使用正常的 Y 值。
-
TMS:
- Y 值需要翻转,计算方式为 ( Y = (2^Z - 1) - \text{slippy_y} )。
应用场景
-
Slippy Map:
- 常用于动态加载的在线地图,如 OpenStreetMap 和 Google Maps。
-
TMS:
- 多用于静态地图服务和 GIS 应用中。
总结
尽管两者都使用瓦片和缩放级别的概念,但它们的坐标系统和 Y 轴方向存在显著差异。这些差异影响了瓦片的请求和显示方式。
2、Slippy map tilenames
Slippy Map 瓦片命名方案是广泛用于 Web 地图(如 OpenStreetMap 和 Google Maps)的瓦片系统。以下是它的关键特征:
特点
-
瓦片大小:
- 每个瓦片是 256x256 像素。
-
坐标原点:
- 原点在左上角。
-
Y 轴方向:
- Y 轴从上到下增加。
-
瓦片行列号:
- 使用 (Z, X, Y) 来表示瓦片,其中:
- ( Z ) 是缩放级别。
- ( X ) 是瓦片的列号。
- ( Y ) 是瓦片的行号。
- 使用 (Z, X, Y) 来表示瓦片,其中:
计算公式
-
X 和 Y 的范围:
- ( X ) 和 ( Y ) 的范围是从 0 到 ( 2^Z - 1 )。
-
瓦片行列号计算:
- 给定一个经纬度 ((\text{lon}, \text{lat})) 和缩放级别 ( Z ):
- ( X = \left\lfloor \frac{{\text{lon} + 180}}{360} \times 2^Z \right\rfloor )
- ( Y = \left\lfloor \left(1 - \frac{{\ln(\tan(\text{lat}) + \sec(\text{lat}))}}{\pi}\right) \times 2^{Z-1} \right\rfloor )
- 给定一个经纬度 ((\text{lon}, \text{lat})) 和缩放级别 ( Z ):
URL 格式
- 瓦片通常通过 URL 请求,例如:
http://{server}/{z}/{x}/{y}.png
总结
Slippy Map 瓦片命名方案简洁且高效,适合动态 Web 地图的快速加载和显示。
3、openlayer 默认瓦片组织方式
OpenLayers 默认使用的瓦片组织方式与 Google Maps 相同,采用 XYZ 瓦片坐标系。具体特点如下:
1. 坐标系
-
XYZ 坐标系:
- Z 代表缩放级别,X 和 Y 分别代表瓦片的列和行。
- Y 轴从地图的北部开始,向南递增。
2. 投影方式
-
Web 墨卡托投影:
- 使用 EPSG:3857 投影(Spherical Mercator),适合全球在线地图。
3. 瓦片大小
-
标准瓦片大小:
- 每个瓦片通常是 256x256 像素。
4. 缩放级别
-
缩放级别:
- 从 0 开始,级别越高,地图的分辨率越高,细节越多。
5. 瓦片请求
-
URL 请求格式:
- 瓦片通过 URL 请求,通常包含 Z、X、Y 参数。例如:
http://{server}/{layer}/{z}/{x}/{y}.png
- 这种请求方式使得客户端可以动态加载所需的瓦片。
- 瓦片通过 URL 请求,通常包含 Z、X、Y 参数。例如:
6. 瓦片缓存
-
缓存机制:
- 支持浏览器端和服务器端缓存,提高地图加载速度和性能。
OpenLayers 的这种瓦片组织方式便于与其他主流地图服务(如 Google Maps、Bing Maps)进行集成和互操作。
4、tms 地图组织
TMS(Tile Map Service)是一种标准化的地图瓦片服务协议,其组织方式详细如下:
1. 坐标系
-
瓦片坐标系:
- 使用 ZXY 坐标系,其中 Z 是缩放级别,X 和 Y 是瓦片的列和行。
- Y 轴从地图的南部开始,向北递增。这与 Google Maps 的瓦片组织方式相反。
2. 投影方式
-
Web 墨卡托投影:
- 使用 EPSG:3857 投影,也称为 Spherical Mercator。它将地球投影到一个平面上,适合在线地图的展示。
3. 瓦片大小
-
标准瓦片大小:
- 每个瓦片通常是 256x256 像素。这个大小在大多数情况下提供了良好的性能和平衡的细节。
4. 缩放级别
-
缩放级别:
- 缩放级别从 0 开始,级别越高,地图的细节越多。
- 每增加一级缩放,地图的分辨率增加一倍,瓦片数量也增加四倍。
5. 瓦片请求
-
URL 请求格式:
- 瓦片通过 URL 请求,URL 通常包含 Z、X、Y 参数。例如:
http://{server}/{layer}/{z}/{x}/{y}.png
- 这种结构化的请求方式便于客户端动态请求所需的地图瓦片。
- 瓦片通过 URL 请求,URL 通常包含 Z、X、Y 参数。例如:
6. 瓦片缓存
-
缓存机制:
- 瓦片通常会被缓存,以减少服务器负载和加快客户端的响应速度。
7. 优缺点
-
优点:
- 简单易用,标准化程度高。
- 易于与其他地图服务集成。
-
缺点:
- 由于 Y 轴方向与其他一些地图服务相反,可能需要额外的转换工作。
TMS 是一种广泛应用的瓦片地图服务协议,适合用于需要标准化地图瓦片存储和访问的应用场景。
5、mapbox 矢量切片 遵循Slippy Map规范吗
Mapbox 矢量切片使用的瓦片系统与 Slippy Map 规范类似。它们都采用相同的坐标和缩放机制,即使用 ((z, x, y)) 来表示瓦片的位置和缩放级别。不过,Mapbox 矢量切片传输的是矢量数据,而不是栅格图像。
因此,虽然数据类型不同,但它们在瓦片坐标系统上是兼容的。
XYZ 瓦片方案规范详解**
1. 什么是 XYZ 瓦片方案?
XYZ 瓦片方案是一种广泛应用于 Web 地图服务的瓦片切片方式,它按照特定的规则将地图分割成固定大小的瓦片(通常是256x256像素),并通过 X(列)、Y(行)、Z(缩放等级)三个参数来定位和获取瓦片数据。这种方式也被称为“Slippy Map”瓦片方案,最初由 OpenStreetMap 和其他在线地图应用推广,现已成为事实上的行业标准。
2. XYZ 瓦片的坐标体系:
Z(缩放等级):表示地图的缩放级别,通常从 0 开始,数字越大,地图细节越丰富。每增加一级缩放,地图的细节会增加一倍,瓦片数量会以指数方式增长。
X(列):表示瓦片在水平方向上的索引,从地图的最左侧(西经180度)开始,向右(东经180度)递增。
Y(行):表示瓦片在垂直方向上的索引,从地图的最上方(北纬85.0511度)开始,向下(南纬85.0511度)递增。
3. 瓦片 URL 格式:
XYZ 瓦片通常通过标准化的 URL 格式来访问:
http://{服务器地址}/{缩放等级}/{列}/{行}.{格式}
例如:
https://tile.openstreetmap.org/10/512/384.png
其中:
-
{缩放等级}
:表示 Z 值,如 10。 -
{列}
:表示 X 值,如 512。 -
{行}
:表示 Y 值,如 384。 -
{格式}
:通常为png
、jpg
或pbf
(用于矢量瓦片)。
4. 坐标计算方法:
要将地理坐标(经度和纬度)转换为 XYZ 瓦片坐标,需要以下步骤:
投影转换:XYZ 瓦片方案使用 Web 墨卡托投影(EPSG:3857),需要将经纬度坐标转换为墨卡托投影坐标。
-
瓦片索引计算:
n = 2 ^ zoom x_tile = n * ((longitude + 180) / 360) y_tile = n * (1 - (ln(tan(latitude_rad) + sec(latitude_rad)) / π)) / 2
其中:
-
zoom
:缩放等级 Z。 -
latitude_rad
:纬度的弧度值。 -
x_tile
和y_tile
:对应的瓦片索引,需要取整。
-
5. XYZ 与 TMS 的区别:
Y 轴方向相反:在 XYZ 瓦片方案中,Y 轴从上到下递增,即顶部为 0,向下增加;而在 TMS(Tile Map Service)瓦片规范中,Y 轴从下到上递增。
URL 结构:尽管两者的 URL 结构类似,但在使用时需要注意 Y 轴的差异,必要时需要进行坐标转换。
6. XYZ 瓦片方案的优点:
简单直观:通过标准的 URL 结构,客户端可以方便地请求所需的瓦片。
高效缓存:统一的瓦片命名和结构便于缓存机制的实现,提升地图加载速度。
广泛支持:主流的地图服务和开发库(如 Google Maps、OpenStreetMap、Leaflet、OpenLayers 等)都支持 XYZ 瓦片方案。
7. 应用案例:
在线地图服务:如 Google Maps、Bing Maps、OpenStreetMap 等都使用了 XYZ 瓦片方案,为全球用户提供在线地图浏览。
Web GIS 开发:开发者在使用 Leaflet、OpenLayers、Mapbox GL JS 等库开发 Web 地图应用时,通常使用 XYZ 瓦片加载底图或叠加图层。
自建瓦片服务:机构或个人可以使用 Mapnik、TileMill、GeoServer 等工具生成符合 XYZ 方案的瓦片,搭建自有的地图服务。
8. 注意事项:
-
坐标转换:在需要与其他瓦片方案(如 TMS)互通时,需注意 Y 轴方向的差异,可能需要对 Y 值进行转换:
y_xyz = (2 ^ zoom) - 1 - y_tms
投影一致性:确保地图数据使用 Web 墨卡托投影,以保证瓦片的正确显示和位置对应。
瓦片格式:根据需求选择合适的瓦片格式,Raster 瓦片通常使用
png
或jpg
,Vector 瓦片则使用pbf
格式。
总结:
XYZ 瓦片方案是一种高效、标准化的地图切片和访问方式,已成为 Web 地图领域的主流规范。通过理解其坐标体系、瓦片结构和使用方法,开发者和 GIS 专业人员可以更好地应用和定制地图服务,满足多样化的业务需求。
OpenStreetMap(OSM)地图是否使用 TMS 瓦片规范?**
OpenStreetMap(OSM)不使用 TMS(Tile Map Service)瓦片规范,而是采用了更加广泛使用的 XYZ 瓦片方案。虽然 OSM 的瓦片数据可以经过处理后以 TMS 方式访问,但官方提供的瓦片服务以及大多数第三方瓦片服务器使用的都是 XYZ 方案。
详细解释:
-
瓦片方案的区别:
-
XYZ 瓦片方案:
- Y 轴方向:从 上到下 递增,即顶部为 Y=0,向下 Y 值增加。
- 使用情况:XYZ 是当今最常用的瓦片方案,被 Google Maps、Bing Maps、OSM 等主流在线地图服务采用。
- 优点:符合大多数计算机图形坐标系,Y 轴方向与屏幕坐标一致,使用直观。
-
TMS 瓦片规范:
- Y 轴方向:从 下到上 递增,即底部为 Y=0,向上 Y 值增加。
- 使用情况:TMS 是由 OSGeo 定义的规范,主要用于一些专业 GIS 领域和特定的开源项目。
- 特点:Y 轴方向与地理坐标一致,但与屏幕坐标相反。
-
-
OSM 的瓦片服务:
-
官方瓦片服务器:
- OSM 的官方瓦片服务器(
https://tile.openstreetmap.org/{z}/{x}/{y}.png
)使用 XYZ 方案。 - 瓦片的组织方式和命名遵循 XYZ 的规则,客户端请求时按照 XYZ 方案获取瓦片。
- OSM 的官方瓦片服务器(
-
第三方瓦片服务:
- 大多数第三方为 OSM 数据提供的瓦片服务也遵循 XYZ 方案,以确保与主流地图库的兼容性。
-
-
客户端处理:
-
加载 OSM 瓦片:
- 在使用客户端库(如 Leaflet、OpenLayers)加载 OSM 瓦片时,通常 不需要 设置
tms: true
。 - 这是因为 OSM 瓦片的 Y 轴方向与 XYZ 方案一致,设置
tms: true
会导致 Y 轴翻转,瓦片无法正确显示。
- 在使用客户端库(如 Leaflet、OpenLayers)加载 OSM 瓦片时,通常 不需要 设置
-
注意事项:
- 如果错误地将
tms
设为true
,客户端会以 TMS 方式请求瓦片,导致请求的 Y 值与服务器实际的瓦片不匹配。
- 如果错误地将
-
-
坐标转换:
-
从 TMS 到 XYZ 的转换:
- 如果您有 TMS 瓦片,需要在 XYZ 方案的客户端中加载,可以进行 Y 值的转换:
其中:y_xyz = (2^z - 1) - y_tms
-
y_tms
:TMS 方案的 Y 值。 -
y_xyz
:XYZ 方案对应的 Y 值。 -
z
:缩放等级。
-
- 如果您有 TMS 瓦片,需要在 XYZ 方案的客户端中加载,可以进行 Y 值的转换:
-
反之亦然:
- 如果需要在 TMS 方案的客户端中加载 OSM 的 XYZ 瓦片,也需要进行类似的转换。
-
-
为什么 OSM 选择 XYZ 方案:
-
兼容性:
- XYZ 已成为事实上的行业标准,主流的地图服务和客户端库都默认支持 XYZ 方案。
- 采用 XYZ 方案,OSM 的瓦片服务可以被更广泛的应用和开发者使用。
-
易于使用:
- XYZ 方案的 URL 结构简单直观,符合大多数开发者的习惯。
-
-
如何在 TMS 客户端中使用 OSM 瓦片:
-
方法一:坐标转换
- 在客户端加载瓦片时,手动对 Y 值进行转换,以匹配 OSM 瓦片的索引。
- 在一些客户端库中,可以自定义瓦片加载函数,进行 Y 值的调整。
-
方法二:使用代理服务
- 搭建一个代理服务器,在请求瓦片时自动进行 Y 值的转换,将 TMS 请求转换为 XYZ 请求。
-
方法三:重新生成瓦片
- 使用工具从 OSM 数据生成符合 TMS 规范的瓦片,但这通常需要较大的存储和计算资源,不太实际。
-
总结:
- OSM 地图主要采用 XYZ 瓦片方案,而非 TMS 瓦片规范。
- 如果需要在 TMS 方案的客户端中使用 OSM 瓦片,需要进行 Y 值的坐标转换。
- 在使用常见地图开发库(如 Leaflet、OpenLayers)加载 OSM 瓦片时,不要启用 TMS 模式(即确保
tms: false
)。
建议:
- 确认瓦片方案:在开发和使用地图服务时,首先确认瓦片服务采用的瓦片方案(XYZ 或 TMS),以便正确配置客户端。
-
注意参数配置:在使用地图库加载瓦片时,注意
tms
参数的设置,避免因设置错误导致地图无法正确显示。 - 坐标转换工具:如果需要在不同瓦片方案之间进行转换,可以编写或使用现有的工具函数,对瓦片的 X、Y、Z 值进行转换。
希望以上解答能帮助您更好地理解 OSM 地图瓦片方案以及如何在不同场景中正确使用。