# MVT Mapbox 矢量瓦片 PMTiles 谷歌投影与 Tilelive 编码审计器

按 Mapbox Vector Tile Specification 2.x 审计 .mvt/.pbf 矢量瓦片与 PMTiles v3 归档：解码 protobuf Layer/Feature/Value 表，校验 MoveTo/LineTo/ClosePath 几何命令流、环绕向与标签索引，检查 Web Mercator 谷歌瓦片 XYZ 边界，解码 PMTiles v3 目录，并标记瓦片大小与要素数预算。

> 标准页面: https://elysiatools.com/zh/tools/mvt-mapbox-vector-tile-pmtiles-google-mvt-projection-and-tilelive-encoding-auditor

- **分类:** Geography

- **关键词:** mapbox 矢量瓦片, mvt 审计, pmtiles 检视, 矢量瓦片规范, web mercator 瓦片范围, hilbert tileid, tilelive 编码预算, protobuf 几何解码

## 概述

纯 TypeScript 线格式审计：手写 protobuf 读取器解码 Tile.layers → Layer(version/name/features/keys/values/extent) → Feature(tags/type/geometry) → Value（string/float/double/int/uint/sint-zigzag/bool）。几何解释器严格遵循规范 §4.3——CommandInteger = id | count<<3、zigzag 参数整数、dX/dY 不得同时为 0、ClosePath 仅限多边形且 count 为 1、POINT 为单条 MoveTo、LINESTRING 为 MoveTo+LineTo 重复——并用测量员公式判定环：外环面积必须为正（y-down 坐标系下视觉顺时针）、内环为负。瓦片大小与要素数预算沿用 tilelive/tippecanoe 实践（约 500 KB 与约 10000 要素为复核阈值）。PMTiles v3 按规范解码：127 字节头部、gzip/brotli 内部压缩、Hilbert 曲线上的 delta TileID varint 目录、run-length 瓦片条目与 run-length 0 叶子指针、聚类与一致性检查，并支持按 z/x/y 提取瓦片。Web Mercator 面板校验谷歌瓦片方案 XYZ（0 ≤ x,y < 2^z）并计算地理包围盒与分辨率。

## 输入项

- **瓦片文件** (file): Upload .mvt / .pbf / .pmtiles
- **瓦片层级 (z)** (number): e.g. 10 — enables the Web Mercator bbox and PMTiles lookup
- **瓦片列 (x)** (number): e.g. 512
- **瓦片行 (y)** (number): e.g. 384

## 适用场景

- 在 Tippecanoe、Tilelive 或自定义矢量切片管线生成 MVT/PBF 瓦片后，需要验证要素编码、标签索引与多边形闭合环是否符合 MVT 2.x 规范时。
- 排查 Web 地图渲染异常（如多边形内外环镂空失效、几何自相交、零长度位移错误或瓦片体积超标导致卡顿）时。
- 需要检视 PMTiles v3 归档的 127 字节头部信息、Hilbert 曲线 TileID 目录分布，或按 z/x/y 瓦片坐标提取单瓦片进行深度分析时。

## 工作原理

- 解析上传的二进制文件：对 .mvt/.pbf 直接解码 Protobuf 结构，对 .pmtiles 则解包 127 字节头部、解压内部元数据并索引 Hilbert 树目录以提取指定瓦片。
- 遍历 Tile.layers 数据表，将 Feature 的 tags 映射还原为 keys 与 values 属性字典，并严格依据 MVT §4.3 命令规范解码 zigzag 坐标偏移量。
- 利用测量员公式（鞋带公式）校验多边形环面积与绕向（y-down 视图下外环为正/顺时针、内环为负/逆时针），标记退化几何或格式违规。
- 结合输入的瓦片坐标（z/x/y）计算 Web Mercator 地理包围盒与分辨率，并对照 ~500 KB 体积与 ~10,000 要素阈值输出预算评估报告。

## 使用案例

- 矢量切片生产管线（Tippecanoe / Martin / Tegola）的质量验收与格式合规性检查。
- PMTiles v3 归档结构的健康度体检，包含目录压缩比、聚类状态与特定瓦片快速抽取。
- 定位前端 Mapbox GL JS / MapLibre GL 渲染时出现的面要素破损、标签属性丢失或瓦片加载超载问题。

## 常见问题

### 支持哪些文件格式的审计？

支持单个 Mapbox 矢量瓦片（.mvt、.pbf、.gz）以及 PMTiles v3 归档文件（.pmtiles）。

### 为什么需要提供瓦片层级 (z)、列 (x) 和行 (y) 参数？

用于计算瓦片的 Web Mercator 经纬度包围盒与地面分辨率；分析 PMTiles 归档时，需依据 z/x/y 在 Hilbert 目录中定位并提取目标瓦片。

### 多边形绕向（Winding Order）校验有什么作用？

MVT 规范要求外环面积在 y 轴朝下坐标系中为正（视觉顺时针），内环（孔洞）为负。绕向错误会导致地图渲染引擎无法正确渲染镂空面。

### 工具的瓦片大小与要素预算阈值是多少？

参考 tilelive 与 tippecanoe 的行业实践，默认将单个瓦片 500 KB 大小及 10,000 个要素设为性能复核预警阈值。

### 文件上传后数据是否安全？

所有 Protobuf 解析、PMTiles 目录遍历与几何审计均在浏览器纯 TypeScript 环境中完成，数据不会上传至外部服务器。

## 相关工具

- [JavaScript反混淆器](https://elysiatools.com/zh/tools/javascript-deobfuscator): 反混淆和分析混淆的JavaScript代码，提高可读性和理解性
- [国际象棋 FEN / PGN 与 Elo 等级分辅导器](https://elysiatools.com/zh/tools/chess-fen-pgn-elo-rating-tutor): 解析并校验 FEN 棋盘快照、PGN/SAN 棋谱；按胜/和/负与对手 rating 用 Elo 公式投影新等级分；附 Lichess/Chess.com 段位说明
- [CSV转换器](https://elysiatools.com/zh/tools/csv-transformer): 转换和处理CSV数据，支持列操作、计算和数据类型转换。 操作示例： • 重命名列: \[{"type": "rename", "column": "旧列名", "new_name": "新列名"}\] • 添加计算列: \[{"type": "add_column", "new_column": "总计", "formula": "价格 * 数量"}\] • 删除列: \[{"type": "remove_column", "remove_column": "要删除的列名"}\] • 转换数据类型: \[{"type": "convert_type", "convert_column": "年龄", "target_type": "number"}\] • 计算值: \[{"type": "calculate", "target_column": "总计", "expression": "价格 * 税率 + 运费"}\] • 过滤行: \[{"type": "filter_values", "filter_column": "状态", "operator": "equals", "value": "激活"}\]
- [Lotka–Volterra 捕食者-猎物模型动态模拟器](https://elysiatools.com/zh/tools/lotka-volterra-predator-prey): 求解并可视化经典 Lotka–Volterra 捕食者-猎口方程组 dN/dt = rN − aNP、dP/dt = bNP − mP：RK4 数值积分（6000 步，带 Hamilton 守恒量 V = bN − m·ln N + aP − r·ln P 漂移监控），输出猎物/捕食者相位振荡的时间序列曲线与闭合轨道相平面图（含共存平衡点 N*=m/b、P*=r/a 与线性化周期 T ≈ 2π/√(rm)）。自动检测周期数量与实测周期、种群振幅范围，并说明中性振荡的结构不稳定性——周期振幅完全由初始条件决定，真实系统会因密度依赖而阻尼或因富集悖论而自激。
- [Parquet 布隆过滤器/区间图/字典与列统计剪枝评估器](https://elysiatools.com/zh/tools/parquet-bloom-filter-zonemap-dictionary-and-column-statistics-pruner-evaluator): 解码 Parquet thrift footer 并量化谓词下推剪枝：区间图 min/max、split-block 布隆过滤器（XXH64）、字典比率与编码，按行组给出示例 WHERE 子句的剪枝节省估算。
- [PDF文本提取器](https://elysiatools.com/zh/tools/pdf-text-extractor): 从PDF文档中提取文本内容，支持页面选择、格式选项和多语言处理
- [Word文本提取器](https://elysiatools.com/zh/tools/word-text-extractor): 从Word文档中提取文本内容，支持格式选项、段落选择和多语言处理
- [SVG 精简与分析工具](https://elysiatools.com/zh/tools/svg-minifier-analyzer): 分析 SVG 标记，移除冗余元素，缩小体积，直观看到前后差异，并导出清理后的文件

## 示例

- [MVT / PMTiles 示例](https://elysiatools.com/zh/samples/mvt-pmtiles-samples): 供 Mapbox 矢量瓦片与 PMTiles 审计工具使用的矢量瓦片夹具
- [十六进制/Unicode转换样本](https://elysiatools.com/zh/samples/text-hex-unicode-formats): 十六进制和Unicode转义序列转换的测试样本
- [Web Go 文件操作示例](https://elysiatools.com/zh/samples/web-file-operations-go): Web Go 文件操作示例，包括文本文件读写、文件复制移动、目录遍历和文件验证
- [Web Python 文件操作示例](https://elysiatools.com/zh/samples/web-file-operations-python): Web Python 文件操作示例，包括文本文件读写、文件复制移动、目录遍历和文件验证
