Overview
Learn how to create a legend on a Google map through this tutorial. Legends generally describe the symbols and markers on a map. You can create them using the positioning feature of custom controls.
The map below contains a legend that provides information about three different custom markers on the map.
The section below displays the entire code you need to create the map and legend in this tutorial.
var map; function initMap() { map = new google.maps.Map(document.getElementById('map'), { zoom: 16, center: new google.maps.LatLng(-33.91722, 151.23064), mapTypeId: 'roadmap' }); var iconBase = 'https://maps.google.com/mapfiles/kml/shapes/'; var icons = { parking: { name: 'Parking', icon: iconBase + 'parking_lot_maps.png' }, library: { name: 'Library', icon: iconBase + 'library_maps.png' }, info: { name: 'Info', icon: iconBase + 'info-i_maps.png' } }; var features = [ { position: new google.maps.LatLng(-33.91721, 151.22630), type: 'info' }, { position: new google.maps.LatLng(-33.91539, 151.22820), type: 'info' }, { position: new google.maps.LatLng(-33.91747, 151.22912), type: 'info' }, { position: new google.maps.LatLng(-33.91910, 151.22907), type: 'info' }, { position: new google.maps.LatLng(-33.91725, 151.23011), type: 'info' }, { position: new google.maps.LatLng(-33.91872, 151.23089), type: 'info' }, { position: new google.maps.LatLng(-33.91784, 151.23094), type: 'info' }, { position: new google.maps.LatLng(-33.91682, 151.23149), type: 'info' }, { position: new google.maps.LatLng(-33.91790, 151.23463), type: 'info' }, { position: new google.maps.LatLng(-33.91666, 151.23468), type: 'info' }, { position: new google.maps.LatLng(-33.916988, 151.233640), type: 'info' }, { position: new google.maps.LatLng(-33.91662347903106, 151.22879464019775), type: 'parking' }, { position: new google.maps.LatLng(-33.916365282092855, 151.22937399734496), type: 'parking' }, { position: new google.maps.LatLng(-33.91665018901448, 151.2282474695587), type: 'parking' }, { position: new google.maps.LatLng(-33.919543720969806, 151.23112279762267), type: 'parking' }, { position: new google.maps.LatLng(-33.91608037421864, 151.23288232673644), type: 'parking' }, { position: new google.maps.LatLng(-33.91851096391805, 151.2344058214569), type: 'parking' }, { position: new google.maps.LatLng(-33.91818154739766, 151.2346203981781), type: 'parking' }, { position: new google.maps.LatLng(-33.91727341958453, 151.23348314155578), type: 'library' } ]; // Create markers. features.forEach(function(feature) { var marker = new google.maps.Marker({ position: feature.position, icon: icons[feature.type].icon, map: map }); }); var legend = document.getElementById('legend'); for (var key in icons) { var type = icons[key]; var name = type.name; var icon = type.icon; var div = document.createElement('div'); div.innerHTML = '<img src="' + icon + '"> ' + name; legend.appendChild(div); } map.controls[google.maps.ControlPosition.RIGHT_BOTTOM].push(legend); }
<div id="map"></div> <div id="legend"><h3>Legend</h3></div>
html, body { margin: 0; padding: 0; height: 100%; width: 100%; } #map { height: 400px; width: 100%; } #legend { font-family: Arial, sans-serif; background: #fff; padding: 10px; margin: 10px; border: 3px solid #000; } #legend h3 { margin-top: 0; } #legend img { vertical-align: middle; }
<!-- 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>
Try it yourself
You can experiment with this code in JSFiddle by clicking the <>
icon in the
top-right corner of the code window.
<!DOCTYPE html>
<html>
<head>
<title>Custom Legend</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
<meta charset="utf-8">
<style>
html, body {
margin: 0;
padding: 0;
height: 100%;
width: 100%;
}
#map {
height: 400px;
width: 100%;
}
#legend {
font-family: Arial, sans-serif;
background: #fff;
padding: 10px;
margin: 10px;
border: 3px solid #000;
}
#legend h3 {
margin-top: 0;
}
#legend img {
vertical-align: middle;
}
</style>
</head>
<body>
<div id="map"></div>
<div id="legend"><h3>Legend</h3></div>
<script>
var map;
function initMap() {
map = new google.maps.Map(document.getElementById('map'), {
zoom: 16,
center: new google.maps.LatLng(-33.91722, 151.23064),
mapTypeId: 'roadmap'
});
var iconBase = 'https://maps.google.com/mapfiles/kml/shapes/';
var icons = {
parking: {
name: 'Parking',
icon: iconBase + 'parking_lot_maps.png'
},
library: {
name: 'Library',
icon: iconBase + 'library_maps.png'
},
info: {
name: 'Info',
icon: iconBase + 'info-i_maps.png'
}
};
var features = [
{
position: new google.maps.LatLng(-33.91721, 151.22630),
type: 'info'
}, {
position: new google.maps.LatLng(-33.91539, 151.22820),
type: 'info'
}, {
position: new google.maps.LatLng(-33.91747, 151.22912),
type: 'info'
}, {
position: new google.maps.LatLng(-33.91910, 151.22907),
type: 'info'
}, {
position: new google.maps.LatLng(-33.91725, 151.23011),
type: 'info'
}, {
position: new google.maps.LatLng(-33.91872, 151.23089),
type: 'info'
}, {
position: new google.maps.LatLng(-33.91784, 151.23094),
type: 'info'
}, {
position: new google.maps.LatLng(-33.91682, 151.23149),
type: 'info'
}, {
position: new google.maps.LatLng(-33.91790, 151.23463),
type: 'info'
}, {
position: new google.maps.LatLng(-33.91666, 151.23468),
type: 'info'
}, {
position: new google.maps.LatLng(-33.916988, 151.233640),
type: 'info'
}, {
position: new google.maps.LatLng(-33.91662347903106, 151.22879464019775),
type: 'parking'
}, {
position: new google.maps.LatLng(-33.916365282092855, 151.22937399734496),
type: 'parking'
}, {
position: new google.maps.LatLng(-33.91665018901448, 151.2282474695587),
type: 'parking'
}, {
position: new google.maps.LatLng(-33.919543720969806, 151.23112279762267),
type: 'parking'
}, {
position: new google.maps.LatLng(-33.91608037421864, 151.23288232673644),
type: 'parking'
}, {
position: new google.maps.LatLng(-33.91851096391805, 151.2344058214569),
type: 'parking'
}, {
position: new google.maps.LatLng(-33.91818154739766, 151.2346203981781),
type: 'parking'
}, {
position: new google.maps.LatLng(-33.91727341958453, 151.23348314155578),
type: 'library'
}
];
// Create markers.
features.forEach(function(feature) {
var marker = new google.maps.Marker({
position: feature.position,
icon: icons[feature.type].icon,
map: map
});
});
var legend = document.getElementById('legend');
for (var key in icons) {
var type = icons[key];
var name = type.name;
var icon = type.icon;
var div = document.createElement('div');
div.innerHTML = '<img src="' + icon + '"> ' + name;
legend.appendChild(div);
}
map.controls[google.maps.ControlPosition.RIGHT_BOTTOM].push(legend);
}
</script>
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap">
</script>
</body>
</html>
The sections below explain the main steps to create a legend.
Creating the legend container
The table below explains the code that customizes the legend.
Code and description | |
---|---|
|
Creates a div to hold the content.Adds a heading level three (3) to the div . |
|
Positions the div at the right-bottom of
the map by adding a control position. Read about more control position options. |
|
Styles the legend control using CSS. |
Adding the legend content
Use the existing marker styles definition to populate the legend.
var legend = document.getElementById('legend');
for (var style in styles) {
var name = style.name;
var icon = style.icon;
var div = document.createElement('div');
div.innerHTML = '<img src="' + icon + '"> ' + name;
legend.appendChild(div);
}