Connections and entry points
Besides markers, the Places module draws labelled connection lines between pairs of shown places, and the entrances in a place’s data. Both take the module’s colour, hide with it and have their own event scope.
Connections
showConnections draws
a dashed line between each pair of places you give it, labelled by connections.label.title.
const placesModule = await PlacesModule.create(map, { connections: { color: '#1F9D6B', label: { title: (connection) => `${connection.minutes} min` } },});await placesModule.show(places);await placesModule.showConnections([{ from: 'station', to: 'cafe', minutes: 4 }]);
await placesModule.clearConnections(); // the lines go, the places stay- An endpoint is a
Placeor the id of a shown place. The module skips an id that matches no shown place, and resolves it again on every redraw (Identity across show, clear and style changes). - Every other property of a connection reaches the
label.titlefunction. Without that function, the module draws no label. showConnectionsreplaces the shown connections.show()andclear()remove them.connections.color,connections.label.colorandconnections.label.haloColorset the line, label and halo colours over the module’scolor. By default, the label takes a shade of the line colour that reads on the map’s light or dark theme.connections.layers.lineandconnections.layers.labeltake MapLibre overrides.
Entry points
Search, geocoding and reverse geocoding fill a place’s entrances
in properties.entryPoints. To draw them, set entryPoints on the module config. Each entrance
gets a dot, larger for the main one, with a dotted line back to the place.
const placesModule = await PlacesModule.create(map, { entryPoints: { showFor: 'clicked', // 'all' | 'selected' (hovered or clicked, the default) | 'clicked' minZoom: 16, // default 15 layers: { line: { layout: { visibility: 'none' } } }, // MapLibre overrides for `point` and `line` },});
// Only places with an event handler reach the hover and click statesplacesModule.events.on('click', (feature) => console.log(feature.properties.title));
placesModule.updateConfig({ entryPoints: { showFor: 'all' } });placesModule.updateConfig({ entryPoints: undefined }); // stops drawing themselectedandclickedfollow the module’s event states, sosetEventStatedraws them too.- Hovering or clicking an entry point keeps its place’s entry points drawn if a handler on
eventsorevents.entryPointscovers them. A handler onevents.placesalone doesn’t. Underselected, a recently hovered place counts too, so they stay while the pointer moves to an entrance. events.entryPointspasses a point at the entrance, whether the dot or the line was hit. Its properties holdtype,functions,placeID,entryPointIndexand the shownplace. It is a valid route location, as the events example shows.- The dots draw over the pins and the lines under them.
- With
pin-clusteredmarkers, entry points appear from the first zoom without clusters,cluster.source.maxZoomplus one (18 by default).
A reverse geocoding result’s geometry is the queried point. Before you show it, set its coordinates to
properties.originalPosition, the matched address. A result with no match has no properties, so check for them first:
const address = await reverseGeocode({ position: clickedPosition });if (address.properties) { await placesModule.show({ ...address, geometry: { ...address.geometry, coordinates: address.properties.originalPosition }, });}Related guides and examples
Related guides
- Places module - Showing places, events and the data shown
- Place styling - Marker types, colour, labels and icons
- Core places - The entry points a place carries
Related examples
- Place connection lines - Labelled lines from a charging station to the cafés around it, in a colour of their own
- Place entry points playground - When and how the entrances of places are drawn, and what clicking one returns