2012-03-20 3 views
3

. У меня есть 50 адресов из sql. Каждый адрес будет отображаться внутри divAddress. Я прокручиваю каждый из них, геокод и рисую маркер на карте. Но он отображает только 11 из. Я знаю, что это связано с тем, что геокодер является узким. Как использовать setinterval или settimeout для управления этим? Я исследовал и увидел людей, использующих SetTimeout обрабатывать this..please кто-то наставит меня ...setinterval или settimeout для google map v3

var geocoder; 
     var map; 
     function initialize() { 
     geocoder = new google.maps.Geocoder(); 
     var latlng = new google.maps.LatLng(42.095287, -79.3185139); 
     var myOptions = { 
      maxZoom: 14, 
      zoom: 9, 
      center: latlng, 
      mapTypeId: google.maps.MapTypeId.ROADMAP, 
     }; 
     map = new google.maps.Map(document.getElementById("map_canvas"), 
      myOptions); 

     } 

    function codeAddress() { 
     var infowindow = new google.maps.InfoWindow({}); 

     $('.LocationAddress').each(function() { 

      var addy = $(this).text(); 
      geocoder.geocode({ 'address': addy}, function(results, status) { 
       if (status == google.maps.GeocoderStatus.OK) { 
         map.setCenter(results[0].geometry.location); 
         var marker = new google.maps.Marker({ 
         position: results[0].geometry.location, 
         map: map,    
         title:addy, 
        }); 

       //Adding a click event to the marker 
       google.maps.event.addListener(marker, 'click', function() { 
        infowindow.setContent('<div id=\"infowindow\" style=" height:100px;>' 
              +'<div id=\"LeftInfo\">'+ "Hello World!" 
              +'</div>'+'</div>'); 
        infowindow.open(map, this); 
       }); 
      } 

      });//Geocoder END 

     }); 
    } 

ответ

1

Я на самом деле закодировал и испытано, это один работал:

var geocoder; 
var map; 
var addresses = new Array(); 
var infowindow; 
var theInterval; 

function initialize() { 
    geocoder = new google.maps.Geocoder(); 
    var latlng = new google.maps.LatLng(42.095287, -79.3185139); 
    var myOptions = { 
     maxZoom: 14, 
     zoom: 9, 
     center: latlng, 
     mapTypeId: google.maps.MapTypeId.ROADMAP, 
    }; 
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
    infowindow = new google.maps.InfoWindow({}); 
} 

$(document).ready(function() { 
    getAddresses(); 
    theInterval = setInterval("codeAddress()", 1000); 
}); 

function getAddresses() { 
    $('.LocationAddress').each(function() { 
     addresses.push($(this).text()); 
    }); 
} 

function codeAddress() { 
    if (addresses.length == 0) { 
     clearInterval(theInterval); 
    } 
    var addy = addresses.pop(); 
    geocoder.geocode({ 
     'address': addy 
    }, function (results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      map.setCenter(results[0].geometry.location); 
      var marker = new google.maps.Marker({ 
       position: results[0].geometry.location, 
       map: map, 
       title: addy, 
      }); 

      //Adding a click event to the marker 
      google.maps.event.addListener(marker, 'click', function() { 
       infowindow.setContent('<div id=\"infowindow\" style=" height:100px;>' + '<div id=\"LeftInfo\">' + "Hello World!" + '</div>' + '</div>'); 
       infowindow.open(map, this); 
      }); 
     } 

    }); //Geocoder END 
} 
+0

Где я могу использовать функцию setInterval? Внутри CodeAddress()? или после codeAddress() {} ?? –

+0

Вы делаете это на улице. Во всяком случае, я только что отредактировал его на part addresses.length == 0, чтобы очистить интервал, который мы сделали. – Mikko

+0

где вызывается getAddress()? sth сломался, поэтому моя карта вообще не показалась ... когда вы сказали: «Объявите переменную сверху, которая будет содержать наши адреса и infowindow:« вы имеете в виду сделать эту глобальную переменную ?? поэтому они доступны для любых функций? –

0

Вы можете сериализовать запросы так что вы обрабатываете один адрес за раз. Когда он заканчивается, вы обрабатываете следующий. Это можно сделать следующим образом:

function codeAddress() { 
    var infowindow = new google.maps.InfoWindow({}); 

    var addresses = $('.LocationAddress'); 
    var addressIndex = 0; 

    function next() { 
     if (addressIndex < addresses.length) { 
      var addy = addresses.eq(addressIndex).text(); 
      ++addressIndex; 
      geocoder.geocode({ 'address': addy}, function(results, status) { 
       if (status == google.maps.GeocoderStatus.OK) { 
         map.setCenter(results[0].geometry.location); 
         var marker = new google.maps.Marker({ 
         position: results[0].geometry.location, 
         map: map,    
         title:addy, 
        }); 

       //Adding a click event to the marker 
       google.maps.event.addListener(marker, 'click', function() { 
        infowindow.setContent('<div id=\"infowindow\" style=" height:100px;>' 
              +'<div id=\"LeftInfo\">'+ "Hello World!" 
              +'</div>'+'</div>'); 
        infowindow.open(map, this); 
       }); 
       next(); 
      } 

      });//Geocoder END 
     } 
    } 
    next(); 
} 
+0

это все еще давало мне 11 маркеров ??? –

+0

@AnjanaSharma - Тогда, должно быть, происходят ошибки где-то. Вам нужно искать консоль ошибок и выполнять 'console.log (status)' в коде состояния, чтобы выяснить, какие адреса обрабатываются и почему. Это звучит как время для некоторой элементарной отладки. – jfriend00

 Смежные вопросы

  • Нет связанных вопросов^_^