Google Maps Geocoder внутри для цикла - PullRequest
1 голос
/ 10 декабря 2011

У меня есть этот фрагмент кода, где я пытаюсь расположить набор маркеров на карте Google:

  for(var i = 0; i < postcodes.length; i++) {
    var address = postcodes[i].innerHTML +", uk";
    geocoder.geocode({'address': address}, function(results, status){
      if (status == google.maps.GeocoderStatus.OK) {
        var marker = new google.maps.Marker({
          position: results[i].geometry.location,
          map: map,
          icon: image,
        });
      } else {
        alert("Geocode was not successful for the following reason: " + status);
      }
   });
 }

Однако, это возвращает как неопределенное, когда я пытаюсь установить позицию.Если я использую число (0) вместо переменной i в результатах [#], это работает нормально, но тогда я не могу перебрать результаты.Кто-нибудь сталкивался с этой проблемой раньше?

Спасибо,

1 Ответ

2 голосов
/ 11 декабря 2011

Проблема в том, что запускается цикл for, который перебирает почтовые индексы:

for(var i = 0; i < postcodes.length; i++) {

Итак, я индекс в массиве почтовых индексов. Затем вы пытаетесь использовать этот индекс в объекте результатов, возвращаемых из запроса геокодирования для почтовых индексов [i]; но два массива не связаны. Переменные результаты являются результатами для почтовых индексов [i] и содержат все результаты поиска для этого почтового индекса. Следовательно, результаты [0] являются ближайшими результатами к одному почтовому индексу.

Я думаю, что вы хотите:

for(var i = 0, num = postcodes.length; i < num; i++) { // loop through postal codes
  geocoder.geocode(
    {
      address: postcodes[i].innerHTML + ", uk"
    },
    function(results, status) {
      if (status != google.maps.GeocoderStatus.OK) {
        alert("Geocode was not successful for the following reason: " + status);
        return false;
      }
      for (var i = 0, num = results.length; i < num; i++) { // loop through results
        var marker = new google.maps.Marker({
          position: results[i].geometry.location,
          map: map,
          icon: image
        });
      }
    }
  ); // end geocode request
}

Если вы хотите показать только самые близкие результаты, пропустите второй цикл for и используйте результаты [0] вместо результатов [i].

...