0

我正在使用 OpenLayers 使用集群策略在地图上绘制点要素。

        strategy = new OpenLayers.Strategy.Cluster();

        clusters = new OpenLayers.Layer.Vector("Clusters", {
            strategies: [strategy],
            styleMap: new OpenLayers.StyleMap({
                "default": style,
                "select": {
                    fillColor: "#ff0000",
                    strokeColor: "#ffbbbb"
                }
            })
        });

        [.......]

        clusters.addFeatures(features);

我还使用 SelectFeature 来选择地图上的点要素。

        select = new OpenLayers.Control.SelectFeature(
                clusters, {
                    clickout: false,
                    toggle: false, 
                    hover: false
                }
            );

        map.addControl(select);
        select.activate();

        clusters.events.on({"featureselected": clickPoint});

当用户选择一个聚类特征时,会出现一个弹出窗口,其中包含要选择的包含特征的列表。当他选择其中之一时,弹出窗口关闭并且集群特征保持选中状态。

现在问题来了。我希望能够单击集群功能,以便再次出现弹出窗口。我唯一能做的就是设置 toggle:true 但随后该功能被取消选择。

当用户单击所选功能时,有没有办法触发事件?

提前谢谢,illy

4

2 回答 2

1

为了解决这个问题,我改写unselectAll为:

mySelectControl.unselectAll = function(options) {
    OpenLayers.Control.SelectFeature.prototype.unselectAll.apply(
                              mySelectControl, arguments);
    if (options && options.except) {
        var myReselecteFeature = options.except;
        ... your code to show the popup of myReselecteFeature ...
    }
};

您可能有兴趣查看此示例:

http://jorix.github.com/OL-FeaturePopups/examples/feature-popups.html

它是一个控件,您可以执行此操作并执行更多操作。例如,使用集群缩放后保留选择。

注意:默认行为不是您要查找的,但可以自定义。

于 2013-03-18T21:53:46.250 回答
0

您也可以在选择功能时取消选择您的功能。对我来说,这是实现该功能的点击事件的最短方法。还将切换标志设置为 true 以在单击时触发取消选择事件。

var pdfFeatureSelector = new OpenLayers.Control.SelectFeature(pdfLayer,{
        clickout: true,
        multiple: true,
        toggle: true,
        autoActivate: true,
        onSelect: function(){
            OpenLayers.Control.SelectFeature.prototype.unselectAll.apply(
                    pdfFeatureSelector);//unselect the feature when it is selected
        }
});
于 2014-04-04T13:57:48.780 回答