In this tutorial, we’ll add Leaflet Draw to our map.
https://github.com/Leaflet/Leaflet.draw
Let’s start with our basic Leaflet map
<!DOCTYPE html> <html lang="en"> <head> <base target="_top"> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Basic Leaflet Map</title> <!-- Leafletjs and CSS --> <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js" integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=" crossorigin=""></script> <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=" crossorigin=""/> <!-- Inline CSS for map --> <style> html, body { height: 100%; margin: 0; } .leaflet-container { height: 80%; width: 80%; max-width: 100%; max-height: 100%; } </style> </head> <body> <div id="map"></div> <script> // Add OpenStreetMap basemap var map = L.map('map').setView([37.0902, -95.7129], 4); var osm = L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 19, attribution: '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>' }).addTo(map); </script> </body> </html>
You can either download the full packages from Github or use a CDN. We’ll use the CDN.
Add the following to the <head> section of your html file.:
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet.draw/0.4.2/leaflet.draw.css"/> <script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet.draw/0.4.2/leaflet.draw.js"></script>
Add the following block of JavaScript to your html page.
var drawnItems = new L.FeatureGroup(); map.addLayer(drawnItems); var drawControl = new L.Control.Draw({ edit: { featureGroup: drawnItems } }); map.addControl(drawControl); map.on('draw:created', function (e) { var type = e.layerType, layer = e.layer; drawnItems.addLayer(layer); });
With our JavaScript in place, our html code now looks like below:
<!DOCTYPE html> <html lang="en"> <head> <base target="_top"> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Basic Leaflet Map</title> <!-- Leafletjs and CSS --> <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js" integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=" crossorigin=""></script> <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=" crossorigin=""/> <!-- Leaflet Print JavaScript --> <script src="leaflet.browser.print.min.js"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet.draw/0.4.2/leaflet.draw.css"/> <script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet.draw/0.4.2/leaflet.draw.js"></script> <!-- Inline CSS for map --> <style> html, body { height: 100%; margin: 0; } .leaflet-container { height: 60%; width: 60%; max-width: 100%; max-height: 100%; } </style> </head> <body> <div id="map"></div> <script> // Add OpenStreetMap basemap var map = L.map('map').setView([37.0902, -95.7129], 4); var osm = L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 19, attribution: '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>' }).addTo(map); // Add Browser Print Plugin L.control.browserPrint({ title: 'Just print me!', documentTitle: 'My Leaflet Map', printLayer: L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: 'Map tiles by <a href="http://openstreetmap.com">OpenStreetMap</a>', subdomains: 'abcd', minZoom: 1, maxZoom: 16, ext: 'png' }), closePopupsOnPrint: false, printModes: [ L.BrowserPrint.Mode.Landscape(), "Portrait", L.BrowserPrint.Mode.Auto("B4",{title: "Auto"}), L.BrowserPrint.Mode.Custom("B5",{title:"Select area"}) ], manualMode: false }).addTo(map); // Add Browser Print Plugin var drawnItems = new L.FeatureGroup(); map.addLayer(drawnItems); var drawControl = new L.Control.Draw({ edit: { featureGroup: drawnItems } }); map.addControl(drawControl); map.on('draw:created', function (e) { var type = e.layerType, layer = e.layer; drawnItems.addLayer(layer); }); </script> </body> </html>
Now, when we view our map, we see the Draw controls:
