# MVT Mapbox Vector Tile PMTiles Google MVT Projection and Tilelive Encoding Auditor

Audit .mvt/.pbf vector tiles and PMTiles v3 archives against the Mapbox Vector Tile Specification 2.x: protobuf Layer/Feature/Value decoding, MoveTo/LineTo/ClosePath command-stream validation, ring winding and tag indexes, Web Mercator Google-tile XYZ bounds, PMTiles v3 directory decoding and tile-size vs feature-count budgets.

> Canonical page: https://elysiatools.com/en/tools/mvt-mapbox-vector-tile-pmtiles-google-mvt-projection-and-tilelive-encoding-auditor

- **Category:** Geography

- **Keywords:** mapbox vector tile, mvt auditor, pmtiles inspector, vector tile spec, web mercator tile bounds, hilbert tileid, tilelive encoding budget, protobuf geometry decoding

## Overview

Pure-TypeScript wire-format audit: a hand-rolled protobuf reader decodes Tile.layers → Layer(version/name/features/keys/values/extent) → Feature(tags/type/geometry) → Value (string/float/double/int/uint/sint-zigzag/bool). The geometry interpreter follows spec §4.3 exactly — CommandInteger = id | count<<3, zigzag ParameterIntegers, dX/dY ≠ (0,0), ClosePath count 1 polygons only, POINT = single MoveTo, LINESTRING = MoveTo+LineTo repetitions — and classifies each ring via the surveyor’s formula so exterior rings must have positive (visually clockwise, y-down) and interior rings negative area. Tile-size vs feature-count budgets follow tilelive/tippecanoe practice (≈500 KB and ≈10 000 features per tile as review thresholds). PMTiles v3 is decoded per the spec: 127-byte header, gzip/brotli internal compression, varint directories with delta TileIDs on the Hilbert curve, run-length tile entries and run-length 0 leaf pointers, cluster and conformance checks, plus tile extraction at a given z/x/y. The Web Mercator panel validates the Google tile scheme XYZ (0 ≤ x,y < 2^z) and computes the geographic tile bbox and resolution.

## Inputs

- **Tile file** (file): Upload .mvt / .pbf / .pmtiles
- **Tile zoom (z)** (number): e.g. 10 — enables the Web Mercator bbox and PMTiles lookup
- **Tile column (x)** (number): e.g. 512
- **Tile row (y)** (number): e.g. 384

## When to use

- Debugging rendering artifacts or geometry corruption caused by invalid command streams, zigzag integers, or reversed ring winding.
- Inspecting PMTiles v3 headers, directory structures, and metadata while extracting individual vector tiles by Hilbert TileID.
- Auditing tile production pipelines to flag tiles that breach standard size (500 KB) or feature-count (10,000) performance thresholds.

## How it works

- Upload an uncompressed or gzip-compressed .mvt/.pbf tile file or a .pmtiles v3 archive.
- Optionally specify the tile zoom (z), column (x), and row (y) to calculate Web Mercator bounding boxes or locate a specific tile within a PMTiles archive.
- The decoder parses protobuf layers, resolves key/value tables, verifies command integers, and computes polygon ring areas using the surveyor's formula.
- Review the structured HTML report detailing layer schemas, feature attributes, geometry command sequences, and conformance warnings.

## Use cases

- GIS pipeline engineers validating custom tile generator output against the Mapbox Vector Tile 2.x specification.
- Frontend mapping developers diagnosing missing fill holes or clipped lines in Mapbox GL JS, MapLibre, or OpenLayers.
- Cartographers and data engineers auditing PMTiles v3 metadata and root/leaf directory structures before deploying to cloud storage.

## Frequently asked questions

### What file formats does this auditor support?

It accepts single vector tile files (.mvt, .pbf), gzip-compressed tiles (.gz), and PMTiles v3 container archives (.pmtiles).

### How does the tool determine polygon ring winding order?

It applies the surveyor's formula to the decoded screen coordinates (y-down), requiring positive area for exterior rings and negative area for interior rings.

### What tile encoding thresholds trigger a budget warning?

Tiles exceeding approximately 500 KB in compressed size or containing more than 10,000 features are flagged for review.

### Are z, x, and y tile coordinates required?

No, but providing z/x/y coordinates is required to extract a specific tile from a PMTiles archive and calculate its geographic bounding box.

### Does this tool execute in the browser or send data to a server?

All Protocol Buffer decoding, PMTiles directory parsing, and geometry validation execute locally in client-side TypeScript.

## Related tools

- [JavaScript Deobfuscator](https://elysiatools.com/en/tools/javascript-deobfuscator): Deobfuscate and analyze obfuscated JavaScript code to improve readability and understanding
- [Chess FEN, PGN & Elo Rating Tutor](https://elysiatools.com/en/tools/chess-fen-pgn-elo-rating-tutor): Parse & validate FEN board snapshots, PGN/SAN movetext (with parity, check/mate counts, threefold); compute Elo rating updates from win/draw/loss results, with Lichess/Chess.com tier bands
- [CSV Transformer](https://elysiatools.com/en/tools/csv-transformer): Transform and process CSV data with column operations, calculations, and data type conversions. Supports renaming columns, adding calculated columns, removing columns, converting data types, calculating values, and filtering rows. Operation examples: • Rename column: \[{"type": "rename", "column": "old_name", "new_name": "new_name"}\] • Add calculated column: \[{"type": "add_column", "new_column": "total", "formula": "price * quantity"}\] • Remove column: \[{"type": "remove_column", "remove_column": "column_to_remove"}\] • Convert data type: \[{"type": "convert_type", "convert_column": "age", "target_type": "number"}\] • Calculate values: \[{"type": "calculate", "target_column": "total", "expression": "price * tax + shipping"}\] • Filter rows: \[{"type": "filter_values", "filter_column": "status", "operator": "equals", "value": "active"}\]
- [Lotka–Volterra Predator-Prey Dynamics Simulator](https://elysiatools.com/en/tools/lotka-volterra-predator-prey): RK4 simulation of the classic predator–prey oscillator with phase plane, closed orbits, equilibrium, and period analysis.
- [Parquet Bloom Filter ZoneMap Dictionary and Column Statistics Pruner Evaluator](https://elysiatools.com/en/tools/parquet-bloom-filter-zonemap-dictionary-and-column-statistics-pruner-evaluator): Decode a Parquet thrift footer and quantify predicate-pushdown pruning: zone-map min/max, split-block bloom filters (XXH64), dictionary ratios and encodings, with per-row-group prune-savings estimates for example WHERE clauses.
- [PDF Text Extractor](https://elysiatools.com/en/tools/pdf-text-extractor): Extract text content from PDF documents with support for page selection, formatting options, and multi-language processing
- [Word Text Extractor](https://elysiatools.com/en/tools/word-text-extractor): Extract text content from Word documents with support for formatting options, paragraph selection, and multi-language processing
- [SVG Minifier & Analyzer](https://elysiatools.com/en/tools/svg-minifier-analyzer): Analyze SVG markup, remove redundant elements, reduce payload size, compare before and after visually, and export cleaned files

## Samples

- [MVT / PMTiles Samples](https://elysiatools.com/en/samples/mvt-pmtiles-samples): Vector tile fixtures for the Mapbox Vector Tile and PMTiles auditor
- [Hex/Unicode Encoding Format Samples](https://elysiatools.com/en/samples/text-hex-unicode-formats): Examples of hex (\xXX) and unicode (\uXXXX) escape sequence encoding formats
- [Web File Operations Go Samples](https://elysiatools.com/en/samples/web-file-operations-go): Web Go file operations examples including text file read/write, file copy/move, directory traversal, and file validation
- [Web File Operations Python Samples](https://elysiatools.com/en/samples/web-file-operations-python): Web Python file operations examples including text file read/write, file copy/move, directory traversal, and file validation
