How to change the map center in Leaflet.js
Asked Answered
I

6

153

The following code initializes a leaflet map. The initialize function centers the map based on user location. How do I change the center of the map to a new position after calling the initialize function?

function initialize() {
map = L.map('map');
L.tileLayer('http://{s}.tile.cloudmade.com/BC9A493B41014CAABB98F0471D759707/997/256/{z}/{x}/{y}.png', {
    maxZoom: 18,
    attribution: 'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="http://cloudmade.com">CloudMade</a>'
}).addTo(map);

map.locate({setView: true, maxZoom: 8});    
} 
Iulus answered 4/10, 2012 at 20:24 Comment(0)
M
227

For example:

map.panTo(new L.LatLng(40.737, -73.923));
Minton answered 4/10, 2012 at 20:44 Comment(3)
map.flyTo([40.737, -73.923], 8) if you want to zoom and animate as wellUndergrowth
In my case however, panTo(), flyTo(), setView() - all of them take me to the top left of the map, and not the center.Teillo
@MrigankPawagi use setTimeout(function () {map.invalidateSize(true)}, 100);Waits
A
160

You can also use:

map.setView(new L.LatLng(40.737, -73.923), 8);

It just depends on what behavior you want. map.panTo() will pan to the location with zoom/pan animation, while map.setView() immediately set the new view to the desired location/zoom level.

Annunciation answered 7/10, 2012 at 21:51 Comment(4)
I like this one because you also get the zoom level, which is very useful.Tum
Also you can pass the coordinates as an array: map.setView([40.737, -73.923], 8) or an object map.setView({lat:40.737, lng:-73.923}, 8)Comely
panTo was not showing animation, I use map.setView(latlng, map.getZoom(), { animation: true });Rouge
animation still not working with setViewGlennisglennon
Q
15

Use map.panTo(); does not do anything if the point is in the current view. Use map.setView() instead.

I had a polyline and I had to center map to a new point in polyline at every second. Check the code : GOOD: https://jsfiddle.net/nstudor/xcmdwfjk/

mymap.setView(point, 11, { animation: true });        

BAD: https://jsfiddle.net/nstudor/Lgahv905/

mymap.panTo(point);
mymap.setZoom(11);
Quinary answered 17/7, 2018 at 9:14 Comment(1)
Doesnt' animate for me.Glennisglennon
T
7

You could also use:

var latLon = L.latLng(40.737, -73.923);
var bounds = latLon.toBounds(500); // 500 = metres
map.panTo(latLon).fitBounds(bounds);

This will set the view level to fit the bounds in the map leaflet.

Ticktock answered 8/5, 2019 at 14:7 Comment(0)
W
2

In the case of map-centering problem despite using panTo(),flyTo() or setView() try to adjust the map with map.invalidateSize():

setTimeout(function () {
    map.invalidateSize(true);
}, 100);

jQuery sample:

$(document).ready(function () {
    mymap.invalidateSize();
});
Waits answered 18/3, 2022 at 13:3 Comment(0)
B
0

I was looking for a way to change the bounds but without the animation. This worked for me:

var bounds = L.latLng(40.737, -73.923).toBounds();
map.fitBounds(bounds, {animation: false});
Barnhill answered 19/8, 2021 at 17:13 Comment(1)
I have many markers in the map, my use case is to select a marker and zoom it and I want to keep it on the center of the map when zoomendStogy

© 2022 - 2024 — McMap. All rights reserved.