1

OpenLayers パネルにいくつかの toggle_type ボタンを追加して、ベクター レイヤーのオン/オフを切り替えています (各ボタンはベクター レイヤーの可視性を制御します)。マップには selectFeature イベント リスナーもあり、別の div に地物属性を表示します。

レイヤーだけをコーディングするときに機能します。しかし、複数のレイヤーを追加するために配列を使用するようにコードを変更すると、問題が発生します。配列 (capasVectoriales) を使用して、JSON ファイルから作成したベクター レイヤーを格納します。これを行うと、ボタンでトリガーされる非アクティブ化機能が奇妙なことを開始し、レイヤーを削除せず、マップ上にフィーチャを「印刷」したままにします (パンおよびズームしても移動しません)。ボタンをもう一度アクティブにすると、機能は期待どおりに機能します。Firebug から map.removeLayer(map.layers[1]) を使用してレイヤーを削除できます。これがコードです。

            function init() { .....

            capaRestauracion=capasVectoriales[0];

            var funcionActivarRestauracion= function() {
                map.addLayer(capaRestauracion);
                console.log('turn on' + capaRestauracion.name);
            };
            var funcionDesactivarRestauracion= function() {
                map.removeLayer(capaRestauracion);
                console.log('turno off ' + capaRestauracion.name);
            };

            // create type_toggle button
            var botonRestauracion = new OpenLayers.Control.Button({
                displayClass : 'boton' + capa,
                eventListeners : {
                    'activate' : funcionActivarRestauracion,
                    'deactivate' : funcionDesactivarRestauracion
                },
                title : 'Activar/Desactivar ' + capa,
                type : OpenLayers.Control.TYPE_TOGGLE
            });

            //create an external panel
            panelExterno = new OpenLayers.Control.Panel({
                div : document.getElementById("panel")
            });
            //add buttons to external panel

            panelExterno.addControls([botonRestauracion]);

            // add panel to map
            map.addControl(panelExterno);


            //activate button

            panelExterno.controls[0].activate();

            // create the select feature control
            var selector = new OpenLayers.Control.SelectFeature(capasVectoriales, {
                hover : true,
                autoActivate : true
            });


            map.addControl(selector);

「capaVectorial」変数を「capaVectorial[0]」配列アイテムに置き換えようとすると問題があるようですが、その理由がわかりません。

4

0 に答える 0