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 を設定することですが、機能が選択されていません。

ユーザーが選択した機能をクリックしたときにイベントをトリガーする方法はありますか?

前もってThx、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 に設定して、クリック時に unselect イベントを発生させます。

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 に答える