trifeather
Version:
Pre-triangulated feather files
55 lines (37 loc) • 1.74 kB
Markdown
# Pre-triangulated shapefiles
This library defines a binary file format for collections of projected
polygon map data bound for geojson.
It builds on the Apache Arrow project's `feather` format; each feature from
a feature collection is stored as a single row, and all keys are stored as columns.
It attempts to be clever about coercing strings to dictionaries, etc.
Rather than store coordinates, it uses the mapbox [earcut library](https://github.com/mapbox/earcut)
to triangulate polygons, and stores those triangles directly. The combination
of this strategy and apache arrow means that the binary data can be pushed
straight to a GPU for plotting without any need for Javascript, without
an extraordinary size penalty.
A trifeather object can be instantiated from _either_ the binary file format
```js
new Trifeather(await fetch("file.feather"));
```
or from
```js
Trifeather.from_feature_collection(
await fetch("file.geojson").then((d) => JSON.parse(d))
);
```
Storing as triangles also happens to allow
much faster generation of random points in polygons than traditional methods.
# Maps
I've built some mapping functions into the library as 'TripMap.js'
# Node triangulation.
The `project.js` program can be used to convert from geojson to the trifeather format.
It currently only accepts items which are a feature collection where all constituent
elements are polygons or multipolygons.
To generate feather files from a shapefile, pass them via the args. Multiple files can be created at once.
```sh
node project.js --files tests/states.json
```
To generate random points inside the polygons based on counts in the geojson, pass them instead.
```sh
node project.js --files tests/states.json --counts counts
```