在放大图层3中隐藏图层或特征?

时间:2014-10-22 09:52:19

标签: javascript openlayers-3

发生缩放时是否可以隐藏图层上的所有要素?我已尝试在图层上设置可见和不透明度属性,以便在缩放时显示。此外,我还尝试将每个功能的样式设置为“没有”'但它似乎没有用。我尝试过这两种选择:

1

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

}

3 个答案:

答案 0 :(得分: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);

其中“map”是地图初始化的变量。这些组合可根据缩放级别打开和关闭图层的可见性。如果这不是你想要的,你可以在if / else块中使用不同的指示符。我想你只是错过了事件处理程序。

答案 1 :(得分:1)

我相信我知道你在找什么。当地图上显示许多图层上的数万个要素时,我必须做类似的事情以提高缩放/平移性能。对于平移我设置图层&#39;当第一张地图“指针”时,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...
}

之后在&#39; zoomend&#39;事件处理程序,您可以使图层可见。如果你只是使用按钮放大/缩小,那么它很容易隐藏/显示图层。 它对我有用,在某些情况下它是一个很好的解决方法。

答案 2 :(得分:-1)

也许你可以做到这一点。 但是,对不起,如果这对你没有帮助。

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