JSFiddle - React, Tailwind, and code Playground

by iamjpg

HTML

<script src="https://cdn.rawgit.com/seabre/simplify-geometry/master/simplifygeometry-0.0.2.js"></script>
<div id="map"></div>

<script src="//maps.google.com/maps/api/js?key=AIzaSyDciDh5LCPwyxG8tml6998d80mlukEj8Q4&libraries=drawing,places,geometry"></script>

CSS

#map {
  position: absolute;
  top: 0;
  bottom: 0;
  right: 0;
  left: 0;
}

JavaScript

// Init the map
var map = new google.maps.Map(document.getElementById('map'), {
  center: {
    lat: 39.14,
    lng: -98.1,
  },
  zoom: 4,
});

var minifiedArray = [];

var returnGeometry = function(points) {
	var arr = [];
  points.forEach((o, i) => {
  	arr.push({
    	lat: o[0],
      lng: o[1]
    });
  });
  return arr;
}

var drawPolygon = function() {
  var poly = new google.maps.Polygon({
    paths: returnGeometry(simplifyGeometry(minifiedArray, 1)),
    strokeColor: '#FF0000',
    strokeOpacity: 0.8,
    strokeWeight: 2,
    fillColor: '#FF0000',
    fillOpacity: 0.35
  });
  poly.setMap(map);
}

var trackMouseMove = function() {
  drawnPointArray = [];
  minifiedArray = [];
  map.addListener('mousemove', function(e) {
    minifiedArray.push([e.latLng.lat(), e.latLng.lng()])
  });
}

map.setOptions({
  draggable: false
});

map.addListener('mousedown', function() {
  trackMouseMove();
});

map.addListener('mouseup', function() {
  document.onmousemove = null;
  drawPolygon();
});