Openlayers 4 - 在功能点击时使图层不可见

Flo*_*sdG 1 javascript openlayers typescript

我有2地图layer的含features(标记)。我已经这样做了,如果地图放大到足够远,1layer将变得不可见,另一个将变得可见(反之亦然)。像这样:

this.map.getView().on('propertychange', (e: any) => {
  if (e.key == "resolution") {
    if (this.map.getView().getZoom() >= 17) {
      exampleLayer1.setVisible (false);
      exampleLayer2.setVisible (true);
    } else if(this.map.getView().getZoom() < 17) {
      exampleLayer2.setVisible (false);
      exampleLayer1.setVisible (true);
    }
  }
})
Run Code Online (Sandbox Code Playgroud)

我现在需要补充的是,如果你点击一个featureexampleLayer1层,地图会在和中心开始放大对要素的位置,这将使exampleLayer1消失,exampleLayer2可见。为此,我使用此功能:

var select_interaction = new ol.interaction.Select();

select_interaction.getFeatures().on("add", (e: any) => {
  var feature = e.element;
  this.map.getView().setCenter(feature.getGeometry().getCoordinates())
  this.map.getView().setZoom(17);
});

this.map.addInteraction(select_interaction);
Run Code Online (Sandbox Code Playgroud)

几乎一切正常,这意味着一个layer会消失,另一个会出现。但是,feature点击不会消失,即使它的父级 (the layer) 确实消失了。如果我然后点击feature它就会消失。

我怎样才能让它layer(包括feature点击的)在feature被点击时变得不可见?

小智 5

ol.interaction.Select 选择的特征被添加到内部非托管层。

这就是为什么即使底层图层不可见,所选要素仍可见的原因。

您可以在使用 select_interaction.getFeatures().clear() 放大时取消选择所选功能(就像点击一样)。

我还建议您使用层的 min/maxResolutions(参见http://openlayers.org/en/latest/apidoc/ol.layer.Base.html)来切换层的可见性。