What is @mapbox/mapbox-gl-draw?
@mapbox/mapbox-gl-draw is a plugin for Mapbox GL JS that adds support for drawing and editing features on a map. It allows users to draw points, lines, and polygons, and provides a user-friendly interface for manipulating these shapes.
What are @mapbox/mapbox-gl-draw's main functionalities?
Drawing Points
This feature allows users to draw points on the map. The code initializes the MapboxDraw control and adds it to the map. When a point is created, an event is triggered, and the created point's features are logged to the console.
const draw = new MapboxDraw();
map.addControl(draw);
map.on('draw.create', function(e) {
const features = e.features;
console.log('Point created:', features);
});
Drawing Lines
This feature allows users to draw lines on the map. Similar to drawing points, the MapboxDraw control is added to the map, and an event is triggered when a line is created, logging the line's features to the console.
const draw = new MapboxDraw();
map.addControl(draw);
map.on('draw.create', function(e) {
const features = e.features;
console.log('Line created:', features);
});
Drawing Polygons
This feature allows users to draw polygons on the map. The MapboxDraw control is added to the map, and an event is triggered when a polygon is created, logging the polygon's features to the console.
const draw = new MapboxDraw();
map.addControl(draw);
map.on('draw.create', function(e) {
const features = e.features;
console.log('Polygon created:', features);
});
Editing Features
This feature allows users to edit existing features on the map. The MapboxDraw control is added to the map, and an event is triggered when a feature is updated, logging the updated feature's details to the console.
const draw = new MapboxDraw();
map.addControl(draw);
map.on('draw.update', function(e) {
const features = e.features;
console.log('Feature updated:', features);
});
Deleting Features
This feature allows users to delete features from the map. The MapboxDraw control is added to the map, and an event is triggered when a feature is deleted, logging the deleted feature's details to the console.
const draw = new MapboxDraw();
map.addControl(draw);
map.on('draw.delete', function(e) {
const features = e.features;
console.log('Feature deleted:', features);
});
Other packages similar to @mapbox/mapbox-gl-draw
leaflet-draw
leaflet-draw is a plugin for the Leaflet library that provides similar drawing and editing functionalities for maps. It allows users to draw points, lines, and polygons, and offers a user-friendly interface for manipulating these shapes. Compared to @mapbox/mapbox-gl-draw, leaflet-draw is designed specifically for the Leaflet ecosystem.
turf
Turf is a JavaScript library for spatial analysis that includes some drawing and editing functionalities. It allows users to create and manipulate geometries, perform spatial operations, and analyze geospatial data. While Turf is more focused on spatial analysis, it can be used in conjunction with other libraries to provide drawing capabilities similar to @mapbox/mapbox-gl-draw.
@mapbox/mapbox-gl-draw
Adds support for drawing and editing features on mapbox-gl.js maps. See a live example here
Requires mapbox-gl-js.
If you are developing with mapbox-gl-draw
, see API.md for documentation.
Installing
npm install @mapbox/mapbox-gl-draw
Draw ships with CSS, make sure you include it in your build.
Usage in your application
JavaScript
When using modules
import mapboxgl from 'mapbox-gl';
import MapboxDraw from "@mapbox/mapbox-gl-draw";
When using a CDN
<script src='https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-draw/v1.4.3/mapbox-gl-draw.js'></script>
CSS
When using modules
import '@mapbox/mapbox-gl-draw/dist/mapbox-gl-draw.css'
When using CDN
<link rel='stylesheet' href='https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-draw/v1.4.3/mapbox-gl-draw.css' type='text/css' />
Typescript
Typescript definition files are available as part of the DefinitelyTyped package.
npm install @types/mapbox__mapbox-gl-draw
Example usage
mapboxgl.accessToken = 'YOUR_ACCESS_TOKEN';
var map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v12',
center: [40, -74.50],
zoom: 9
});
var Draw = new MapboxDraw();
map.addControl(Draw, 'top-left');
map.on('load', function() {
});
https://www.mapbox.com/mapbox-gl-js/example/mapbox-gl-draw/
See API.md for complete reference.
Enhancements and New Interactions
For additional functionality check out our list of custom modes.
Mapbox Draw accepts functionality changes after the functionality has been proven out via a custom mode. This lets users experiment and validate their mode before entering a review process, hopefully promoting innovation. When you write a custom mode, please open a PR adding it to our list of custom modes.
Developing and testing
Install dependencies, build the source files and crank up a server via:
git clone git@github.com:mapbox/mapbox-gl-draw.git
yarn install
yarn start & open "http://localhost:9967/debug/?access_token=<token>"
Testing
npm run test
Publishing
To GitHub and NPM:
npm version (major|minor|patch)
git push --tags
git push
npm publish
To CDN:
# make sure you are authenticated for AWS
git checkout v{x.y.z}
yarn install
yarn run prepublish
aws s3 cp --recursive --acl public-read dist s3://mapbox-gl-js/plugins/mapbox-gl-draw/v{x.y.z}
Update the version number in the GL JS example.
Naming actions
We're trying to follow standards when naming things. Here is a collection of links where we look for inspiration.