Google Maps API V3-Methode fitBounds ()


70

Ich habe diesen Code, der eine Karte rendert.

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);

    }

Selbst wenn die beiden Punkte von 25 km getrennt sind, erhalte ich folgendes Ergebnis:

Geben Sie hier die Bildbeschreibung ein

Ich möchte zwar einen höheren Zoom rendern.

So was

Geben Sie hier die Bildbeschreibung ein

Ich benutze die Methode fitBounds ()

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

Danke für deine Unterstützung

Antworten:


149

Dies geschieht, weil LatLngBounds()nicht zwei beliebige Punkte als Parameter verwendet werden, sondern SW- und NE-Punkte

Verwenden Sie die .extend()Methode für ein Objekt mit leeren Grenzen

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

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


Korrekte Antwort. SW- und NE-Punkte müssen an die Extend-Methode übergeben werden. Die fitBounds-Methode sollte jedoch aufgerufen werden, sobald die Karte vollständig geladen ist. Möglicherweise möchten Sie auch padding = 0 an fitBounds wie folgt übergeben: map.fitBounds (markerBounds, 0);
Tala9999

30

LatLngBoundsmuss mit Punkten in (südwestlicher, nordöstlicher) Reihenfolge definiert werden. Ihre Punkte sind nicht in dieser Reihenfolge.

Die allgemeine Lösung, insbesondere wenn Sie nicht wissen, dass die Punkte definitiv in dieser Reihenfolge liegen, besteht darin, eine leere Grenze zu erweitern:

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

Die API sortiert die Grenzen.


10
Hah! Einfach geschlagen. iPad-Tastaturen machen das schnelle Tippen nicht einfach.
Andrew Leach

23

Ich habe das gleiche Problem, das Sie beschreiben, obwohl ich meine LatLngBounds wie oben vorgeschlagen aufbaue. Das Problem ist, dass die Dinge asynchron sind und ein Anruf map.fitBounds()zur falschen Zeit zu einem Ergebnis wie im Q führen kann. Der beste Weg, den ich gefunden habe, besteht darin, den Anruf in einem inaktiven Handler wie diesem zu platzieren:

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

1
Vielen Dank, dies war eine große Hilfe für mich, da ich Adressen in
Koordinaten geokodierte

2
Ich bin auf ein ähnliches Problem gestoßen, weil das enthaltene HTML beim Aufrufen noch nicht angezeigt wurde fitBounds(), sodass sich das Zoomen anscheinend nicht selbst herausfinden konnte. Es hat mir geholfen, sicherzustellen, dass die Karte zuerst angezeigt wurde, bevor ich versuchte zu zoomen.
Stevo

Vielen Dank, Sie retten mich, das funktioniert perfekt, diese Antwort ist richtig für meinen Fall.
Mauricio Trinidad

Sie sind ein Lebensretter
Zorox

8
 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);

Für mich, ich musste aus ändern bounds.extend(marker)zu bounds.extend(marker.position). Danke
krummens
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.