2014-10-22 76 views
0

發生縮放時,是否可以隱藏圖層上的所有要素?我試圖在圖層上設置可見和不透明屬性,以便在縮放時顯示。此外,我試圖將每個功能的樣式設置爲「無」,但似乎並不奏效。我試圖與這兩個備選方案:隱藏一層或多層放大openlayers 3的功能?

function hideGraphicsFeatures(hide) { 
    if(hide) { 
    graphicsLayer.setVisible(false); 
    } else { 
    graphicsLayer.setVisible(true); 
    } 
    map.render();  

}

2.

function hideGraphicsFeatures(hide) { 
    var features = graphicsLayer.getFeatures(); 
    if(hide) { 
    for (var i = features.length - 1; i >= 0; i--) { 
      features[i].style.display = 'none'; 
    }; 
    } else { 
    for (var i = features.length - 1; i >= 0; i--) { 
      features[i].style.display = ''; // show. Set to anything but 'none' 
    }; 
    } 
    map.render();  

}

回答

1

我相信我知道你在找什麼。當地圖上顯示許多圖層上的數以萬計的功能時,我必須做類似的工作來提高縮放/平移性能。對於平移,當第一個地圖'pointerdrag'事件被觸發並將其設置回'moveend'事件中可見時(您可能需要一些額外的處理以避免重複操作和數據重新加載),將圖層的可見性設置爲false

對於縮放這是一個有點棘手,但幸運的是,你可以通過使用自定義功能覆蓋ol.interaction.MouseWheelZoom處理程序:

ol.interaction.MouseWheelZoom.handleEvent = myFunction(evt){ 
    // here you set the layers to invisible and set the new map zoom level 
    // based on the event's wheel value... 
} 

後,在「zoomend」事件,你讓圖層可見。如果您只是使用按鈕放大/縮小,則很容易隱藏/顯示圖層。 它爲我工作,這是一個很好的解決方法,在某些情況下。

-1

也許你可以做到這一點一。 但是,對不起,如果這不能幫助你。

function showGraphic() { $('#Graphic1').hide(); $('#Graphic2').show(2000); $('#Graphic3').hide(); $('#Graphic4').hide(); }

+0

這是因爲我在渲染地圖的畫布元素中渲染我的圖形(特徵),所以不工作。 – Raskolnikoov 2014-10-24 14:07:32

1

嘗試:

function zoomChanged() { 
    zoom = map.getZoom(); 
    if (zoom >=15) { 
     graphicsLayer.setVisibility(true); 
    } 
    else if (zoom < 15) { 
     graphicsLayer.setVisibility(false); 
    } 
} 

,然後使用調用該函數:

map.events.register("zoomend", map, zoomChanged); 

其中, 「地圖」 是地圖初始化的變量。綜合起來,它們根據縮放級別切換圖層的可見性。如果這不符合你的要求,你可以在if/else塊中使用不同的指標。我認爲你只是錯過了事件處理程序。