我有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>
答案 0 :(得分:0)
使用OpenLayers.Layer.WFS而不是WMS。 WFS要求以Openlayers.Format类识别的任何格式提供数据,例如WKT,GeoJson,Json等。