JSFiddle - React, Tailwind, and code Playground

by TheSneak

HTML

<link rel="stylesheet" href="https://raw.github.com/CloudMade/Leaflet/master/dist/leaflet.css" />
    <!--[if lte IE 8]><link rel="stylesheet" href="https://raw.github.com/CloudMade/Leaflet/master/dist/leaflet.ie.css" /><![endif]-->    
    <link rel="stylesheet" href="https://raw.github.com/CloudMade/Leaflet/1f142c003db1baab2670debe75bfbfcf286d0173/debug/css/screen.css" />
    <script src="https://raw.github.com/CloudMade/Leaflet/master/debug/leaflet-include.js"></script>
    <div id="map" style="width: 400px; height: 300px; border: 1px solid #ccc"></div>
    <button onclick="group.removeLayer(path)">Remove path</button>
    <button onclick="group.removeLayer(circle)">Remove circle</button>
    <button onclick="group.clearLayers()">Remove all layers</button>
    <script src="https://raw.github.com/CloudMade/Leaflet/6e5b37c36b8309cdb59b39d3c4b78c7a5b6fb524/debug/vector/route.js"></script>

JavaScript

L_PREFER_CANVAS = true; // experimental
var cloudmadeUrl = 'http://{s}.tile.cloudmade.com/BC9A493B41014CAABB98F0471D759707/997/256/{z}/{x}/{y}.png',
    cloudmade = new L.TileLayer(cloudmadeUrl, {
        maxZoom: 18
    });

for (var i = 0, latlngs = [], len = route.length; i < len; i++) {
    latlngs.push(new L.LatLng(route[i][0], route[i][1]));
}
var path = new L.Polyline(latlngs);

var map = new L.Map('map', {
    layers: [cloudmade]
});

var group = new L.LayerGroup();

//map.fitBounds(new L.LatLngBounds(latlngs));

var circleLocation = new L.LatLng(51.508, -0.11),
    circleOptions = {
        color: 'red',
        fillColor: 'yellow',
        fillOpacity: 0.7
    };

var circle = new L.Circle(circleLocation, 500000, circleOptions),
    circleMarker = new L.CircleMarker(circleLocation, {
        fillColor: 'blue',
        fillOpacity: 1,
        stroke: false
    });

group.addLayer(circle).addLayer(circleMarker);

circle.bindPopup('I am a circle');
circleMarker.bindPopup('I am a circle marker');

group.addLayer(path);
path.bindPopup('I am a polyline');

var p1 = latlngs[0],
    p2 = latlngs[parseInt(len / 4)],
    p3 = latlngs[parseInt(len / 3)],
    p4 = latlngs[parseInt(len / 2)],
    p5 = latlngs[len - 1],
    polygonPoints = [p1, p2, p3, p4, p5];

var h1 = new L.LatLng(p1.lat, p1.lng),
    h2 = new L.LatLng(p2.lat, p2.lng),
    h3 = new L.LatLng(p3.lat, p3.lng),
    h4 = new L.LatLng(p4.lat, p4.lng),
    h5 = new L.LatLng(p5.lat, p5.lng);

h1.lng += 20;
h2.lat -= 5;
h3.lat -= 5;
h4.lng -= 10;
h5.lng -= 8;
h5.lat += 10;

var holePoints = [h5, h4, h3, h2, h1];

var polygon = new L.Polygon([polygonPoints, holePoints], {
    fillColor: "#333",
    color: 'green'
});
group.addLayer(polygon);

polygon.bindPopup('I am a polygon');

map.addLayer(group);