2010-08-04 6 views
7

Mam problem z funkcjami fitBounds googlemaps.Google Maps pasBounds nie działa prawidłowo

for (var i = 0; i < countries.length; i++) { 
var country = countries[i]; 
var latlng = new google.maps.LatLng(parseFloat(country.lat), parseFloat(country.lng)); 
mapBounds.extend(latlng); 
} 

map.fitBounds(mapBounds); 

Niektóre ikony będą wyświetlane poza widocznym obszarem/widocznym obszarem.

A pomysł?

Z góry dziękuję.

Odpowiedz

0

Pokaż nam link do pacjenta. Ile masz krajów w tablicy krajów? Cały świat? Czy twoje granice przekraczają anty-południk?

country.lat i country.lng są jednym punktem dla każdego kraju, a to nie wystarcza do zdefiniowania obwiedni danego kraju. Czy to jakiś "centroid kraju"?

Jeśli tak jest i jeśli masz markery na wschód od środka ciężkości krańca najbardziej wysuniętego na wschód lub na zachód od środka ciężkości krainy na zachód, te znaczniki będą oczywiście wypadać poza granice twojego położenia definiowanie.

Metoda map.fitBounds() działa dobrze. :-)

Marcelo.

9

Rozważmy następujący przykład, który wygeneruje 10 losowych punktów w północno-wschodniej części USA i zastosuje metodę fitBounds().

<!DOCTYPE html> 
<html> 
<head> 
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
    <title>Google Maps LatLngBounds.extend() Demo</title> 
    <script src="http://maps.google.com/maps/api/js?sensor=false" 
      type="text/javascript"></script> 
</head> 
<body> 
    <div id="map" style="width: 400px; height: 300px;"></div> 

    <script type="text/javascript"> 

    var map = new google.maps.Map(document.getElementById('map'), { 
    mapTypeId: google.maps.MapTypeId.TERRAIN 
    }); 

    var markerBounds = new google.maps.LatLngBounds(); 

    var randomPoint, i; 

    for (i = 0; i < 10; i++) { 
    // Generate 10 random points within North East USA 
    randomPoint = new google.maps.LatLng(39.00 + (Math.random() - 0.5) * 20, 
              -77.00 + (Math.random() - 0.5) * 20); 

    // Draw a marker for each random point 
    new google.maps.Marker({ 
     position: randomPoint, 
     map: map 
    }); 

    // Extend markerBounds with each random point. 
    markerBounds.extend(randomPoint); 
    } 

    // At the end markerBounds will be the smallest bounding box to contain 
    // our 10 random points 

    // Finally we can call the Map.fitBounds() method to set the map to fit 
    // our markerBounds 
    map.fitBounds(markerBounds); 

    </script> 
</body> 
</html> 

Odświeżanie tego przykładu wiele razy, żaden znacznik nigdy nie wychodzi poza rzutnię. Co najwyżej czasami markerem jest lekko obcięty od góry po ukryty za sterami:

Google Maps LatLngBounds.extend() Demo http://img825.imageshack.us/img825/7424/fitboundsfit.png

Warto też nic, że fitBounds() zawsze pozostawia niewielki margines między obiektem LatLngBounds i rzutni. Jest to wyraźnie pokazane na poniższych zrzutach ekranu, gdzie obwiednia czerwony reprezentuje LatLngBounds który jest przekazywany do metody fitBounds():

fitBounds Padding http://img204.imageshack.us/img204/9149/fitit.png

fitBounds Padding http://img441.imageshack.us/img441/9615/fitus.png

Możesz być także zainteresowany sprawdzanie następujący stos przelewowe posty na ten temat: