google-mapsgoogle-polyline

Javascript - Google Map multiple polylines of different colors


I am currently plotting multiple lines on a map as part of a project.

I have been able to plot multiple polylines on a Google Map with the help of a few tutorials. But, all the polylines are of the same color and I want to them to be in different colors. How do I do it?

JS file

var map, infoWindow;
function initialize() {
  var mapOptions = {
    zoom: 6,
    center: new google.maps.LatLng(24.886436490787712, -70.2685546875),
    mapTypeId: google.maps.MapTypeId.TERRAIN
  };

   var bounds = new google.maps.LatLngBounds();
  var polygons = [];
 var arr = new Array();
  var map = new google.maps.Map(document.getElementById('map-canvas'),
      mapOptions);

  var coordinates = {
    "feed1": [
        [ 25.774252,  -80.190262 ],
        [18.466465,-66.118292 ],
        [32.321384, -64.75737],
        [25.774252, -80.190262 ]
    ],
    
     "feed2": [
        [26.774252, -81.190262],
        [ 19.466465, -67.118292 ],
        [33.321384,-65.75737 ],
        [26.774252, -81.190262 ]
    ],
    
     "feed3": [
        [27.774252, -82.190262],
        [ 20.466465, -68.118292 ],
        [34.321384,-66.75737 ],
        [27.774252, -82.190262 ]
    ]
};
   for (var i in coordinates) {
           arr = [];

   for (var j=0; j < coordinates[i].length; j++) {
              arr.push( new google.maps.LatLng(
                    parseFloat(coordinates[i][j][0]),
                    parseFloat(coordinates[i][j][1])
              ));
                
              bounds.extend(arr[arr.length-1])
  
            }
                  
  polygons.push(new google.maps.Polyline({
                path: arr,
                strokeColor: '#FF0000',
                strokeOpacity: 0.8,
                strokeWeight: 2,
                fillColor: '#FF0000',
                fillOpacity: 0.35
            }));
            polygons[polygons.length-1].setMap(map);      
            
            var infowindow = new google.maps.InfoWindow({
  content:"Hello World!"
  });

google.maps.event.addListener(polygons[polygons.length-1], 'click', function(event) {
  infowindow.open(map);
  infowindow.setPosition(event.latLng);
  });     
            
}
 map.fitBounds(bounds);
}


google.maps.event.addDomListener(window, 'load', initialize);

HTML file

   <div id="map-canvas"></div>

CSS

  html, body, #map-canvas {
        height: 100%;
        margin: 0px;
        padding: 0px;
      }

The code can also be found on the Fiddle here.


Solution

  • Related question: how to draw a google maps waypoint with multi-colored polylines

    1. make an array of colors to apply to the polylines:
      var colors = ["#FF0000", "#00FF00", "#0000FF", "#FFFF00", "#FF00FF", "#00FFFF"];
    
    1. use that array in the polyline constructor:
    polygons.push(new google.maps.Polyline({
          path: arr,
          strokeColor: colors[polygons.length % colors.length],
          strokeOpacity: 0.8,
          strokeWeight: 2,
        }));
        polygons[polygons.length - 1].setMap(map);
    

    Updated fiddle

    (or you could include the desired color in the input data)

    screenshot of resulting map code snippet:

    var map, infoWindow;
    
    function initialize() {
      var mapOptions = {
        zoom: 6,
        center: new google.maps.LatLng(24.886436490787712, -70.2685546875),
        mapTypeId: google.maps.MapTypeId.TERRAIN
      };
    
      var bounds = new google.maps.LatLngBounds();
      var polygons = [];
      var arr = new Array();
      var map = new google.maps.Map(document.getElementById('map-canvas'),
        mapOptions);
      var colors = ["#FF0000", "#00FF00", "#0000FF", "#FFFF00", "#FF00FF", "#00FFFF"];
    
      var coordinates = {
        "feed1": [
          [25.774252, -80.190262],
          [18.466465, -66.118292],
          [32.321384, -64.75737],
          [25.774252, -80.190262]
        ],
    
        "feed2": [
          [26.774252, -81.190262],
          [19.466465, -67.118292],
          [33.321384, -65.75737],
          [26.774252, -81.190262]
        ],
    
        "feed3": [
          [27.774252, -82.190262],
          [20.466465, -68.118292],
          [34.321384, -66.75737],
          [27.774252, -82.190262]
        ]
      };
      for (var i in coordinates) {
        arr = [];
    
        for (var j = 0; j < coordinates[i].length; j++) {
          arr.push(new google.maps.LatLng(
            parseFloat(coordinates[i][j][0]),
            parseFloat(coordinates[i][j][1])
          ));
    
          bounds.extend(arr[arr.length - 1])
    
        }
        console.log(coordinates.feed2)
    
        polygons.push(new google.maps.Polyline({
          path: arr,
          strokeColor: colors[polygons.length % colors.length],
          strokeOpacity: 0.8,
          strokeWeight: 2,
          fillColor: colors[polygons.length % colors.length],
          fillOpacity: 0.35
        }));
        polygons[polygons.length - 1].setMap(map);
    
        var infowindow = new google.maps.InfoWindow({
          content: "Hello World!"
        });
    
        google.maps.event.addListener(polygons[polygons.length - 1], 'click', function(event) {
          infowindow.open(map);
          infowindow.setPosition(event.latLng);
        });
    
      }
      map.fitBounds(bounds);
    }
    
    
    google.maps.event.addDomListener(window, 'load', initialize);
    html,
    body,
    #map-canvas {
      height: 100%;
      margin: 0px;
      padding: 0px;
    }
    <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk"></script>
    <div id="map-canvas"></div>