2012-04-22 11 views
52

Mam ten kod, który renderuje mapę.Google maps API V3 method fitBounds()

function initialize() { 
    var myOptions = { 
     center: new google.maps.LatLng(45.4555729, 9.169236), 
     zoom: 13, 
     mapTypeId: google.maps.MapTypeId.ROADMAP, 

panControl: true, 
mapTypeControl: false, 
panControlOptions: { 
      position: google.maps.ControlPosition.RIGHT_CENTER 
     }, 
zoomControl: true, 
zoomControlOptions: { 
    style: google.maps.ZoomControlStyle.LARGE, 
    position: google.maps.ControlPosition.RIGHT_CENTER 
}, 
scaleControl: false, 
streetViewControl: false, 
streetViewControlOptions: { 
    position: google.maps.ControlPosition.RIGHT_CENTER 
      } 
     }; 
    var map = new google.maps.Map(document.getElementById("mapCanvas"), 
     myOptions); 



var Item_1 = new google.maps.LatLng(45.5983128 ,8.9172776); 

var myPlace = new google.maps.LatLng(45.4555729, 9.169236); 

var marker = new google.maps.Marker({ 
    position: Item_1, 
    map: map}); 

var marker = new google.maps.Marker({ 
    position: myPlace, 
    map: map}); 

var bounds = new google.maps.LatLngBounds(myPlace, Item_1); 
map.fitBounds(bounds); 

    } 

Nawet jeśli te dwa punkty są oddzielone od 25 km uzyskać ten wynik:

enter image description here

Chociaż chciałbym uczynić wyższy poziom zoom.

Ci się to

enter image description here

używam metody fitBounds()

var bounds = new google.maps.LatLngBounds(myPlace, Item_1); 
    map.fitBounds(bounds); 

Dziękujemy za wsparcie

Odpowiedz

119

Dzieje się tak dlatego LatLngBounds() nie bierze dwóch dowolnych punktów parametry, ale punkty SW i NE

użyć metody .extend() na pusty granicach obiektu

var bounds = new google.maps.LatLngBounds(); 
bounds.extend(myPlace); 
bounds.extend(Item_1); 
map.fitBounds(bounds); 

Demo w http://jsfiddle.net/gaby/22qte/

29

LatLngBounds musi być określony w punktach (na południowy-zachód, północ-wschód) kolejności. Twoje punkty nie są w tej kolejności.

Ogólny fix, zwłaszcza jeśli nie wiem punkty z pewnością będzie w tej kolejności, jest rozszerzenie pustym granic:

var bounds = new google.maps.LatLngBounds(); 
bounds.extend(myPlace); 
bounds.extend(Item_1); 
map.fitBounds(bounds); 

API będzie uporządkować granice.

+7

Hah! Po prostu pobity. Klawiatury do iPada nie ułatwiają szybkiego pisania. –

18

Mam ten sam problem, który opisujesz, chociaż buduję moje LatLngBounds, jak zaproponowano powyżej. Problemem jest to, że rzeczy są asynchroniczne i nazywając map.fitBounds() w niewłaściwym czasie może zostawiają cię z niczym w wyniku Q. Najlepszym sposobem znalazłem to, aby nawiązać połączenie w bezczynności obsługi jak ten:

google.maps.event.addListenerOnce(map, 'idle', function() { 
    map.fitBounds(markerBounds); 
}); 
+1

Dzięki, to była dla mnie ogromna pomoc, ponieważ geokodowałem adresy do współrzędnych, a następnie mapowałem do tych współrzędnych, ale to nie działało. – andrewtweber

+0

Zdarzyło mi się podobny problem, ponieważ zawierający HTML nie był jeszcze wyświetlany podczas wywoływania 'fitBounds()', więc widocznie zoom nie mógł się wydobyć. Upewnienie się, że mapa była wyświetlana jako pierwsza przed próbą jej przybliżenia, pomogło mi. – stevo

+1

pomoc HUUUGE, dziękuję za tę odpowiedź –

6
var map = new google.maps.Map(document.getElementById("map"),{ 
       mapTypeId: google.maps.MapTypeId.ROADMAP 

      }); 
var bounds = new google.maps.LatLngBounds(); 

for (i = 0; i < locations.length; i++){ 
     marker = new google.maps.Marker({ 
      position: new google.maps.LatLng(locations[i][1], locations[i][2]), 
      map: map 
     }); 
bounds.extend(marker.position); 
} 
map.fitBounds(bounds); 
+2

Cool to działa dla mnie. Dzięki @MAMASSi –

Powiązane problemy