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/polyline-complex/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Google Maps JavaScript Sample

## polyline-complex

THhis example demonstrates constructing a polyline based on clicks (click the map to add a vertex).

## Setup

### Before starting run:

`npm i`

### Run an example on a local web server

`cd samples/polyline-complex`
`npm start`

### Build an individual example

`cd samples/polyline-complex`
`npm run build`

From 'samples':

`npm run build --workspace=polyline-complex/`

### Build all of the examples.

From 'samples':

`npm run build-all`

### Run lint to check for problems

`cd samples/polyline-complex`
`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).
26 changes: 26 additions & 0 deletions samples/polyline-complex/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<!doctype html>
<!--
@license
Copyright 2026 Google LLC. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
-->
<!-- [START maps_polyline_complex] -->
<html>
<head>
<title>Complex Polylines</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="41.879, -87.624"
zoom="7"
map-id="DEMO_MAP_ID"
></gmp-map>
</body>
</html>
<!-- [END maps_polyline_complex] -->
53 changes: 53 additions & 0 deletions samples/polyline-complex/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/**
* @license
* Copyright 2026 Google LLC. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*/

// [START maps_polyline_complex]
/**
* This example creates an interactive map which constructs a polyline based on
* user clicks. Note that the polyline only appears once its path property
* contains two LatLng coordinates.
*/

let poly: google.maps.Polyline;
const mapElement = document.querySelector('gmp-map') as google.maps.MapElement;
let innerMap;

async function initMap() {
// Import the needed libraries.
(await google.maps.importLibrary('maps')) as google.maps.MapsLibrary;
(await google.maps.importLibrary('marker')) as google.maps.MarkerLibrary;

innerMap = mapElement.innerMap;

poly = new google.maps.Polyline({
strokeColor: "#000000",
strokeOpacity: 1.0,
strokeWeight: 3,
});
poly.setMap(innerMap);

// Add a listener for the click event
innerMap.addListener("click", addLatLng);
}

// Handles click events on a map, and adds a new point to the Polyline.
function addLatLng(event: google.maps.MapMouseEvent) {
const path = poly.getPath();

// Because path is an MVCArray, we can simply append a new coordinate
// and it will automatically appear.
path.push(event.latLng as google.maps.LatLng);

// Add a new marker at the new plotted point on the polyline.
new google.maps.marker.AdvancedMarkerElement({
position: event.latLng,
title: "#" + path.getLength(),
map: innerMap,
});
}

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

}
}
18 changes: 18 additions & 0 deletions samples/polyline-complex/style.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/**
* @license
* Copyright 2026 Google LLC. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*/
/* [START maps_polyline_complex] */

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

/* [END maps_polyline_complex] */
17 changes: 17 additions & 0 deletions samples/polyline-complex/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