maps
Provides a simple MarkerLayer component for plotting React Components
Jul 20, 2019

react-leaflet-marker-layer
react-leaflet-marker-layer provides a simple component for plotting React components as markers in a react-leaflet map.
Usage
import React from 'react'; import { render } from 'react-dom'; import { Map, Marker, Popup, TileLayer } from 'react-leaflet'; import MarkerLayer from '../src/MarkerLayer'; const position = { lng: -122.673447, lat: 45.522558 }; const markers = [ { position: { lng: -122.67344700000, lat: 45.522558100000 }, text: 'Voodoo Doughnut', }, { position: { lng: -122.67814460000, lat: 45.5225512000000 }, text: 'Bailey\'s Taproom', }, { position: { lng: -122.67535700000002, lat: 45.5192743000000 }, text: 'Barista' }, { position: { lng: -122.65596570000001, lat: 45.5199148000001 }, text: 'Base Camp Brewing' } ]; class ExampleMarkerComponent extends React.Component { render() { const style = { border: 'solid 1px lightblue', backgroundColor: '#333333', borderRadius: '50%', marginTop: '-12px', marginLeft: '-12px', width: '24px', height: '24px' }; return ( <div style={Object.assign({}, this.props.style, style)}></div> ); } } class MapExample extends React.Component { state = { mapHidden: false }; render() { if (this.state.mapHidden) { return ( <div> <input type="button" value="Toggle Map" onClick={() => this.setState({ mapHidden: !this.state.mapHidden })} /> </div> ); } return ( <div> <Map center={position} zoom={13}> <MarkerLayer markers={markers} longitudeExtractor={m => m.position.lng} latitudeExtractor={m => m.position.lat} markerComponent={ExampleMarkerComponent} /> <TileLayer url='http://{s}.tile.osm.org/{z}/{x}/{y}.png' attribution='© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors' /> </Map> <input type="button" value="Toggle Map" onClick={() => this.setState({ mapHidden: !this.state.mapHidden })} /> </div> ); } } render(<MapExample />, document.getElementById('app'));
API
The MarkerLayer
component takes the following props:
markers
: an array of objects to be plottedlongitudeExtractor
: a function that returns the marker object's longitude e.g.marker => marker.lng
latitudeExtractor
: a function that returns the marker object's latitude e.g.marker => marker.lat
markerComponent
: (required) the React component to be rendered for each marker, this component will receive the following propsmarker
: the object from themarkers
arraystyle
: a style object for positioning, you should include these styles on your componentmap
: the Leaflet map object from thereact-leaflet
MapLayer
...propsForMarkers
: the component will also receive the properties ofpropsForMarkers
as props
propsForMarkers
: props to pass on to marker components
Example
To try the example:
- Clone this repository
- run
npm install
in the root of your cloned repository - run
npm run example
- Visit localhost:8000