Circles

Sample code for Google Maps Platform JavaScript API author(s): Justin Poehnelt

by Lawrence Ross

HTML

<!DOCTYPE html>
<!--
 @license
 Copyright 2019 Google LLC. All Rights Reserved.
 SPDX-License-Identifier: Apache-2.0
-->
<html>
  <head>
    <title>Circles</title>
    <script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script>
    <!-- jsFiddle will insert css and js -->
  </head>
  <body>
    <div id="map"></div>

    <!-- 
     The `defer` attribute causes the callback to execute after the full HTML
     document has been parsed. For non-blocking uses, avoiding race conditions,
     and consistent behavior across browsers, consider loading using Promises
     with https://www.npmjs.com/package/@googlemaps/js-api-loader.
    -->
    <script
      src="https://maps.googleapis.com/maps/api/js?key=AIzaSyB41DRUbKWJHPxaFjMAwdrzWzbVKartNGg&callback=initMap&v=weekly"
      defer
    ></script>
  </body>
</html>

CSS

/**
 * @license
 * Copyright 2019 Google LLC. All Rights Reserved.
 * SPDX-License-Identifier: Apache-2.0
 */
/* 
 * Always set the map height explicitly to define the size of the div element
 * that contains the map. 
 */
#map {
  height: 100%;
}

/* 
 * Optional: Makes the sample page fill the window. 
 */
html,
body {
  height: 100%;
  margin: 0;
  padding: 0;
}

JavaScript

/**
 * @license
 * Copyright 2019 Google LLC. All Rights Reserved.
 * SPDX-License-Identifier: Apache-2.0
 */
const citymap = {
  chicago: {
    name: "Chicago",
    center: { lat: 41.878, lng: -87.629 },
    population: 2714856,
  },
  newyork: {
    name: "New York",
    center: { lat: 40.714, lng: -74.005 },
    population: 8405837,
  },
  losangeles: {
    name: "Los Angeles",
    center: { lat: 34.052, lng: -118.243 },
    population: 3857799,
  },
  vancouver: {
    name: "Vancouver",
    center: { lat: 49.25, lng: -123.1 },
    population: 603502,
  },
};

function initMap() {
  // Create the map.
  const infowindow = new google.maps.InfoWindow({maxWidth: 350});
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 4,
    center: {
      lat: 37.09,
      lng: -95.712
    },
    mapTypeId: "terrain",
  });

  // Construct the circle for each value in citymap.
  // Note: We scale the area of the circle based on the population.
  for (const city in citymap) {
    console.log("city:"+citymap[city].name);
    // Add the circle for this city to the map.
    const circle = new google.maps.Circle({
      strokeColor: "#FF0000",
      strokeOpacity: 0.8,
      strokeWeight: 2,
      fillColor: "#FF0000",
      fillOpacity: 0.35,
      map,
      center: citymap[city].center,
      radius: Math.sqrt(citymap[city].population) * 100,
    });
    const marker = new google.maps.Marker({
      position: citymap[city].center,
      map: map,
    });
    google.maps.event.addListener(marker, 'click', (function(marker, city) {
      return function() {
        console.log("marker click:"+citymap[city].name);
        infowindow.setContent(citymap[city].name);
        infowindow.open(map, marker);
      }
    })(marker, city));
    google.maps.event.addListener(circle, 'click', (function(marker, city) {
      return function() {
        console.log("circle click:"+citymap[city].name);
        infowindow.setContent(citymap[city].name);
       ...