Multiple markers Google Map API v3 from array of addresses and avoid OVER_QUERY_LIMIT while geocoding on pageLoad Multiple markers Google Map API v3 from array of addresses and avoid OVER_QUERY_LIMIT while geocoding on pageLoad arrays arrays

Multiple markers Google Map API v3 from array of addresses and avoid OVER_QUERY_LIMIT while geocoding on pageLoad


Regardless of your situation, heres a working demo that creates markers on the map based on an array of addresses.

http://jsfiddle.net/P2QhE/

Javascript code embedded aswell:

$(document).ready(function () {    var map;    var elevator;    var myOptions = {        zoom: 1,        center: new google.maps.LatLng(0, 0),        mapTypeId: 'terrain'    };    map = new google.maps.Map($('#map_canvas')[0], myOptions);    var addresses = ['Norway', 'Africa', 'Asia','North America','South America'];    for (var x = 0; x < addresses.length; x++) {        $.getJSON('http://maps.googleapis.com/maps/api/geocode/json?address='+addresses[x]+'&sensor=false', null, function (data) {            var p = data.results[0].geometry.location            var latlng = new google.maps.LatLng(p.lat, p.lng);            new google.maps.Marker({                position: latlng,                map: map            });        });    }}); 


Answer to add multiple markers.

UPDATE (GEOCODE MULTIPLE ADDRESSES)

Here's the working Example Geocoding with multiple addresses.

 <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"> </script>  <script type="text/javascript">  var delay = 100;  var infowindow = new google.maps.InfoWindow();  var latlng = new google.maps.LatLng(21.0000, 78.0000);  var mapOptions = {    zoom: 5,    center: latlng,    mapTypeId: google.maps.MapTypeId.ROADMAP  }  var geocoder = new google.maps.Geocoder();   var map = new google.maps.Map(document.getElementById("map"), mapOptions);  var bounds = new google.maps.LatLngBounds();  function geocodeAddress(address, next) {    geocoder.geocode({address:address}, function (results,status)      {          if (status == google.maps.GeocoderStatus.OK) {          var p = results[0].geometry.location;          var lat=p.lat();          var lng=p.lng();          createMarker(address,lat,lng);        }        else {           if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT) {            nextAddress--;            delay++;          } else {                        }           }        next();      }    );  } function createMarker(add,lat,lng) {   var contentString = add;   var marker = new google.maps.Marker({     position: new google.maps.LatLng(lat,lng),     map: map,           });  google.maps.event.addListener(marker, 'click', function() {     infowindow.setContent(contentString);      infowindow.open(map,marker);   });   bounds.extend(marker.position); }  var locations = [           'New Delhi, India',           'Mumbai, India',           'Bangaluru, Karnataka, India',           'Hyderabad, Ahemdabad, India',           'Gurgaon, Haryana, India',           'Cannaught Place, New Delhi, India',           'Bandra, Mumbai, India',           'Nainital, Uttranchal, India',           'Guwahati, India',           'West Bengal, India',           'Jammu, India',           'Kanyakumari, India',           'Kerala, India',           'Himachal Pradesh, India',           'Shillong, India',           'Chandigarh, India',           'Dwarka, New Delhi, India',           'Pune, India',           'Indore, India',           'Orissa, India',           'Shimla, India',           'Gujarat, India'  ];  var nextAddress = 0;  function theNext() {    if (nextAddress < locations.length) {      setTimeout('geocodeAddress("'+locations[nextAddress]+'",theNext)', delay);      nextAddress++;    } else {      map.fitBounds(bounds);    }  }  theNext();</script>

As we can resolve this issue with setTimeout() function.

Still we should not geocode known locations every time you load your page as said by @geocodezip

Another alternatives of these are explained very well in the following links:

How To Avoid GoogleMap Geocode Limit!

Geocode Multiple Addresses Tutorial By Mike Williams

Example by Google Developers


Here is my solution:

dependencies: Gmaps.js, jQuery

var Maps = function($) {   var lost_addresses = [],       geocode_count  = 0;   var addMarker = function() { console.log('Marker Added!') };   return {     getGecodeFor: function(addresses) {        var latlng;        lost_addresses = [];        for(i=0;i<addresses.length;i++) {          GMaps.geocode({            address: addresses[i],            callback: function(response, status) {              if(status == google.maps.GeocoderStatus.OK) {                addMarker();              } else if(status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT) {                lost_addresses.push(addresses[i]);              }               geocode_count++;               // notify listeners when the geocode is done               if(geocode_count == addresses.length) {                 $.event.trigger({ type: 'done:geocoder' });               }            }          });        }     },     processLostAddresses: function() {       if(lost_addresses.length > 0) {         this.getGeocodeFor(lost_addresses);       }     }   };}(jQuery);Maps.getGeocodeFor(address);// listen to done:geocode event and process the lost addresses after 1.5s$(document).on('done:geocode', function() {  setTimeout(function() {    Maps.processLostAddresses();  }, 1500);});