Awesome
vtvalidate
Validate vector tiles based on the Mapbox Vector Tile Specification 2.x via vtzero.
Build & Test
git clone git@github.com:mapbox/vtvalidate.git
cd vtvalidate
# Build binaries. This looks to see if there were changes in the C++ code. This does not reinstall deps.
make
# Run tests
make test
# Cleans your current builds and removes potential cache
make clean
# Cleans everything, including the things you download from the network in order to compile (ex: npm packages).
# This is useful if you want to nuke everything and start from scratch.
# For example, it's super useful for making sure everything works for Travis, production, someone else's machine, etc
make distclean
Usage
- If the tile is valid,
vtvalidate
will return an empty string. - If the tile is invalid,
vtvalidate
will return the string output from vtzero. vtvalidate
will throw an error if there is unexpected behaviour, for example an invalid argument value passed intovtvalidate.isValid()
or a corrupt compressed buffer.
Valid tile
var vtvalidate = require('@mapbox/vtvalidate');
...
// Pass in protocol buffer (uncompressed)
vtvalidate.isValid(buffer, function(err, result) {
if (err) throw err;
// returns empty string if it's a valid tile
console.log(result); // ''
});
Invalid tile
var vtvalidate = require('@mapbox/vtvalidate');
...
// Pass in protocol buffer (uncompressed)
vtvalidate.isValid(buffer, function(err, result) {
if (err) throw err;
// returns string that specifies why the tile is invalid
console.log(result); // 'Missing geometry field in feature (spec 4.2)'
});
Type of validation
vtvalidate
validates tile data against vtzero:
- Tile data consistent with the Mapbox vector tile spec - Version 2. Tiles created via Mapbox vector tile spec Version 1 will be flagged invalid.
- Read tile layer(s) and feature(s)
- Decode properties
- Decode geometries
Currently, vtvalidate does not check geometries for self-intersections, but planned in the future. If you'd like to add more extensive tile validation, check out this example.
CLI
Accepts either uncompressed or gzip/zlib compressed tiles
node bin/vtvalidate.js <path-to-vector-tile>
Will output:
- empty string if it's a valid tile
- string that specifies why the tile is invalid
Bench
Provide desired iterations and concurrency
node bench/isValid.bench.js --iterations 50 --concurrency 10