好的,如果你想动态地做到这一点,这里有两种方法。第一个是这样的:
layer = new OpenLayers.Layer.WMS(
'OpenLayers WMS',
'http://vmap0.tiles.osgeo.org/wms/vmap0',
{layers: 'basic,clabel,ctylabel,statelabel', transparent: true},
{isBaseLayer: true, opacity: .7}
);
layer.events.register('click', layer, function (evt) {
map.removeLayer(layer)
layer = new OpenLayers.Layer.WMS('OpenLayers WMS',
'http://vmap0.tiles.osgeo.org/wms/vmap0',
{layers: 'basic', transparent: true},
{isBaseLayer: true, opacity: .7}
);
map.addLayer(layer);
});
由于 WMS 会根据请求发送所请求地图的光栅图像,因此您无法在请求后从 WMS 图层中删除某些图层。您需要做的是从地图中删除图层并使用新参数再次请求它。
这个问题的一个很好的解决方法可能如下所示:
basicLayer = new OpenLayers.Layer.WMS(
'OpenLayers WMS',
'http://vmap0.tiles.osgeo.org/wms/vmap0',
{layers: 'basic', transparent: true},
{isBaseLayer: true, opacity: .7}
);
labelsLayer = new OpenLayers.Layer.WMS(
'OpenLayers WMS',
'http://vmap0.tiles.osgeo.org/wms/vmap0',
{layers: 'clabel,ctylabel,statelabel', transparent: true},
{isBaseLayer: true, opacity: .7}
);
map.events.register('click', map, function (evt) {
map.removeLayer(labelsLayer);
});
基本上,您现在有两层。其中一个包含特征,另一个包含所有标签。如果您在地图中单击,则会移除标注图层。
两种方式都经过测试和工作。