2015-01-27 2 views
6

Ho un MapQuest visualizzato con OpenLayer3. Voglio ottenere le coordinate della vista (l'area della mappa viene visualizzata in tempo reale). Per l'intera mappa dovrebbe essere così: (180,90) x (-180, -90).OpenLayer3 - come ottenere le coordinate della vista

ma ho ottenuto: Top-destra longitudine: 37570328,14,272983 millions Top-destra latitudine: longitudine 18941707,105,292957 millions Down-sinistra: latitudine -37570328,14272983 Down-sinistra: -18941707,105292957

ho jsFiddle per esso: http://jsfiddle.net/0d6d6kxf/2/

(cliccare su "get coords viewport" div per ottenere coordinate di mappa corrente)

Il comando che uso per le coordinate get è: var = misura map.getVi . Ew() calculateExtent (map.getSize());

Perché questi risultati non sono in gradi? Come ottenere i gradi di laurea?

codice JS:

$(document).ready(function(){ 
    object = new QuestMapWrapper();  
    object.openMap(); 
    object.getViewportCords();  
}); 

function QuestMapWrapper() 
{ 
    //private var 
    var map; 
    var view; 

    //public var 
    this.wrapperName="QuestMapWrapper"; 

    //methods 
    this.openMap = function() { 

    //$('#ol-viewport').show(); 
    //$('#gmap').hide(); 


    //set layers of one 
    var layers = [ 
    new ol.layer.Tile({ 
     style: 'Road', 
     source: new ol.source.MapQuest({layer: 'osm'}) 
    })] 

    view = new ol.View({ 
    //center: ol.proj.transform([20, 52.702222], 'EPSG:4326', 'EPSG:3857'), 
    center: ol.proj.transform([0., 0.0], 'EPSG:4326', 'EPSG:3857'), 
    //center: [-73.979378, 40.702222], 
    zoom: 1 
    }); 

    map = new ol.Map({ 
     layers: layers, 
     //renderer: exampleNS.getRendererFromQueryString(), 
     target: 'map', 
     view: view 
    }); 

    }; 

    /** Set viewport details */ 
    this.getViewportCords = function() { 

    //var extent = view.calculateExtent(map.getSize()); 
    var extent = map.getView().calculateExtent(map.getSize()); 

    //var extent = map.getExtent().transform(map.projection, map.displayProjection) 

    var factor = 1; // coordinates must be devided by 100000 to get real coord 

    $('#tr-lon').text(extent[2]/factor); 
    $('#tr-lat').text(extent[3]/factor);  
    $('#dl-lon').text(extent[0]/factor); 
    $('#dl-lat').text(extent[1]/factor);  
    } 
} 

risposta

18

siete quasi arrivati.

var extent = map.getView().calculateExtent(map.getSize()); 

Questa linea è corretta, ma le coordinate si ottiene sono in una proiezione utilizzata dalla mappa (EPSG: 3857) ed è necessario convertirlo di nuovo al normale lon/lat (WGS84/EPSG: 4326).

messo la seguente riga dopo per convertire la misura:

extent = ol.proj.transformExtent(extent, 'EPSG:3857', 'EPSG:4326'); 

Come si può vedere quando è stata creata la vista, si utilizza una funzione di trasformazione per convertire il centro coordinate per EPSG: 3857, che è un formato che la mappa capisce. Ogni volta che si inviano le coordinate nella vista è necessario inviarlo in quella proiezione. Ogni volta che leggi dalla vista, devi convertirla nuovamente nella proiezione che usi, in questo caso EPSG: 4326.

+0

Sì:) ... l'ho appena risolto pochi minuti fa dopo il tuo primo indizio:) ... –