Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Google Maps JS API v3 - Simple Multiple Marker Example

Fairly new to the Google Maps Api. I've got an array of data that I want to cycle through and plot on a map. Seems fairly simple, but all the multi-marker tutorials I have found are quite complex.

Let's use the data array from Google's site for an example:

var locations = [   ['Bondi Beach', -33.890542, 151.274856, 4],   ['Coogee Beach', -33.923036, 151.259052, 5],   ['Cronulla Beach', -34.028249, 151.157507, 3],   ['Manly Beach', -33.80010128657071, 151.28747820854187, 2],   ['Maroubra Beach', -33.950198, 151.259302, 1] ]; 

I simply want to plot all of these points and have an infoWindow pop up when clicked to display the name.

like image 886
wesbos Avatar asked Jun 17 '10 05:06

wesbos


People also ask

How many markers can Google Maps API handle?

2048 characters in URL is just under 100 GeoCode values. So, again no more than 100 markers.


2 Answers

This is the simplest I could reduce it to:

<!DOCTYPE html> <html>  <head>    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />    <title>Google Maps Multiple Markers</title>    <script src="http://maps.google.com/maps/api/js?key=YOUR_API_KEY"            type="text/javascript"></script> </head>  <body>   <div id="map" style="width: 500px; height: 400px;"></div>    <script type="text/javascript">     var locations = [       ['Bondi Beach', -33.890542, 151.274856, 4],       ['Coogee Beach', -33.923036, 151.259052, 5],       ['Cronulla Beach', -34.028249, 151.157507, 3],       ['Manly Beach', -33.80010128657071, 151.28747820854187, 2],       ['Maroubra Beach', -33.950198, 151.259302, 1]     ];          var map = new google.maps.Map(document.getElementById('map'), {       zoom: 10,       center: new google.maps.LatLng(-33.92, 151.25),       mapTypeId: google.maps.MapTypeId.ROADMAP     });          var infowindow = new google.maps.InfoWindow();      var marker, i;          for (i = 0; i < locations.length; i++) {         marker = new google.maps.Marker({         position: new google.maps.LatLng(locations[i][1], locations[i][2]),         map: map       });              google.maps.event.addListener(marker, 'click', (function(marker, i) {         return function() {           infowindow.setContent(locations[i][0]);           infowindow.open(map, marker);         }       })(marker, i));     }   </script> </body> </html> 

👨‍💻 Edit/fork on a Codepen →

SCREENSHOT

Google Maps Multiple Markers

There is some closure magic happening when passing the callback argument to the addListener method. This can be quite a tricky topic if you are not familiar with how closures work. I would suggest checking out the following Mozilla article for a brief introduction if it is the case:

❯ Mozilla Dev Center: Working with Closures

like image 179
Daniel Vassallo Avatar answered Sep 30 '22 20:09

Daniel Vassallo


Here is another example of multiple markers loading with a unique title and infoWindow text. Tested with the latest google maps API V3.11.

<!DOCTYPE html> <html>     <head>         <meta charset="utf-8">         <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">         <title>Multiple Markers Google Maps</title>         <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>         <script src="https://maps.googleapis.com/maps/api/js?v=3.11&sensor=false" type="text/javascript"></script>         <script type="text/javascript">         // check DOM Ready         $(document).ready(function() {             // execute             (function() {                 // map options                 var options = {                     zoom: 5,                     center: new google.maps.LatLng(39.909736, -98.522109), // centered US                     mapTypeId: google.maps.MapTypeId.TERRAIN,                     mapTypeControl: false                 };                  // init map                 var map = new google.maps.Map(document.getElementById('map_canvas'), options);                  // NY and CA sample Lat / Lng                 var southWest = new google.maps.LatLng(40.744656, -74.005966);                 var northEast = new google.maps.LatLng(34.052234, -118.243685);                 var lngSpan = northEast.lng() - southWest.lng();                 var latSpan = northEast.lat() - southWest.lat();                  // set multiple marker                 for (var i = 0; i < 250; i++) {                     // init markers                     var marker = new google.maps.Marker({                         position: new google.maps.LatLng(southWest.lat() + latSpan * Math.random(), southWest.lng() + lngSpan * Math.random()),                         map: map,                         title: 'Click Me ' + i                     });                      // process multiple info windows                     (function(marker, i) {                         // add click event                         google.maps.event.addListener(marker, 'click', function() {                             infowindow = new google.maps.InfoWindow({                                 content: 'Hello, World!!'                             });                             infowindow.open(map, marker);                         });                     })(marker, i);                 }             })();         });         </script>     </head>     <body>         <div id="map_canvas" style="width: 800px; height:500px;"></div>     </body> </html> 

Screenshot of 250 Markers:

Google Maps API V3.11 with Multiple Markers

It will automatically randomize the Lat/Lng to make it unique. This example will be very helpful if you want to test 500, 1000, xxx markers and performance.

like image 25
Madan Sapkota Avatar answered Sep 30 '22 22:09

Madan Sapkota