悬停处于活动状态时无法选择矢量

Unable to select vector when hover is active

本文关键字:选择 活动状态 悬停      更新时间:2023-09-26

好吧,我想要一个悬停时漂亮的弹出窗口,但我也希望向量可选。如果我跳过悬停部分,它就像魅力一样工作,但除此之外:/我错过了什么吗?

vectors.removeAllFeatures();
var geojson_format = new OpenLayers.Format.GeoJSON();
vectors.addFeatures(geojson_format.read(data));
var selectCtrl = new OpenLayers.Control.SelectFeature(vectors,
{
    clickout: true
});
map.addControl(selectCtrl);
selectCtrl.activate();
vectors.events.on({
    "featureselected": featureSelected
});
var hover = new OpenLayers.Control.SelectFeature(vectors,{
    hover: true,
    highlightOnly: true,
    eventListeners: {
         featurehighlighted: featureHover,
         featureunhighlighted: featureUnHover
    }
});
map.addControl(hover);
hover.activate();

我只是以错误的顺序编写了代码。map.addControl(hover); hover.activate();应该在之前

map.addControl(selectCtrl);
 selectCtrl.activate();
 vectors.events.on({
     "featureselected": featureSelected
 });

所以,现在它有效了!

这真的有效吗,因为在我看来,一旦你用 OpenLayers.Control.SelectFeature 创建了 2 个 map.addControl,就有 1 个不起作用。事实上,我有两层,一个总线层和一个总线停止层。 当我全部激活它们时,只有总线层上的悬停有效。 当我不激活母线层的控制时,母线停止层突然起作用。 所以他们都单独工作。 您在这里的问题与我在这里找到的唯一一个有 2 个 addControl 行的问题有关。 我也尝试使用自动激活,但结果相同。

更新

它实际上是打算不再工作,显然您无法创建 2 个控制功能。 相反,您需要创建一个并将其应用于两个图层。 如文档中所述,在 2.7 中删除了对此的支持。 有一个很好的例子说明如何使用 2 个不同的矢量层来做到这一点。这花了我几天时间才意识到。 您只需要在弹出窗口中确定您所在的图层并采取相应的行动即可。