2013-04-09 20 views
8

Jak uzyskać wszystkie znaczniki na mapie, aby użytkownicy mogli je wszystkie zobaczyć?OpenLayers wyświetlają wszystkie znaczniki na ekranie

Mam kilka znaczników. Wyświetlam je na mapie. Centrum LonLat otrzymuję od średniej z najwyższych i najniższych liczb lon i lat wszystkich moich znaczników.

Więc mogę ustawić mapę do punktu środkowego wszystkich moich markerów przy użyciu:

map.setCenter(centerLonLat, 8); 

8 to tylko przypadkowy poziom zoomu. Czy istnieje sposób na obliczenie idealnego poziomu powiększenia, aby wszystkie znaczniki były wyświetlane na mapie?

Odpowiedz

3

Got to praca przy użyciu zoomToExtent()

var newBound = OpenLayers.Bounds(); 

Dla każdego lonlat markera:

newBound.extend(lonLat); 

Następnie przekazać go do funkcji:

map.zoomToExtent(newBound); 
+0

powinno być: var newBound = new OpenLayers.Bounds(); –

+0

Użyłem twojego rozwiązania, ale nie działa, ponieważ lonLat na markerze ma wartość null. Ale użyłem 'getCoords()' i działam tak: 'bounds.extend (new OpenLayers.Geometry.Point (marker.getCoords(). Lon, marker.getCoords(). Lat) .transform (fromProjection, toProjection)); ' – IgniteCoders

+0

Czy to jest dla ol2? Czym byłby roztwór ol3? – Ries

8

podobny sposób to zrobić, aby uniknąć pętla jest podana przez OpenLayers getDataExtent() function here. Trzeba zastosować go na warstwie zawierającej swoje znaczniki:

var newBound = map.myLayer.getDataExtent(); 
map.zoomToExtent(newBound); 
+1

Możesz użyć tego również. Ale ponieważ pętam już moje znaczniki, lepiej byłoby zrobić to w tej pętli. – Klaasvaak

1

Jest to stary wątek, ale ze zmianami OpenLayers pomyślałem, że pisać nowe rozwiązanie do tego. Jeśli używasz [ol.source.Vector][1] jako źródła warstwy, możesz wywołać następujący wiersz, aby dopasować widok mapy do twoich danych.

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

To jednocześnie centruje mapę i ustawia zoom tak, że wszystkie dane są widoczne od razu.