1

내가 내가 구글 맵에 마커 세트를 배치하기 위해 노력하고있어이 코드 조각있어 내부 : 내가하려고 곳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); 
     } 
    }); 
} 

그러나,이 정의되지 않은 반환을 위치를 설정하십시오. 결과 [#]에서 변수 i 대신 숫자 (0)을 사용하면 잘 작동하지만 결과를 반복 할 수는 없습니다. 누구든지 전에이 문제를 보았습니까?

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

그래서 우편 번호의 배열의 인덱스 :

감사

+0

결과 [i]이 (가) 정의되지 않은 것은 무엇입니까? – kmkemp

+0

@kmkemp : 예, 구체적으로 : Uncaught TypeError : 'undefined'의'geometry '속성을 읽을 수 없습니다. – KerrM

+0

이 링크에서 kjy112의 답변을 확인하십시오. http://stackoverflow.com/questions/5292060/google-maps-v3-geocoding-and-markers-in-loop – kmkemp

답변

2

문제는 즉, 우편 번호를 반복 그 루프를 시작한다. 그런 다음 결과의 객체에서 해당 색인을 사용하여 우편 번호 [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 
} 

만에 가장 가까운 결과를 표시 할 경우, 루프의 두 번째를 생략하고 결과를 사용하여 [0] 대신 [i]를 결과.

관련 문제