// This example adds three custom symbols to a polyline.functioninitMap():void{constmap=newgoogle.maps.Map(document.getElementById("map")asHTMLElement,{zoom:6,center:{lat:20.291,lng:153.027},mapTypeId:"terrain",});// Define the custom symbols. All symbols are defined via SVG path notation.// They have varying stroke color, fill color, stroke weight,// opacity and rotation properties.constsymbolOne={path:"M -2,0 0,-2 2,0 0,2 z",strokeColor:"#F00",fillColor:"#F00",fillOpacity:1,};constsymbolTwo={path:"M -1,0 A 1,1 0 0 0 -3,0 1,1 0 0 0 -1,0M 1,0 A 1,1 0 0 0 3,0 1,1 0 0 0 1,0M -3,3 Q 0,5 3,3",strokeColor:"#00F",rotation:45,};constsymbolThree={path:"M -2,-2 2,2 M 2,-2 -2,2",strokeColor:"#292",strokeWeight:4,};// Create the polyline and add the symbols via the 'icons' property.constline=newgoogle.maps.Polyline({path:[{lat:22.291,lng:153.027},{lat:18.291,lng:153.027},],icons:[{icon:symbolOne,offset:"0%",},{icon:symbolTwo,offset:"50%",},{icon:symbolThree,offset:"100%",},],map:map,});}declareglobal{interfaceWindow{initMap:()=>void;}}window.initMap=initMap;
// This example adds three custom symbols to a polyline.functioninitMap(){constmap=newgoogle.maps.Map(document.getElementById("map"),{zoom:6,center:{lat:20.291,lng:153.027},mapTypeId:"terrain",});// Define the custom symbols. All symbols are defined via SVG path notation.// They have varying stroke color, fill color, stroke weight,// opacity and rotation properties.constsymbolOne={path:"M -2,0 0,-2 2,0 0,2 z",strokeColor:"#F00",fillColor:"#F00",fillOpacity:1,};constsymbolTwo={path:"M -1,0 A 1,1 0 0 0 -3,0 1,1 0 0 0 -1,0M 1,0 A 1,1 0 0 0 3,0 1,1 0 0 0 1,0M -3,3 Q 0,5 3,3",strokeColor:"#00F",rotation:45,};constsymbolThree={path:"M -2,-2 2,2 M 2,-2 -2,2",strokeColor:"#292",strokeWeight:4,};// Create the polyline and add the symbols via the 'icons' property.constline=newgoogle.maps.Polyline({path:[{lat:22.291,lng:153.027},{lat:18.291,lng:153.027},],icons:[{icon:symbolOne,offset:"0%",},{icon:symbolTwo,offset:"50%",},{icon:symbolThree,offset:"100%",},],map:map,});}window.initMap=initMap;
/** 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;}
<html>
<head>
<title>Custom Symbols (Polyline)</title>
<link rel="stylesheet" type="text/css" href="./style.css" />
<script type="module" src="./index.js"></script>
</head>
<body>
<div id="map"></div>
<!--
The `defer` attribute causes the script 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. See
https://developers.google.com/maps/documentation/javascript/load-maps-js-api
for more information.
-->
<script
src="https://maps.googleapis.com/maps/api/js?key=AIzaSyB41DRUbKWJHPxaFjMAwdrzWzbVKartNGg&callback=initMap&v=weekly"
defer
></script>
</body>
</html>
Git and Node.js are required to run this sample locally. Follow theseinstructionsto install Node.js and NPM. The following commands clone, install dependencies and start the sample application.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-12-11 UTC."],[],[]]