dds-datasets-polygon-click

Sample code supporting Google Maps Platform JavaScript API documentation. author(s): Geo Developer IX Documentation Team

HTML

<!doctype html>
<!--
 @license
 Copyright 2026 Google LLC. All Rights Reserved.
 SPDX-License-Identifier: Apache-2.0
-->

<html>
  <head>
    <title>Style a polygon data feature</title>

    <script>
      // prettier-ignore
      (g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({
            });
    </script>
  </head>
  <body>
    <gmp-map
      center="40.780101, -73.967780"
      zoom="13"
      map-id="5cd2c9ca1cf05670"
      map-type-control="false">
      <div id="attribution" slot="control-block-end-inline-start">
        Data source: NYC Open Data
      </div>
    </gmp-map>
  </body>
</html>

CSS

/**
 * @license
 * Copyright 2026 Google LLC. All Rights Reserved.
 * SPDX-License-Identifier: Apache-2.0
 */

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

#attribution {
  background-color: rgba(255, 255, 255, 0.7);
  font-family: 'Roboto', 'Arial', sans-serif;
  font-size: 10px;
  padding: 2px;
  margin: 2px;
}

JavaScript

'use strict';
/**
 * @license
 * Copyright 2026 Google LLC. All Rights Reserved.
 * SPDX-License-Identifier: Apache-2.0
 */

const mapElement = document.querySelector('gmp-map');
let innerMap;
let lastInteractedFeatureIds = [];
let lastClickedFeatureIds = [];
let datasetLayer;

// Note, 'globalid' is an attribute in this Dataset.
function handleClick(event) {
  if (event.features) {
    lastClickedFeatureIds = event.features.map(
      (f) => f.datasetAttributes.globalid
    );
  }
  datasetLayer.style = applyStyle;
}

function handleMouseMove(event) {
  if (event.features) {
    lastInteractedFeatureIds = event.features.map(
      (f) => f.datasetAttributes.globalid
    );
  }
  datasetLayer.style = applyStyle;
}

async function init() {
  // Request needed libraries.
  await google.maps.importLibrary('maps');

  // Get the inner map.
  innerMap = mapElement.innerMap;

  // Dataset ID for NYC park data.
  const datasetId = 'a75dd002-ad20-4fe6-af60-27cd2ed636b4';

  datasetLayer = innerMap.getDatasetFeatureLayer(datasetId);
  datasetLayer.style = applyStyle;

  datasetLayer.addListener('click', handleClick);
  datasetLayer.addListener('mousemove', handleMouseMove);

  // Map event listener.
  innerMap.addListener('mousemove', () => {
    // If the map gets a mousemove, that means there are no feature layers
    // with listeners registered under the mouse, so we clear the last
    // interacted feature ids.
    if (lastInteractedFeatureIds?.length) {
      lastInteractedFeatureIds = [];
      datasetLayer.style = applyStyle;
    }
  });
}

const styleDefault = {
  strokeColor: 'green',
  strokeWeight: 2.0,
  strokeOpacity: 1.0,
  fillColor: 'green',
  fillOpacity: 0.3,
};

const styleClicked = {
  ...styleDefault,
  strokeColor: 'blue',
  fillColor: 'blue',
  fillOpacity: 0.5,
};

const styleMouseMove = {
  ...styleDefault,
  strokeWeight: 4.0,
};

function applyStyle(params) {
  const datasetFeature = params.feature;

  // Note, 'globalid' is an attribute in...