2010-12-20 4 views
0

私はかなり長い間このコードに苦労してきました。 私はXMLからGoogleマップとジオコーディングのアドレスにXMLをロードしています。 一度に参照するアドレスが多すぎる場合は、コードに遅延を追加する必要があります。ここでXMLからGoogle Mapsにロード中のJavascript setTimeout

は、それがすべてを一度にロードしたときにジオコーダは、その多くの要求を処理できないですように私は、それが遅延して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

これはv3ではなくGoogle Maps API v2です。 – 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); 
} 

関連する問題