3

我有一个像这样的 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。我该怎么做呢?

4

2 回答 2

2

如果您已经创建了图层并想稍后删除标签:

wms_layer.mergeNewParams({LAYERS: 'basic,clabel'});
于 2013-09-04T14:58:37.670 回答
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 图层中删除某些图层。您需要做的是从地图中删除图层并使用新参数再次请求它。

这个问题的一个很好的解决方法可能如下所示:

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);
});

基本上,您现在有两层。其中一个包含特征,另一个包含所有标签。如果您在地图中单击,则会移除标注图层。

两种方式都经过测试和工作。

于 2013-09-03T16:48:02.287 回答