如何删除openlayer中的城市标签?

时间:2013-09-03 15:29:25

标签: javascript openlayers

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

2 个答案:

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

基本上,你现在有两层。其中一个包含功能,另一个包含所有标签。如果单击地图,则会删除标签图层。

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