我有一张2 layer
的 Map ,其中包含 features
(标记) . 我已经做到这一点,如果 Map 放大到足够远,1 layer
将变得不可见,而另一个将变得可见(反之亦然) . 像这样:
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);
}
}
})
我现在需要添加的是,如果单击 exampleLayer1
图层中的 feature
, Map 将放大并居中于该要素的位置,这将使 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);
几乎一切都运行正常,这意味着一个 layer
将消失,另一个将出现 . 但是,单击的 feature
将不会消失,即使它的父级( layer
)确实消失了 . 如果我再点击 feature
它就会消失 .
单击 feature
时,如何使 layer
(包括 feature
点击)变为不可见?
1 回答
ol.interaction.Select选定的功能将添加到内部非托管图层 .
这就是所选特征即使底层不可见也是可见的原因 .
您可以在使用select_interaction.getFeatures() . clear()进行缩放时取消选择所选要素(就像点击一样) .
我还建议您使用图层的min / maxResolutions(参见http://openlayers.org/en/latest/apidoc/ol.layer.Base.html)来切换图层可见性 .