A library to compute the best position to put labels on multiple routes between two points.
- Showcase page.
- In-depth explanation as a blog article.
Depending on your package manager:
npm install --save alt-route-labeller
or
yarn add alt-route-labeller
The lib exposes the getLabelPositions
function.
routes
: the multiple routes to apply the labelling to. Can be expressed as a GeoJSON FeatureCollection, an array of Feature objects, or an array of Geometry objects.
An array of label positions, one for each of the routes, in the same order as they where passed to the function.
Each label position has the following properties:
lngLat
: the best position of the label on the route, put on a non-ambiguous section not shared with other routes (if one can be found, otherwise fallback on the route middle position).anchor
: a hint value to minimize collisions if we want to display labels. Possible values:top
|bottom
|left
|right
. Inspired by theanchor
property of MapBox-GL-JS markers.
import { getLabelPositions } from 'alt-route-labeller';
const routes = getGeoJSONRoutesFromSomewhere();
const labels = getLabelPositions(routes);
labels.forEach(label => {
createMarkerOnMap(label.lngLat, { anchor: label.anchor });
});