2013-06-24 6 views
37

ich leaflet.js und möchte eine Möglichkeit, die Karte auf den Markern zu zentrieren, die ich habe, so dass alle in der Benutzeransicht sind, wenn die Seite startet. Wenn alle Marker in einem kleinen Bereich gruppiert sind, möchte ich, dass die Karte auf ein Level herunterzoomt, das immer noch alle anzeigt.Leaflet.js zentrieren Sie die Karte auf eine Gruppe von Markern

Ich weiß Google Maps hat eine Autocenter-Funktion, aber wie würde ich mit Leaflet.js darüber gehen?

Antwort

80

Sie können L.LatLngBounds verwenden, um einen Bereich zum Zoomen zu erstellen.

Zuerst wird eine Grenze erstellen und ein Array von L.LatLngs passieren:

var bounds = new L.LatLngBounds(arrayOfLatLngs); 

Dies wird eine Grenze schaffen, daß jeden Punkt einkapseln wird, die in der Anordnung enthalten ist. Sobald Sie die Grenzen haben, können Sie die Grenzen der Karte passen erstellten gebunden entsprechen:

map.fitBounds(bounds); 

Dies wird die Karte so weit vergrößern, wie es gehen kann, während immer noch jeden Punkt im Array enthält. Alternativ können Sie auch die fitBounds Methode aufrufen, indem Sie sie einfach aufrufen und ein Array von L.LatLng Objekten übergeben. Zum Beispiel:

map.fitBounds([[1,1],[2,2],[3,3]]); 

Dies würde funktionieren genau das gleiche, ohne die Notwendigkeit, eine bestimmte L.LatLngBounds Objekt zu erstellen.

+0

Dies funktioniert, obwohl mit Fit-Grenzen haben Sie vielleicht erwähnt, dass die Grenzen Sie Nordwesten und Südosten benötigen. Als Referenz für alle, die dies verwenden, müssen Sie die Max- und Min-Werte für Breiten- und Längengrad auf Ihren Markern finden. – lorless

+6

'L.LatLngBounds' hat zwei Konstruktoren. Einer von ihnen ist, was Sie beschreiben - zwei Punkte, Nordwesten und Südosten. Der zweite Konstruktor nimmt jedoch ein Array von "L.LatLngs" beliebiger Größe. Zusätzlich können Sie 'L.LatLngBounds.extend()' aufrufen, um die Größe bestehender Grenzen zu erhöhen. Wenn Sie eine dieser beiden Optionen verwenden, sollten Sie nie mehr als/weniger als Überprüfungen durchführen, um die Größe der Grenzen manuell zu erhöhen. –

+0

Ausgezeichnete Antwort und danke für die Beantwortung von Kommentarfragen, da die Erklärung half, die Funktionalität besser zu verstehen (sogar 3 Jahre später) – redfox05