@aspecscire/react-mapbox-gl-draw v1.1.0
react-mapbox-gl-draw
Draw tools for Mapbox with React: react-mapbox-gl + mapbox-gl-draw.
This package is basically creating React bindings for mapbox-gl-draw so that it can be used with react-mapbox-gl.
Demo
See https://codesandbox.io/s/7z5qvmvqrq.
Getting Started
npm install react-mapbox-gl mapbox-gl @mapbox/mapbox-gl-draw --save # required peer dependencies
npm install react-mapbox-gl-draw --saveimport ReactMapboxGl from 'react-mapbox-gl';
import DrawControl from 'react-mapbox-gl-draw';
// Don't forget to import the CSS
import '@mapbox/mapbox-gl-draw/dist/mapbox-gl-draw.css';
const Map = ReactMapboxGl({
accessToken:
'pk.eyJ1IjoiZmFrZXVzZXJnaXRodWIiLCJhIjoiY2pwOGlneGI4MDNnaDN1c2J0eW5zb2ZiNyJ9.mALv0tCpbYUPtzT7YysA2g'
});
<Map
style="mapbox://styles/mapbox/streets-v9"
containerStyle={{
height: '100vh',
width: '100vw'
}}
>
<DrawControl />
</Map>;API
Here are the props you can pass to <DrawControl />:
keybindings, boolean (defaulttrue): Whether or not to enable keyboard interactions for drawing.touchEnabled, boolean (defaulttrue): Whether or not to enable touch interactions for drawing.boxSelect, boolean (defaulttrue): Whether or not to enable box selection of features withshift+click+drag. Iffalse,shift+click+drag zooms into an area.clickBuffer, number (default:2): Number of pixels around any feature or vertex (in every direction) that will respond to a click.touchBuffer, number (default:25): Number of pixels around any feature of vertex (in every directoin) that will respond to a touch.controls, Object: Hide or show individual controls. Each property's name is a control, and value is a boolean indicating whether the control is on or off. Available control names arepoint,line_string,polygon,trash,combine_featuresanduncombine_features. By default, all controls are on. To change that default, usedisplayControlsDefault.displayControlsDefault, boolean (default:true): The default value forcontrols. For example, if you would like all controls to be off by default, and specify a whitelist withcontrols, usedisplayControlsDefault: false.styles, Array\<Object>: An array of map style objects. By default, Draw provides a map style for you. To learn about overriding styles, see the Styling Draw section below.modes, Object: over ride the default modes with your own.MapboxDraw.modescan be used to see the default values. More information on custom modes can be found here.defaultMode, String (default:'simple_select'): the mode (frommodes) that user will first land in.position, String (default:'top-left'): the position of the draw controls on the map.
Draw Events passed as props
These additional props are functions that receive the event data, see mapbox-gl-draw documentantion.
onDrawCreateonDrawDeleteonDrawUpdateonDrawCombineonDrawUncombineonDrawSelectionChangeonDrawModeChangeonDrawRenderonDrawActionable
To learn more about mapbox-gl-draw: https://github.com/mapbox/mapbox-gl-draw/blob/master/docs/API.md
To access the Draw object with all the API methods, you need to define a ref on the <DrawControl> component, and the Draw object will be in the draw field of this ref:
<Map
style="mapbox://styles/mapbox/streets-v9"
containerStyle={{
height: '100vh',
width: '100vw'
}}>
<DrawControl
ref={(drawControl) => { this.drawControl = drawControl; }}
/>
</Map>
//...
handleButtonClick() {
this.drawControl.draw.getAll(); // Or any other API method
}Example
cd examples
yarn install
yarn startThe example app should run on localhost:3000.
Testing
Only semistandard is run for linting. Proper testing needs to be added.
7 years ago