2016-06-27 14 views
1

Ich muss Pfeilfunktionen erstellen, um Geschwindigkeitsfelder anzuzeigen. Das Problem ist, dass ich Point-Geometrien mit einer externen Ajax-Funktion lade und sie manipuliere, um vor dem Rendern der Ebene eine Linestring-Schicht zu erstellen. Das Problem, das ich habe, entsteht, wenn ich mit der Methode getPixelFromCoordinate() von Pixel zu geographischen Koordinaten umwandeln muss. Dies geschieht, und kann leicht mit dem folgenden Code wiedergegeben werden, die nur die Methode ruft den Koordinaten inmediately nach der Karte Objekterstellung zu transformieren:Openlayers 3: So stellen Sie das Rendern von Karten sicher

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

Der Rückgabewert ist null. aber wenn ich die Karte Rendering erzwingen, bevor die Transformation aufrufen, ist die Ausgabe korrekt

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

In diesem Fall wird die Ausgabe korrekt ist: [500, 235] Kann mir jemand erklären, wenn dies ein erwartetes Verhalten und/oder wenn es eine ist alternative Möglichkeit, das zu tun?, Danke!

+0

Das erwartet wird. Bleibt es in dieser Frage? –

+0

Danke!, Ich habe mich gefragt, ob es auf eine alternative Weise basierend auf dem Hören eines Kartenereignisses, das am Rendering-Ende abgefeuert wurde, existiert. Ich schaute auf "postrender" -Event mit map.on ('postrender' .... aber als ich es versuchte, war ich nicht erfolgreich, obwohl ich nicht sicher war, ob ich einen Fehler gemacht hatte. – user1259970

Antwort

0

Versuchen Sie, diese Veranstaltung zu der Schicht hinzugefügt:

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