我有像这样的WMS图层
var wms_layer = new OpenLayers.Layer.WMS(
'OpenLayers WMS',
'http://vmap0.tiles.osgeo.org/wms/vmap0',
{layers: 'basic,clabel,ctylabel,statelabel', transparent: true},
{isBaseLayer: false, opacity: .7}
);
如何从此wms图层中删除ctylabel或statelabel?
我只想动态删除标签。不是在创建这一层。当用户与地图交互时,我想添加/删除一些标签,如ctylabel或statelabel。我该怎么做?
答案 0 :(得分:2)
如果您已经创建了图层,并希望稍后删除标签:
wms_layer.mergeNewParams({LAYERS: 'basic,clabel'});
答案 1 :(得分:1)
好的,如果你想动态地做,这里有两种方法。第一个是这样的:
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图层后,无法从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);
});
基本上,你现在有两层。其中一个包含功能,另一个包含所有标签。如果单击地图,则会删除标签图层。
两种方式都经过测试和运作。