2015-03-05 2 views
5

Ich habe derzeit eine funktionierende Broschüre und möchte zusätzlich das Broschüren-Plugin Heatmap.js verwenden. http://www.patrick-wied.at/static/heatmapjs/example-heatmap-leaflet.htmlLeaflet & Heatmap.js - Fehler beim Ausführen von 'getImageData' auf 'CanvasRenderingContext2D'

Der Code, den ich verwende, ist dem Beispiel im obigen Link sehr ähnlich.

var testData = { 
       max: 8, 
       data: [{lat: 24.6408, lng:46.7728, radius:500, count: 3}] 
      }; 


var cfg = { 
       "radius": 2, 
       "maxOpacity": 8, 
       "scaleRadius": true,      
       "useLocalExtrema": true, 
       latField: 'lat',     
       lngField: 'lng', 
       valueField: 'count' 
      }; 

var heatmapLayer = new HeatmapOverlay(cfg); 

map.addLayer(heatmapLayer); 

heatmapLayer.setData(testData); 

Wenn ich die Karte laufen sehe ich kein Zeichen der Heatmap. Dann, wenn ich die Karte schwenken um ich folgende Fehlermeldung in der Konsole:

konnte nicht ausgeführt werden ‚getImageData‘ auf ‚CanvasRenderingContext2D‘: Die Quellhöhe ist 0.

Jede Idee, wie zu lösen Dies? Die Demo auf der heatmap.js-Website funktioniert hervorragend mit fast identischem Code.

Danke!

EDIT:

ich gefunden habe, wo der Fehler aus sein kann eine Verspätung. Linie 316 in heatmap.js ist:

this._height = canvas.height = shadowCanvas.height = +(computed.height.replace(/px/,'')); 

Höhe wird als Null zurückgegeben. Die Breite wird jedoch richtig eingestellt.

+0

Haben Sie ein BaseLayer-Set und das Map-Objekt hinzugefügt? –

+1

Wenn ich die Karte initialisiere, stelle ich sie mit einer Ebene zur Verfügung, die gut funktioniert. Ist es das was du meinst? Ich habe jedoch keine BaseLayer-Eigenschaft in der Map festgelegt. – illwalkwithyou

+0

Ah, ja; Hat Ihr Container auch Breite und Höhe? –

Antwort

7

Eine Lösung gefunden. Es stellte sich heraus, dass die Karte nicht vollständig initialisiert wurde, als ich die heatMapLayer dazu hinzufügte. Als Fix für den Moment habe ich map.addLayer (heatmapLayer) innerhalb einer Timeout-Funktion platziert, um sicherzustellen, dass die Map vollständig geladen ist.

setTimeout(function(){ 
    map.addLayer(heatmapLayer); 
},500) 
+0

Das hat mir viel Zeit gespart! Vielen Dank! – Stophface

+0

Das hat bei mir überhaupt nicht funktioniert. Ich nehme an, Sie könnten den Code dafür schreiben? –

+0

Ich habe den Code leider nicht mehr zur Hand. Aber ich habe die Antwort mit meinem Ansatz aktualisiert. – illwalkwithyou

Verwandte Themen