Note that there are some explanatory texts on larger screens.

plurals
  1. PObetter approach then setTimeout on Google Map V3
    text
    copied!<p>in my Asp.net Web Application where i am using the setTimeout to Get rid of geocoder OVER_QUERY_LIMIT, the shorter time out is 10ms which is too longer for me, I have 800 above addresses coming from SQL SERVER which would be increased because of this setTimeout will take about 5 to 7 mints to take places of all the markers on map and that`s frustrating. I researched and saw this link <a href="http://ajaxian.com/archives/settimeout-delay" rel="nofollow">setTimeout: how to get the shortest delay</a></p> <p>but cant figure out what he want to do actually. please someone guide me....</p> <pre><code> function InitializeMap() { // Here am calling the webService by PageMethods in which CityNames, Countries Name will take their places PageMethods.GetCitiesbyUser_Extender(onSucess); var myOptions = { zoom: 0, center: new google.maps.LatLng(-34.397, 150.644), mapTypeId: google.maps.MapTypeId.ROADMAP, }; var map = new google.maps.Map(document.getElementById("map"), myOptions); // Creating latlngbound to bound the markers on map var bounds = new google.maps.LatLngBounds(); //// Creating an array that will contain the addresses var places = []; // Creating a variable that will hold the InfoWindow object var infowindow; // create this to add the marker Cluster on map mc = new MarkerClusterer(map); var popup_content = []; var geocoder = new google.maps.Geocoder(); // image for ballon i want to change default ballon to this var iconimage = "http://chart.apis.google.com/chart?cht=mm&amp;chs=24x32&amp;chco=FFFFFF,008CFF,000000&amp;ext=.png"; var markers = []; // Create this function for passing the values which was taken by webservice cntName is the return in webservice function onSucess(cntName){ // loop through the cntName to pass the individual City one by one from geocode for (i = 0; i &lt; cntName.length; ++i) { //for fixing the issue use closure to localize the cntName[i] variable before passing into geocode and callback function within it. (function CreateMarkAndInfo(address) { geocoder.geocode({ 'address': address }, function (results, status) { if (status == google.maps.GeocoderStatus.OK) { places[i] = results[0].geometry.location; var marker = new google.maps.Marker({ position: places[i], title: results[0].formatted_address, map: map, icon: iconimage }); markers.push(marker); mc.addMarker(marker); google.maps.event.addListener(marker, 'click', function () { if (!infowindow) { infowindow = new google.maps.InfoWindow(); } // Setting the content of the InfoWindow afterward infowindow.setContent(popup_content[i]); // Tying the InfoWindow to the marker afterward infowindow.open(map, marker); }); // Extending the bounds object with each LatLng bounds.extend(places[i]); // Adjusting the map to new bounding box map.fitBounds(bounds); // Zoom out after fitBound var listener = google.maps.event.addListenerOnce(map, "idle", function () { if (map.getZoom() &lt; 10) map.setZoom(2); }); } else { // if geocode will end the limit then make delay by timer in order to avoid the OVER_QUERY_LIMIT if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT) { setTimeout(function () { CreateMarkAndInfo(address); }, (15)); // here i think i should use better approch but for now it`s ok. } else { alert("Geocode was not successful for the following reason: " + status); } } }); })(cntName[i]);// End closure trick } } } google.maps.event.addDomListener(window, 'load', InitializeMap); </code></pre> <p><strong>Edit:</strong> @just.another.programmer i cant because there is no latitute and longitude in DB, client will add cities and countries by him self thats why i had to convet city and country names by geocode and geocode doing it`s job accuretly here How i am calling the City and country Names by web service</p> <pre><code> [System.Web.Services.WebMethod] [System.Web.Script.Services.ScriptMethod()] public static string[] GetCitiesbyUser_Extender() { System.Data.DataSet dtst = new System.Data.DataSet(); string ses = HttpContext.Current.Session["UserName"].ToString(); USTER.Dal.clsSearch clssearch = new USTER.Dal.clsSearch(); // Assinging the Stroed Procedure Method to DataSet dtst = clssearch.GetAllCitiesByUser(ses); string[] cntName = new string[dtst.Tables[0].Rows.Count]; int i = 0; try { foreach (System.Data.DataRow rdr in dtst.Tables[0].Rows) { // Columns Name in SQL Server Table "CityName" and "CountryName" cntName.SetValue(rdr["CityName"].ToString() +","+ rdr["CountryName"].ToString() , i); i++; } } catch { } finally { } return cntName; } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload