在悬停时选择WMS图层 - 错误Openlayers.REQUEST.GET参数

时间:2014-02-04 11:53:14

标签: openlayers geoserver wms feature-selection

我有wms baselayer和wms shapefile。我想在悬停时选择wms shapefile功能并更改其颜色。我尝试了SLD选择并单独添加选择和悬停向量,但不幸的是它没有用。任何openlayers示例都没有为我工作。在Firebug中我遇到以下错误:TypeError:d.params未定义...长度; b

具体而言,Chrome的VERSION未定义。

非常感谢任何帮助!

        var format = 'image/png';
        map = new OpenLayers.Map('map', options);

        // setup tiled layer
        tiled = new OpenLayers.Layer.WMS(
            "Baselayer", "http://www.fineenergygis.co.uk:80/geoserver/GIS/wms",
            {
                LAYERS: 'Baselayer',
                STYLES: '',
                format: format,
                tiled: true,
                tilesOrigin : map.maxExtent.left + ',' + map.maxExtent.bottom
            },
            {
                buffer: 0,
                displayOutsideMaxExtent: true,
                isBaseLayer: true,

                yx : {'EPSG:27700' : false}
            } 
        );

        //setup AONB layer test
        aonb = new OpenLayers.Layer.WMS(
            "AONB", "http://www.fineenergygis.co.uk:80/geoserver/GIS/wms",
            {
                LAYERS: 'GIS:AONB',
                STYLES: '',
                format: 'image/gif',
                transparent: true,
                tiled: true,
                tilesOrigin : map.maxExtent.left + ',' + map.maxExtent.bottom
            },
            {
                buffer: 0,
                displayOutsideMaxExtent: true,
                isBaseLayer: false,
                yx : {'EPSG:27700' : false}
            } 
        );
        aonb.setOpacity(0.6);
        map.addLayers([tiled,aonb]);

        // build up all controls
        map.addControl(new OpenLayers.Control.PanZoomBar({
            position: new OpenLayers.Pixel(2, 15)
        }));

        map.addControl(new OpenLayers.Control.Scale(document.getElementById('scale')));
        map.addControl(new OpenLayers.Control.MousePosition({div: document.getElementById('location') }));
        map.setCenter(new OpenLayers.LonLat(406480,286782), 5);
        map.addControl(new OpenLayers.Control.LayerSwitcher());


        controls = {
            navigation: new OpenLayers.Control.Navigation(),
            box: new OpenLayers.Control.SLDSelect(
                OpenLayers.Handler.RegularPolygon,
                {
                    displayClass: 'olControlSLDSelectBox', 
                    layers: ['aonb'],
                    handlerOptions: {irregular: true}
                }
            )
        };

        for(var key in controls) {
            map.addControl(controls[key]);
        }

        // wire up the option button
        var options = document.getElementById("options");
        options.onclick = toggleControlPanel;

    }

    function toggleControl(element) {

        for(var key in controls) {
            var control = controls[key];
            alert(element.value);
            alert(key);
            if(element.value == key && element.checked) {
                alert("activate");
                control.activate();

            } else {
            alert("deactivate");
                control.deactivate();
            }
        }
    }

    function toggleSelectionLayer(element) {
        var selectLayers = [];
        var elements = element.value.split("_");
        for (var key in layers) {
            var layer = layers[key];
            for (var i=0, len=elements.length; i<len; i++) {
                var value = elements[i];
                if (value == key && element.checked) {
                    selectLayers.push(layer);
                }
            }
        }
        for (var i=0, len=this.map.controls.length; i<len; i++) {
            var control = this.map.controls[i];
            if (control instanceof OpenLayers.Control.SLDSelect) {
                control.setLayers(selectLayers);
            }
        }
    }



</script>
</head>
<body onload="init()">

<div id="nodelist">

<div id="controls">
<ul id="controlToggle"><b>Map Controls</b>
    <li>
        <input type="radio" name="control" value="navigation" id="noneToggle" onclick="toggleControl(this);" CHECKED>
        <label for="noneToggle">navigate</label>
    </li>
    <li>
        <input type="radio" name="control" value="box" id="boxToggle" onclick="toggleControl(this);" >
        <label for="boxToggle">SLD select with box</label>
    </li>

</ul>
</div>
 <div id="layers">
<ul id="layerToggle"><b>Selection layer</b>
    <li>
        <input type="radio" name="layer" value="waterbodies" id="waterbodiesToggle" onclick="toggleSelectionLayer(this);" CHECKED>
        <label for="noneToggle">AONB</label>
    </li>
</ul>
</div>
</body>

1 个答案:

答案 0 :(得分:0)

使用OpenLayers.Layer.WFS而不是WMS。 WFS要求以Openlayers.Format类识别的任何格式提供数据,例如WKT,GeoJson,Json等。