vector-tile-esm
Version:
Parses vector tiles
106 lines (74 loc) • 3.62 kB
Markdown
# vector-tile-esm

Reads [Mapbox Vector Tiles][] and allows access to the layers and features.
This module is a fork of [vector-tile-js][], with several key changes:
- Code is set up for ESM `import`, rather than CJS `require`. This allows it
to be imported dynamically (e.g., on [Observable][]) without depending on a
third-party bundling service such as [bundle.run][]
- The VectorTileFeature.toGeoJSON() method behaves very differently, returning
pixel coordinates within a tile, rather than assuming Web Mercator and
attempting to back-project to longitude and latitude
- The dependence on the [point-geometry][] module has been **removed**
[Mapbox Vector Tiles]: https://github.com/mapbox/vector-tile-spec
[vector-tile-js]: https://github.com/mapbox/vector-tile-js
[Observable]: https://observablehq.com
[bundle.run]: https://bundle.run
[point-geometry]: https://github.com/mapbox/point-geometry
## Example
```js
import { VectorTile } from 'vector-tile-esm';
import Protobuf from 'pbf-esm';
var tile = new VectorTile(new Protobuf(data));
// Contains a map of all layers
tile.layers;
var landuse = tile.layers.landuse;
// Number of features in this layer
landuse.length;
// Returns the first feature
landuse.feature(0);
```
## API Reference
vector-tile-esm exposes 3 constructors: VectorTile, VectorTileLayer, and
VectorTileFeature.
## VectorTile
An object that parses vector tile data and makes it readable.
### Constructor
- **new VectorTile(protobuf[, end])** —
parses the vector tile data contained in the given [Protobuf][] object,
saving resulting layers in the created object as a `layers` property.
Optionally accepts end index.
[Protobuf]: https://github.com/mapbox/pbf
### Properties
- **layers** (Object) — an object containing parsed layers in the form of
`{<name>: <layer>, ...}`, where each layer is a `VectorTileLayer` object.
## VectorTileLayer
An object that contains the data for a single vector tile layer.
### Properties
- **version** (`Number`, default: `1`)
- **name** (`String) `— layer name
- **extent** (`Number`, default: `4096`) — tile extent size
- **length** (`Number`) — number of features in the layer
### Methods
- **feature(i)** — get a feature (`VectorTileFeature`) by the given index
from the layer.
- **toGeoJSON(size[, sx, sy])** — Return a GeoJSON FeatureCollection
representing all the features in the layer. See the corresponding method of
VectorTileFeature for the parameters
## VectorTileFeature
An object that contains the data for a single feature.
### Properties
- **type** (`Number`) — type of the feature (also see `VectorTileFeature.types`)
- **extent** (`Number`) — feature extent size
- **id** (`Number`) — feature identifier, if present
- **properties** (`Object`) — object literal with feature properties
### Methods
- **loadGeometry()** — parses feature geometry and returns an array of
point objects, with each point having `x` and `y` properties
- **bbox()** — calculates and returns the bounding box of the feature in
the form `[x1, y1, x2, y2]`
- **toGeoJSON(size[, sx, sy])** — returns a GeoJSON representation of the
feature.
- `size` — side length of the (square) area over which the tile's
features will be rendered. Default: the .extent property of the layer
- `sx`, `sy` — optionally specify the origin of the output coordinates
within the (size x size) rendered area of the full tile.