2010-12-20 1 views
0

저는이 코드를 꽤 오랫동안 사용하고 있습니다. XML에서 XML을 Google지도 및 지오 코딩 주소로로드 중입니다. 한 번에 조회 할 주소가 너무 많으면 코드에 지연을 추가해야합니다. 여기 XML에서 Google Maps로로드하는 동안 Javascript setTimeout을 사용했습니다.

는 일을 내 전체 코드이

나는 그것이 한 번에 모두로드하고 지오 코더가 많은에 요구를 처리 할 수 ​​있습니다대로, 지연 xml 파일에서로드가 필요

XML이 큽니다. XML 파일은 계속 변경되므로 다시로드하고 다시 지오 코딩해야합니다. 그것은 XML 파일이 커질 때만 문제가됩니다. 가장 중요한 것은 XML 파일이 필요할 때입니다.

나는 지연을 약 geocoder.getLocations(address,createMarker);으로 지정했지만 주소 변수에는 모든 주소가 포함되어 있으므로 지연되지 않습니다. 만약 내가 단지 var address = markers[i].getAttribute("address"); 주위에 지연을두면 그것은 함수에 변수 i을 전달하지 않습니다. 누구든지 도움을 줄 수 있으면 크게 감사하겠습니다.

// create marker 
    function createMarker(response) 
    { 
     var place = response.Placemark[0]; 
     var point = new GLatLng(place.Point.coordinates[1], 
            place.Point.coordinates[0]); 
     var marker = new GMarker(point); 
     GEvent.addListener(marker, "click",function() 
      { 
       marker.openInfoWindowHtml(place.address); 
      }); 
      map.addOverlay(marker); 
    } 

     // Create new map object 
     var map = new GMap2(document.getElementById("map")); 
     map.addControl(new GSmallMapControl()); 
     map.addControl(new GMapTypeControl()); 
     map.enableScrollWheelZoom(); 
     map.addMapType(G_PHYSICAL_MAP); 
     map.setCenter(new GLatLng(49.923068,-119.437981), 10); 
     var geocoder = new GClientGeocoder(); 

    // Download the data in active.xml 
    GDownloadUrl("active.xml", function(data) 
    { 

     var xml = GXml.parse(data); 
     var markers = xml.documentElement.getElementsByTagName('INC'); 
     setTimeout(function() 
      { 
    for (var i = 0; i < markers.length; i++)  
     { 
     var address = markers[i].getAttribute("address"); 
        geocoder.getLocations(address,createMarker);  
       } 
      },200);   
    }); 
+0

이것은 Google Maps API v2이며 v3는 아닙니다. – plexer

답변

0

시도 :

이 공간 밖으로 지오 코더로 요청을해야
for (var i = 0; i < markers.length; i++) { 
    var address = markers[i].getAttribute("address");   
    function (innerAddress, j) { 
     setTimeout(function() { 
     geocoder.getLocations(innerAddress,createMarker);  
     }, 200 * j); 
    }(address, i); 
} 

.