Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions samples/dds-datasets-polygon-click/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Google Maps JavaScript Sample

## dds-datasets-polygon-click

This sample shows how to make data features respond to mouse events.

## Setup

### Before starting run:

`npm i`

### Run an example on a local web server

`cd samples/dds-datasets-polygon-click`
`npm start`

### Build an individual example

`cd samples/dds-datasets-polygon-click`
`npm run build`

From 'samples':

`npm run build --workspace=dds-datasets-polygon-click/`

### Build all of the examples.

From 'samples':

`npm run build-all`

### Run lint to check for problems

`cd samples/dds-datasets-polygon-click`
`npx eslint index.ts`

## Feedback

For feedback related to this sample, please open a new issue on
[GitHub](https://github.com/googlemaps-samples/js-api-samples/issues).
30 changes: 30 additions & 0 deletions samples/dds-datasets-polygon-click/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<!doctype html>
<!--
@license
Copyright 2026 Google LLC. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
-->
<!-- [START maps_dds_datasets_polygon_click] -->
<html>
<head>
<title>Style a polygon data feature</title>

<link rel="stylesheet" type="text/css" href="./style.css" />
<script type="module" src="./index.js"></script>
<!-- prettier-ignore -->
<script>(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))})
({key: "AIzaSyA6myHzS10YXdcazAFalmXvDkrYCp5cLc8", v: "weekly"});</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>
<!-- [END maps_dds_datasets_polygon_click] -->
109 changes: 109 additions & 0 deletions samples/dds-datasets-polygon-click/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
/**
* @license
* Copyright 2026 Google LLC. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*/
// [START maps_dds_datasets_polygon_click]
const mapElement = document.querySelector('gmp-map') as google.maps.MapElement;
let innerMap;
let lastInteractedFeatureIds: string[] = [];
let lastClickedFeatureIds: string[] = [];
let datasetLayer;

// [START maps_dds_datasets_polygon_click_eventhandler]
// Note, 'globalid' is an attribute in this Dataset.
function handleClick(/* MouseEvent */ e) {
if (e.features) {
lastClickedFeatureIds = e.features.map(
(f) => f.datasetAttributes['globalid']
);
}
datasetLayer.style = applyStyle;
}

function handleMouseMove(/* MouseEvent */ e) {
if (e.features) {
lastInteractedFeatureIds = e.features.map(
(f) => f.datasetAttributes['globalid']
);
}
datasetLayer.style = applyStyle;
}
// [END maps_dds_datasets_polygon_click_eventhandler]

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

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

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

// [START maps_dds_datasets_polygon_click_addlistener]
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;
}
});
// [END maps_dds_datasets_polygon_click_addlistener]
}

// [START maps_dds_datasets_polygon_click_stylefunction]
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(/* FeatureStyleFunctionOptions */ params) {
const datasetFeature = params.feature;

// Note, 'globalid' is an attribute in this dataset.
if (
lastClickedFeatureIds.includes(
datasetFeature.datasetAttributes['globalid']
)
) {
return styleClicked;
}

if (
lastInteractedFeatureIds.includes(
datasetFeature.datasetAttributes['globalid']
)
) {
return styleMouseMove;
}
return styleDefault;
}
// [END maps_dds_datasets_polygon_click_stylefunction]

initMap();
// [END maps_dds_datasets_polygon_click]
14 changes: 14 additions & 0 deletions samples/dds-datasets-polygon-click/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"name": "@js-api-samples/dds-datasets-polygon-click",
"version": "1.0.0",
"scripts": {
"build": "tsc && bash ../jsfiddle.sh dds-datasets-polygon-click && bash ../app.sh dds-datasets-polygon-click && bash ../docs.sh dds-datasets-polygon-click && npm run build:vite --workspace=. && bash ../dist.sh dds-datasets-polygon-click",
"test": "tsc && npm run build:vite --workspace=.",
"start": "tsc && vite build --base './' && vite",
"build:vite": "vite build --base './'",
"preview": "vite preview"
},
"dependencies": {

}
}
24 changes: 24 additions & 0 deletions samples/dds-datasets-polygon-click/style.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/**
* @license
* Copyright 2026 Google LLC. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*/
/* [START maps_dds_datasets_polygon_click] */
/*
* 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;
}
/* [END maps_dds_datasets_polygon_click] */
17 changes: 17 additions & 0 deletions samples/dds-datasets-polygon-click/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"compilerOptions": {
"module": "esnext",
"target": "esnext",
"strict": true,
"noImplicitAny": false,
"lib": [
"es2015",
"esnext",
"es6",
"dom",
"dom.iterable"
],
"moduleResolution": "Node",
"jsx": "preserve"
}
}
Loading