7 releases (breaking)
new 0.6.0 | Dec 2, 2024 |
---|---|
0.5.0 | Aug 7, 2024 |
0.4.0 | Jul 29, 2024 |
0.3.0 | Jul 27, 2024 |
0.1.0 | Jun 4, 2024 |
#244 in Algorithms
138 downloads per month
Used in s2-pmtiles
69KB
1K
SLoC
s2-tilejson
About
TileJSON is a mostly backwards-compatible open standard for representing map tile metadata.
Install
# NPM
npm install s2-tilejson
# PNPM
pnpm add s2-tilejson
# Yarn
yarn add s2-tilejson
# Bun
bun add s2-tilejson
Usage
import { MetadataBuilder } from 's2-tilejson'
import type { Metadata, Shape, LayerMetaData, BBox } from 's2-tilejson'
const metaBuilder = new MetadataBuilder()
// on initial use be sure to update basic metadata:
metaBuilder.setName('OSM')
metaBuilder.setDescription('A free editable map of the whole world.')
metaBuilder.setVersion('1.0.0')
metaBuilder.setScheme('fzxy') // 'fzxy' | 'tfzxy' | 'xyz' | 'txyz' | 'tms'
metaBuilder.setType('vector') // 'vector' | 'json' | 'raster' | 'raster-dem' | 'sensor' | 'markers'
metaBuilder.setEncoding('none') // 'gz' | 'br' | 'none'
metaBuilder.addAttribution('OpenStreetMap', 'https://www.openstreetmap.org/copyright/')
// Vector Specific: add layers based on how you want to parse data from a source:
metaBuilder.addLayer('water_lines', {
minzoom: 0,
maxzoom: 13,
drawTypes: [2],
shape: {
class: 'string',
offset: 'f64',
info: {
name: 'string',
value: 'i64'
}
} as Shape,
m_shape: null
} as LayerMetaData)
// as you build tiles, add the tiles metadata:
const lonLatBoundsForTile: BBox = [-180, -90, 180, 90]
// WM:
metaBuilder.addTileWM(zoom, x, y, lonLatBoundsForTile)
// S2:
metaBuilder.addTileS2(face, zoom, x, y, lonLatBoundsForTile)
// finally to get the resulting metadata:
const metadata: Metadata = metaBuilder.commit()
Creating and Validating your Shapes
Shapes define the type of data that can be stored in the vector tile. They are explained in the specification.
If you'd like to validate the shape, feel free to use the Ajv library.
import Ajv from 'ajv';
import { ShapeSchema } from 's2-tilejson'; // Path to the schema
import type { Shape } from 's2-tilejson';
const ajv = new Ajv();
const validate = ajv.compile(ShapeSchema);
const shape: Shape = {
a: 'i64',
b: ['string'],
c: {
d: 'f64',
e: 'bool',
f: 'null',
g: 'f32',
h: {
i: 'u64',
},
},
};
validate(shape); // true
Development
Requirements
For Typescript, install via bun:
bun i
If you need to install bun, please refer to the bun installation guide.
You need the tool tarpaulin
to generate the coverage report. Install it using the following command:
cargo install cargo-tarpaulin
The bacon coverage
tool is used to generate the coverage report. To utilize the pycobertura package for a prettier coverage report, install it using the following command:
pip install pycobertura
Running Tests
To run the tests, use the following command:
# TYPESCRIPT
## basic test
bun run test
## live testing
bun run test:dev
# RUST
## basic test
cargo test
# live testing
bacon test
Generating Coverage Report
To generate the coverage report, use the following command:
cargo tarpaulin
# bacon
bacon coverage # or type `l` inside the tool
Dependencies
~0.7–1.6MB
~34K SLoC