0

缩放时是否可以隐藏图层上的所有功能?我尝试将图层本身的可见性和不透明度属性设置为现在在缩放时显示。我还尝试将每个功能的样式设置为“无”,但它似乎不起作用。我试过这两种选择:

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

}

4

3 回答 3

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 块中使用不同的指示器。我认为您只是缺少事件处理程序。

于 2015-01-06T21:46:55.370 回答
1

我相信我知道你在寻找什么。当地图上显示许多图层上的数万个要素时,我必须做类似的事情来提高缩放/平移性能。对于平移,我将图层的可见性设置false为触发第一个地图“pointerdrag”事件的时间,并将它们设置回“moveend”事件中的可见性(您可能需要一些额外的处理以避免冗余操作和数据重新加载)。

对于缩放,它有点棘手,但幸运的是,您可以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' 事件处理程序中使图层可见。如果您只是使用按钮来放大/缩小,那么隐藏/显示图层很容易。它对我有用,在某些情况下它是一个很好的解决方法。

于 2016-05-17T05:43:50.473 回答
-1

也许你可以做这个。但是,对不起,如果这不能帮助你。

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

于 2014-10-22T11:01:37.387 回答