Dashed Line w Arrows on google map

working example, with solution provided by nice person on stackoverflow

by hrabinowitz

HTML

<div id="map"></div>
<!-- Replace the value of the key parameter with your own API key. -->
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk&callback=initMap">
</script>

CSS

/* Always set the map height explicitly to define the size of the div
 * element that contains the map. */
#map {
  height: 80%;
}
/* Optional: Makes the sample page fill the window. */
html, body {
  height: 100%;
  margin: 0;
  padding: 0;
}

JavaScript

// This example converts a polyline to a dashed line, by
// setting the opacity of the polyline to 0, and drawing an opaque symbol
// at a regular interval on the polyline.

function initMap() {
  var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 6,
    center: {lat: 20.291, lng: 153.027},
    mapTypeId: 'terrain'
  });

  // Define a symbol using SVG path notation, with an opacity of 1.
  var lineSymbol = {
    path: 'M 0,-1 0,1',
    strokeOpacity: 1,
    scale: 4
  };
  
  var arrowSymbol = {
  	path: google.maps.SymbolPath.FORWARD_CLOSED_ARROW,
    strokeColor: 'red',
    strokeOpacity: 1,
    fillColor: 'blue',
    fillOpacity: 1,
    scale: 2
  };
  
  var reverseArrowSymbol = {
  	path: google.maps.SymbolPath.BACKWARD_CLOSED_ARROW,
    strokeColor: 'red',
    strokeOpacity: 1,
    fillColor: 'blue',
    fillOpacity: 1,
    scale: 2
  }

  // Create the polyline, passing the symbol in the 'icons' property.
  // Give the line an opacity of 0.
  // Repeat the symbol at intervals of 20 pixels to create the dashed effect.
  var line = new google.maps.Polyline({
    path: [{lat: 22.291, lng: 153.027}, {lat: 18.291, lng: 153.027}],
    strokeOpacity: 0,
    icons: [
    {
    	icon: arrowSymbol,
      //offset: '100%',
      offset: '15%',
      //repeat: '20px',
      repeat: '20%',
      strokeOpacity: 1,
      strokeColor: 'black',
      //scale: 0.25
    },
    {
    	icon: reverseArrowSymbol,
      //offset: '100%',
      offset: '0%',
      //repeat: '20px',
      repeat: '20%',
      strokeOpacity: 1,
      strokeColor: 'black',
      //scale: 0.25
    },
    {
      icon: lineSymbol,
      offset: '0',
      repeat: '20px',
      strokeOpacity: 1
    },
    ],
    map: map
  });
}