2015-01-07 17 views
13

Sto cantando OpenLayers 3 per visualizzare una mappa. Voglio centrare la mappa usando le coordinate LatLon. Sto usando il quickstart code per cominciare. Utilizzando questo codice, non posso cambiare il centro della mappa. Penso che questo abbia qualcosa a che fare con Spherical Mercator projection. L'unica cosa è che ho solo le coordinate lat lon.Openlayers 3 center map

Qualcuno sa come centrare una mappa da openlayers v3?

risposta

22

È necessario trasformare le coordinate lat/lon alla proiezione corretta (o sistema di coordinate) utilizzando

var olCoordinates = ol.proj.transform([lon, lat],"WGS84", "EPSG:900913") 

Ora è possibile impostare il centro con olCorrdinates.

Proiezioni diverse ha nomi di codice diversi. WGS84 è "normale" lon/lat ed EPSG: 900913 è la proiezione usata spesso nelle mappe web come google maps, openstreetmap e bing.

Penso che OpenLayers 3 abbia incorporato il supporto per la trasformazione da WGS84/EPSG: 4326 (lon/lat), ma se è necessario convertire da o verso altri sistemi di coordinate è possibile includere la libreria proj4js. Gli Openlayer si integreranno con questa libreria e saranno in grado di eseguire le trasformazioni allo stesso modo.

Transform documentazione http://openlayers.org/en/v3.1.1/apidoc/ol.proj.html

Proj4 lib https://github.com/proj4js/proj4js

Edit: Nell'esempio che si sta riferendo a, la posizione centrale è in realtà costituito con lon/lat.

view: new ol.View({ 
    center: ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857'), 
    zoom: 4 
}) 

EPSG: 4326 è in realtà lo stesso WGS84 e EPSG: 3857 è lo stesso EPSG: 900913. Questo è molto confuso. Ci sono stato anch'io.

Hai solo bisogno di cambiare i numeri 37.41 e 8.82 alle tue coordinate lon/lat. Se si desidera modificare la posizione centrale dopo l'inizializzazione, sarà necessario utilizzare setCenter();

map.getView().setCenter(ol.proj.transform([lon, lat], 'EPSG:4326', 'EPSG:3857')) 
+1

Che cos'è: "WGS84", "EPSG: 900913"? Vedo queste cose su molti siti, ma non capisco veramente di cosa si tratta. – SheperdOfFire

+3

È una proiezione di mappe o un sistema di coordinate. Ci sono molti modi per misurare il mondo e questi sono solo nomi in codice su diversi modi per farlo. WGS84 sono lon/lat e EPSG: 900913 è quello usato da openstreetmap, google, bing ecc. Ci sono anche altri come proiezioni UTM che sputano il mondo in piccoli rettangoli e usano il sistema metrico come coordinate. –

+2

Presta inoltre attenzione all'ordine degli argomenti. Il metodo ol.proj.transform si aspetta [longitudine, latitudine], mentre alcuni programmi usano l'ordine di latitudine/longitudine degli argomenti. Ad esempio, quando selezioni "cosa c'è qui" dal menu di scelta rapida di una mappa di Google, la posizione viene visualizzata come latitudine/longitudine. –

7

OpenLayers introdotti ol.proj.fromLonLat e ol.proj.toLonLat funzioni on Mar. 2015.

per centrare la mappa, si consiglia di utilizzarlo durante l'inizializzazione

view: new ol.View({ 
     center: ol.proj.fromLonLat([lon, lat]) 
     }) 

o dopo la mappa è stata creata

map.getView().setCenter(ol.proj.fromLonLat([lon, lat])) 

Anche se sono just wrappers di ol.proj.transform, li trovo più semplice da usare.

I Web Mercators predefiniti sono EPSG:4326 e EPSG:3857.

Come Ole Borgersen states, WGS84 è lo stesso di EPSG:4326 che è il tipo di coordinate Long-Lat con cui siamo abituati a lavorare.

ol.proj.fromLonLat([lon, lat]); 
// is equivalent of 
ol.proj.transform([lon, lat], 'EPSG:4326', 'EPSG:3857') 

ol.proj.toLonLat([lon, lat]); 
// is equivalent of 
ol.proj.transform([lon, lat], 'EPSG:3857', 'EPSG:4326') 
Problemi correlati