2015-01-27 20 views
6

OpenLayer3 ile görüntülenen bir MapQuest var. Viewport koordinatlarını almak istiyorum (harita alanı düzenli olarak görüntülenir). Bütün harita için bu şöyle olmalı: (180,90) x (-180, -90).OpenLayer3 - görünümün koordinatları nasıl alınır

ama var: Sağ üst boylam: 37570328,14272983 Sağ üst enlem: 18941707,105292957 Aşağı sol boylam: -37570328,14272983 Aşağı sol enlem: Ben bunun için jsFiddle var -18941707,105292957

: http://jsfiddle.net/0d6d6kxf/2/

Ben olsun koordinatları için kullanmak komutu (div geçerli haritanın coords elde etmek için "görünüm penceresi coords Al" ı tıklayın) 'dir: var ölçüde = map.getVi . Ew() calculateExtent (map.getSize());

Bu sonuçlar neden derece değil? Derecesi nasıl korunuyor?

JS kodu:

$(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);  
    } 
} 

cevap

18

Neredeyse vardır.

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

Bu çizgi doğrudur ama, anlamaya koordinatları harita (EPSG: 3857) tarafından kullanılan bir projeksiyonda ve normal boylam/enlem (WGS84/EPSG: 4326) geri dönüştürmek gerekir. Eğer Görünüm oluştururken Gördüğünüz gibi

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

, sen merkezi dönüştürmek için bir dönüştürme işlevini kullanın EPSG koordinatları: derecesini dönüştürmek sonra

aşağıdaki satırı koymak 3857 bir biçimdir olanı harita anlıyor. Koordinatları View'a her gönderdiğinizde, o projeksiyonda göndermeniz gerekir. Görünümden okurken, kullandığınız projeksiyona geri dönmeniz gerekir, bu durumda EPSG: 4326.

+0

Evet:) ... Bunu birkaç dakika önce ilk ipucundan sonra çözdüm:) ... –

İlgili konular