瓦片系统
瓦片系统为在 OpenLayers 中管理瓦片地图数据提供基础基础设施。它处理瓦片网格定义、地理坐标和瓦片坐标之间的坐标系转换、用于瓦片请求的 URL 生成,以及用于高效瓦片检索的空间索引。该系统构成了所有瓦片数据源(包括 XYZ、WMTS 和其他基于瓦片的服务)的主干。
有关使用此系统的特定瓦片源,请参阅Source 系统。有关瓦片如何渲染的详细信息,请参阅Canvas 渲染管线。
核心架构
瓦片系统由三个主要组件组成,它们协同工作以管理基于瓦片的数据流:
瓦片系统组件架构
瓦片坐标系
瓦片坐标系使用三元素数组 [z, x, y] 表示瓦片,其中 z 是缩放级别,x 是列,y 是行。该系统为索引和寻址瓦片网格中的单个瓦片提供基础。
瓦片坐标操作
| 操作 | 函数 | 目的 |
|---|---|---|
| 创建 | createOrUpdate(z, x, y) | 创建或更新瓦片坐标 |
| 键生成 | getKey(tileCoord) | 创建字符串键 "z/x/y" |
| 解析 | fromKey(key) | 将字符串键解析为坐标 |
| 哈希 | hash(tileCoord) | 创建用于索引的数字哈希 |
| 验证 | withinExtentAndZ(tileCoord, tileGrid) | 检查边界和缩放有效性 |
瓦片坐标转换流程
瓦片网格管理
TileGrid 类管理地理坐标和瓦片坐标之间的数学关系。它定义分辨率级别、瓦片大小、原点和空间范围,这些确定了连续地理空间如何离散化为瓦片。
TileGrid 配置
关键 TileGrid 操作
| 方法 | 行范围 | 目的 |
|---|---|---|
| forEachTileCoord() | 235-242 | 迭代范围内的瓦片 |
| getTileRangeForExtentAndZ() | 426-434 | 获取范围/缩放的瓦片范围 |
| getTileCoordForCoordAndZ() | 571-579 | 地图坐标到瓦片坐标 |
| getTileCoordExtent() | 458-467 | 瓦片坐标到地理范围 |
| getZForResolution() | 634-641 | 分辨率到缩放级别 |
| getFullTileRange() | 608-615 | 缩放级别的完整瓦片范围 |
URL 生成系统
URL 生成系统从模板和瓦片坐标创建瓦片请求 URL。它支持基于模板的 URL 构造,具有占位符替换和跨多个服务器端点的负载均衡。
URL 模板处理
URL 模板功能
URL 生成系统支持几种模板占位符类型:
| 占位符 | 目的 | 示例 |
|---|---|---|
{z} | 缩放级别 | {z} → 10 |
{x} | 瓦片列 | {x} → 512 |
{y} | 瓦片行 | {y} → 256 |
{-y} | 反转 Y 坐标 | {-y} → 767(当 maxY=1023 时) |
{1-3} | 服务器选择 | {1-3} → 1、2 或 3 |
{-y} 占位符需要 TileGrid 实例,通过使用 getFullTileRange() 确定缩放级别的最大 Y 值来计算反转 Y 坐标。
与数据源的集成
瓦片系统通过标准化接口与各种瓦片源集成,该接口结合了瓦片网格、URL 函数和坐标管理:
瓦片源集成模式
瓦片系统提供数学和 URL 生成基础,使瓦片源能够高效加载、缓存和显示跨不同坐标系和服务器配置的瓦片地理数据。