2013-04-25 21 views
2

我試圖在L.geoJson圖層上顯示傳單畫布層。然而,使用方法無法完成的傳單似乎存在一個錯誤。變通辦法讓小葉畫布層顯示在上面?

var canvasTiles = L.tileLayer.canvas(); 

https://github.com/Leaflet/Leaflet/issues/974

我已經試過停靠drawTile()方法的末尾下面的函數,企圖頂得上畫布層,但它不工作。

var interiorMaskLayer = null; 
var exteriorMaskLayer = null; 

function addMaskToBack(){ 
    insertAtTheBottom = true; 
    if (interiorMaskLayer && exteriorMaskLayer){   

     map.removeLayer(interiorMaskLayer); 
     map.removeLayer(exteriorMaskLayer); 
     } 
    interiorMaskLayer = L.geoJson(interiorMaskGeojsonPoly, {style: interiorStyle}) 
    map.addLayer(interiorMaskLayer, insertAtTheBottom); 
    exteriorMaskLayer = L.geoJson(exteriorMaskGeojsonPoly, {style: exteriorStyle}); 
    map.addLayer(exteriorMaskLayer, insertAtTheBottom); 
} 

是否有解決方法可以讓畫布層顯示在頂部?

使用Leaflet-Leaflet-v0.5.1-0-gc1d410f.zip

回答

3

的問題是,他們在不同的DIV元素,具有不同的z指數,所以不管是什麼的z-index你給孩子的節點,它不會出現在任何東西的前面或後面,除了它的兄弟姐妹。

下面是我做什麼,作爲一個貧窮的,但是可行的,解決方法:

進行以下更改小葉源代碼(繼leaflet-src.js 5.1版本的文件),移動覆蓋窗格平鋪窗格:

line 1782panes.overlayPane = this._createPane('leaflet-overlay-pane', this.tilePane);

僅僅除去從瓦磚窗格:

line 8242

_clearTileBg: function() { 
     if (!this._animatingZoom && !this.touchZoom._zooming) { 
      /* this._tileBg.innerHTML = ''; */ 
      var the_tiles = this._tileBg.getElementsByClassName('leaflet-layer'); 
      var the_count = the_tiles.length; 
      while(the_count>0){ 
       var child = the_tiles[the_count-1]; 
       child.parentNode.removeChild(child); 
       the_count--; 
      } 
     } 
    } 

而移動,當瓦片被移動(在變焦)覆蓋窗格:

,並添加此行line 8230前:this._tilePane.appendChild(this.getPanes().overlayPane);

這些變化畫布添加到平鋪窗格,使他們是兄弟姐妹,因此他們的z-指數會影響他們彼此的相對位置。因此,您不需要清除瓦片窗格(this._tileBg.innerHTML = '';),而需要移除瓦片圖層。另外,單張交替顯示哪個窗格是拼貼窗格,以便它可以執行縮放動畫,因此您需要將疊加窗格移動到拼貼窗格。

此修復程序正在進行中。

希望這會有所幫助!