Google Map V3: отображаются только некоторые маркеры

У меня есть следующий код, который должен отображать несколько маркеров для мест в массиве, и каждый маркер при щелчке будет отображать информационное окно, все работает нормально, за исключением того, что из 21 места я могу отображать только 8 маркеров.

<code>// declare Variables
   var geocoder;
   var map;
   var tex;     
   var markersArray = [];
   // pids array 21 addreses
    var pids = [{ad:'251 Pantigo Road Hampton Bays NY 11946',pid:'9'},
    {ad:'Amagensett Quiogue NY 11978',pid:'10'},
    {ad:'789 Main Street Hampton Bays NY 11946',pid:'12'},
    {ad:'30 Abrahams Path Hampton Bays NY 11946',pid:'14'},
    {ad:'3 Winnebogue Ln Westhampton NY 11977',pid:'15'},
    {ad:'44 White Oak Lane Montauk NY 11954',pid:'16'},
    {ad:'107 stoney hill road Bridgehampton NY 11932',pid:'17'},
    {ad:'250 Pantigo Rd Hampton Bays NY 11946',pid:'19'},
    {ad:'250 Pantigo Rd Hampton Bays NY 11946',pid:'20'},
    {ad:'44 Woodruff Lane Wainscott NY 11975',pid:'21'},
    {ad:'Address East Hampton NY 11937',pid:'46'},
    {ad:'Address Amagansett NY 11930',pid:'49'},
    {ad:'Address Remsenburg NY 11960 ',pid:'50'},
    {ad:'Address Westhampton NY 11977',pid:'51'},
    {ad:'prop address Westhampton Dunes NY 11978',pid:'52'},
    {ad:'prop address East Hampton NY 11937',pid:'53'},
    {ad:'Address East Hampton NY 11937',pid:'58'},
    {ad:'Address Southampton NY 11968',pid:'59'},
    {ad:'Address Bridgehampton NY 11932',pid:'60'},
    {ad:'Address Sagaponack NY 11962',pid:'61'}];

    // create an MVCobject for creating Info window on marker
   var pin = new google.maps.MVCObject();
   // The content placeholder for the Info window. 
   var content = document.createElement("DIV");   
   var title = document.createElement("DIV");
   content.appendChild(title);
   // that is where you have the ajax result placed
   var streetview = document.createElement("DIV");
   streetview.style.width = "326px";
   streetview.style.height = "212px";
   content.appendChild(streetview);
   var infowindow = new google.maps.InfoWindow({
       content: content
   });
       // Initialize
   function initialize() {
       geocoder = new google.maps.Geocoder();
       var latlng = new google.maps.LatLng(40.8687097, -73.0014946);
       var myOptions = {
           zoom: 8,
           center: latlng,
           mapTypeId: google.maps.MapTypeId.ROADMAP
       }
       map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
       getAllPids();
   }
   // loop to create all markers
   function getAllPids() {
       var i;
      for (i = 0; i < pids.length; i++) {
           var test = pids[i];
           codeAddress(test);
       }        
   }
   // get latlng for each address , create marker  and add eventlistner to click open infowindow 
   function codeAddress(place) {
       geocoder.geocode({ 'address': place.ad }, function(results, status) {
           if (status == google.maps.GeocoderStatus.OK) {
               var marker = new google.maps.Marker({
                   map: map,
                   position: results[0].geometry.location,
                   title: place.pid
               });
               markersArray.push(marker);                  
               google.maps.event.addListener(marker, "click", function() {
                   openInfoWindow(marker);
               });
            } else {
               // alert("Geocode was not successful for the following reason: " + status);
           }
       });
   }
   // click event on marker calls this to show infowindow.
   function openInfoWindow(marker) {        
    getContent(marker.getTitle());          
       pin.set("position", marker.getPosition());
       infowindow.open(map, marker);
   }
   // Now ajax call to get the content for the current info window
   function getContent(pid) {          
      $.ajax({
                        type: "POST",
                        url: "mapSearchResult.aspx/get_map",                            
                        data: "{'pids':'"+pid +"'}",
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        success: function(msg) {

                         title.innerHTML =msg.d; 

                        }
                    });          
   }
</code>
 Hugolpz25 февр. 2013 г., 22:06
Есть ли верная версия вашего кода для перехода на JSfiddle?

Ответы на вопрос(1)

Решение Вопроса

Если вы откомментировали это

// alert("Geocode was not successful for the following reason: " + status);

вы обнаружите, чтокод причины являетсяOVER_QUERY_LIMIT (620).

Существует ограничение скорости: если вы геокодируете много адресов без задержки между ними, вы нарушите этот предел, потому что вы делаете слишком много за слишком короткое время.

Некоторые из ваших адресов не будут геокодировать (или не будут давать желаемый результат), поскольку геокодер использует почтовые адреса. Адреса какAddress East Hampton NY 11937 или жеprop address Westhampton Dunes NY 11978 не являются почтовыми адресами.

Рекомендуемая стратегия - не тратить ресурсы Google, которыми вы делитесь с другими. Геокодируйте свои адреса самостоятельно в одноразовой операции, сохраняйте эти местоположения в вашей базе данных (или используйте их непосредственно в коде) и затем используйте координаты для позиционирования маркеров. Не пытайтесь найти места, о которых вы уже знаете, каждый раз, когда страница загружается. Используйте геокодер только для поиска местоположений, которые вы не знаете заранее: адреса, введенные вашими пользователями.

Если вам действительно нужно постоянно нарушать эту стратегию и все время геокодировать, то вам нужно замедлить запросы. По мере того, как вы отправляете больше запросов, вам, вероятно, придется больше их замедлять, чтобы удовлетворить геокодер. Я сделал пример Версии 3 (из отмеченного примера Версии 2) вhttp://acleach.me.uk/gmaps/v3/plotaddresses.htm & # X2014; Вы можете видеть, что он начинается с задержкой в 100 мс между запросами, но после двадцати итераций он должен замедлиться примерно до 150 мс.

Ваш ответ на вопрос