2012-03-20 13 views
3

私はSQLから来る50のアドレスを持っています。各アドレスはdiv LocationAddressの内部でレンダリングされます。私はそれらのそれぞれをループし、ジオコードし、マーカーを地図にプロットします。しかし、それは11の表示のみです。これは、ジオコーダがボトルネックになっているためです。これを制御するためにsetintervalまたはsettimeoutを使用するにはどうすればよいですか?私は実際にそれをコード化し、テストGoogleマップv3のsetintervalまたはsettimeout

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

...研究とthis..please誰かが私を導く処理するためのsetTimeoutを使っている人を見て、この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()の内部?またはafter codeAddress(){} ?? –

+0

あなたは外に出ます。とにかく、私たちが作成した間隔をクリアするために、addresses.length == 0の部分を編集しました。 – Mikko

+0

getAddress()はどこに呼び出されますか? sthが壊れてしまったので、私の地図はまったく表示されませんでした。あなたが '私たちのアドレスと情報ウィンドウを含む上に変数を宣言しました。彼らはどんな機能にも利用可能ですか? –

0

あなたはとても要求を直列化可能性あなたは一度に1つのアドレスを処理します。それが終わると、あなたは次のものを処理します。これは次のようにすることができます:

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

関連する問題