Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OpenLayers display all markers on screen

How do I get all the markers on the map so the users can see all of them?

I have got some amount of markers. I am displaying them on the map. The center LonLat I get from taking the average of the highest and the lowest numbers of the lon and lat of all my markers.

So I set my map to the center point of all my markers using:

map.setCenter(centerLonLat, 8);

8 is just a random zooming level. Is there any way to calculate the perfect zooming level so all the markers are displayed in the map?

like image 586
Klaasvaak Avatar asked Apr 09 '13 19:04

Klaasvaak


3 Answers

A similar way to do it, avoiding a loop, is given by OpenLayers getDataExtent() function here. You need to apply it on the layer containing your markers :

var newBound = map.myLayer.getDataExtent();
map.zoomToExtent(newBound);
like image 131
AnthonyLeGovic Avatar answered Nov 03 '22 12:11

AnthonyLeGovic


This is an old thread, but with changes to OpenLayers I thought I'd post a new solution to this. If you are using a ol.source.Vector as your layer source then you can call the following line to fit the map view around your data.

map.getView().fit(vectorSource.getExtent());

This simultaneously centers the map and sets the zoom so that all of your data is visible at once.

like image 42
UnboxedSoul Avatar answered Nov 03 '22 13:11

UnboxedSoul


Got it working using zoomToExtent()

var newBound = OpenLayers.Bounds();

For each marker lonlat:

newBound.extend(lonLat);

Then pass it to the function:

map.zoomToExtent(newBound);
like image 22
Klaasvaak Avatar answered Nov 03 '22 12:11

Klaasvaak