2016-06-27 49 views
1

我必須建立箭頭功能來顯示速度場。問題是我使用外部ajax函數加載點幾何圖形,並在渲染圖層之前操作它以構建一個Linestring圖層。當我需要使用getPixelFromCoordinate()方法將像素轉換爲地理座標時,出現了這個問題。出現這種情況,可以用下面的代碼,只有調用該方法的地圖對象創建之後inmediately變換座標很容易地複製:Openlayers 3:如何確保地圖渲染

function init() { 

    var map = new ol.Map({ 
    layers: [ new ol.layer.Tile({ source: new ol.source.OSM() }) ], 
    target: 'map', 
    view: new ol.View({center: [0, 0], zoom: 2 }) 
    }); 

    var kk = map.getPixelFromCoordinate([0,0]); 
    console.log(kk); 
} 

返回值是null。但是如果我打電話改造前強制地圖渲染,輸出是正確的

map.renderSync(); 
var kk = map.getPixelFromCoordinate([0,0]); 
console.log(kk); 

在這種情況下,輸出是正確的:[500, 235] 有人能解釋我,如果這是一個預期的行爲和/或如果有一個替代方法呢?,謝謝!

+0

這是預期。它在這個問題上還有什麼? –

+0

謝謝!我想知道是否有另一種方式,基於在渲染結束時偵聽一些地圖事件。我正在用map.on('postrender')查看「postrender」事件......但是當我嘗試時,我沒有成功,但我不確定是否犯了一個錯誤。 – user1259970

回答

0

嘗試增加這個事件的層:

tileLayer.on('postcompose', function(e) { 
    if (tileLayer.getVisible()) { 
     var kk = map.getPixelFromCoordinate([0,0]); 
     console.log(kk); 
    } 
});