2013-04-09 24 views
8

Come ottengo tutti gli indicatori sulla mappa in modo che gli utenti possano vederli tutti?OpenLayers visualizza tutti i marker sullo schermo

Ho una certa quantità di marker. Li sto visualizzando sulla mappa. Il centro LonLat tratto dalla media dei numeri più alti e più bassi del lon e lat di tutti i miei marcatori.

Così ho impostato la mia mappa per il punto centrale di tutti i miei marcatori utilizzando:

map.setCenter(centerLonLat, 8); 

8 è solo un livello di zoom casuale. C'è un modo per calcolare il livello di zoom perfetto in modo che tutti i marker vengano visualizzati nella mappa?

risposta

3

ottenuto lavorando con zoomToExtent()

var newBound = OpenLayers.Bounds(); 

Per ogni lonlat marcatore:

newBound.extend(lonLat); 

Poi passare alla funzione:

map.zoomToExtent(newBound); 
+0

deve essere: var newBound = new OpenLayers.Bounds(); –

+0

ho usato la tua soluzione, ma non funziona perché lonLat sul marcatore è nullo. Ma ho usato 'getCoords()' e ho lavorato in questo modo: 'bounds.extend (new OpenLayers.Geometry.Point (marker.getCoords(). Lon, marker.getCoords(). Lat) .transform (fromProjection, toProjection)); ' – IgniteCoders

+0

E 'questo per ol2? Quale sarebbe la soluzione di ol3? – Ries

8

Un modo analogo a farlo, evitando un ciclo, è dato da OpenLayers getDataExtent() function here. È necessario applicare sullo strato contenente i marcatori:

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

Si potrebbe usare anche quello. Ma dato che sto già girando i miei pennarelli, sarebbe meglio farlo in quel ciclo. – Klaasvaak

1

questo è un vecchio thread, ma con le modifiche al OpenLayers ho pensato di pubblicare una nuova soluzione a questo. Se si utilizza uno [ol.source.Vector][1] come origine del livello, è possibile chiamare la seguente riga per adattarla alla vista della mappa intorno ai dati.

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

Centra contemporaneamente la mappa e imposta lo zoom in modo che tutti i dati siano visibili contemporaneamente.

Problemi correlati