2012-02-09 5 views
2

私はこれをしばらくはやっており、マップキャンバス内のすべてのピンに動的にフィットするlatlngboundを実装しようとしています。しかし、それは動作しません。誰かが私のコードに類似したsthを行っている場合、誰も正しい道で私を導くことができますか?Google API v3地図に合わせてすべてのマーカーにズームと境界を設定

var geocoder; 
var map; 
function initializeMap() { 
    geocoder = new google.maps.Geocoder(); 
    var latlng = new google.maps.LatLng(39.88445,-86.11084); 
    var myOptions = { 
     zoom: 9, 
     center: latlng, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
    map = new google.maps.Map(document.getElementById("map_canvas"), 
     myOptions); 
} 
function codeAddress() { 
    var bound = new google.maps.LatLngBounds(); 
    var markers = new Array(); 
    var infowindow = new google.maps.InfoWindow({}); 
    $('.LocAddHidden').each(function(index) { 
     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  
       });  
      } 
     }); 
    }); 
} 

    $(document).ready(function(){ 
    initializeMap(); 
    codeAddress();  
    for(var i in markers) 
    { 
    bound.extend(markers[i].getPosition()); 
    } 
    map.fitBounds(bound); 
});       
+2

'var bound = new google.maps.LatLngBounds();'これは 'codeAddress()'関数の外部では使用できないLOCAL変数です。 'bound.extend(marker [i] .getPosition()); 'マーカーと同じです。 – Cheery

答えて

2

主な問題は、空のループで境界を拡張することです。私はcodeAddress()の開始時に作成するマーカー配列に何を追加しているのか分かりません。ジオコード要求で作成したマーカーを追加する必要があります。

しかし、それを1つのループのマーカー配列に追加する代わりに、別のループで境界を拡張すると、2番目のループを取り除くことができ、最初のループの境界を拡張することができます。

ループの繰り返しごとにマップを再入力する必要はありません。最後に境界を設定すると、再センタリングとズームが行われます。

そして、Cheeryは可変範囲に関する別の問題を指摘しました。代わりに使用したの

+0

ありがとうございました、あなたは正しい方向に私を持っていました! –

0

あなたは、あなたのコード内のマーカー配列を宣言し、その配列IE8が機能するために

// global 
var markers = []; 

// after created 
markers.push(marker); 
3

にそれぞれ作成されたマーカーをプッシュする必要があります。..

for(var i in markersArray)

これを使用してください:for (i = 0; i < markersArray.length; i++)

0

いくつかの試みの後で、私は単純で実用的な何かを持っています:

function simulateBounds() { 

    var bounds = new google.maps.LatLngBounds; 

    for (var i = 0; i < arrayChinchetas.length; i++) { 
     bounds.extend(arrayChinchetas[i].getPosition()); 
    } 

    SurOeste = bounds.getSouthWest(); 
    NorEste = bounds.getNorthEast(); 

    //Constructs a rectangle from the points at its south-west and north-east corners. 
    var latlandBounds = new google.maps.LatLngBounds(SurOeste, NorEste); 

    map.fitBounds(latlandBounds); 

}