1

我创建了一个按钮来切换我的雷达层。默认情况下,当您加载页面时,图层处于关闭状态。这就是我想要的并且工作完美。我按下雷达按钮,雷达覆盖出现。那部分也很好用。我的问题是当我再次按下它以将其关闭时,它只会熄灭一秒钟然后又重新打开。我错过了什么?

var radarOptions = {
                gmap: map,
                name: 'Radar',
                position: google.maps.ControlPosition.TOP_RIGHT,
                action: function(){ 
                    map.overlayMapTypes.push(null); // create empty overlay entry
                    map.overlayMapTypes.setAt("1",tileNEX); 

                }
        }
        var radarButton = new buttonControl(radarOptions);

演示图

编辑:

这是我用于按钮和图层的当前更新代码。它会亮起,但是当我关闭它时,它只会熄灭一秒钟然后又重新亮起。

/

/set up custom buttons
        var radarOptions = {
                gmap: map,
                name: 'Radar',
                position: google.maps.ControlPosition.TOP_RIGHT,
                action: function(){ 
                    map.overlayMapTypes.push(null); // create empty overlay entry
                    map.overlayMapTypes.setAt("1",tileNEX);


                }
        }
        var radarButton = new buttonControl(radarOptions);  

         tileNEX = new google.maps.ImageMapType({
            getTileUrl: function(tile, zoom) {
                return "http://mesonet.agron.iastate.edu/cache/tile.py/1.0.0/nexrad-n0q-900913/" + zoom + "/" + tile.x + "/" + tile.y +".png?"+ (new Date()).getTime(); 
            },
            tileSize: new google.maps.Size(256, 256),
            opacity:0.70,
            name : 'NEXRAD',
            isPng: true
        });        
4

2 回答 2

8

你只需要清除它:

map.overlayMapTypes.clear();

或者,您可以弹出最新的:

map.overlayMapTypes.pop();

或者,如果您有多个图层,请获取所需图层的索引,然后执行以下操作:

map.overlayMapTypes.removeAt(index);

编辑:

您可能需要将操作替换为以下内容:

action: function(){ 
                if (map.overlayMapTypes.length==0) {
                  map.overlayMapTypes.push(null); // create empty overlay entry
                  map.overlayMapTypes.setAt("1",tileNEX); 
                }
                else {
                    map.overlayMapTypes.clear();
                }

            }

我知道您的页面何时加载,如果您打开控制台并运行map.overlayMapTypes.length它输出 0;一旦你击中雷达,它就会输出 2(不知道为什么它不是 1,但无论如何)。所以我们要做的是检查它是否有一个层,如果没有,我们做你的正常代码(因为它应该打开它)。如果它已经有一个,我们清除它们。您的代码可能不同,我假设此操作是您处理所有点击的地方,如果不是,您可能需要使用它。

最后编辑:如果您收到“关于缺少 }”的错误消息,请找出在哪里放置 }。

var radarOptions = {
        gmap: map,
        name: 'Radar',
        position: google.maps.ControlPosition.TOP_RIGHT,
        action: function(){ 
                if (map.overlayMapTypes.length==0) {
                  map.overlayMapTypes.push(null); // create empty overlay entry
                  map.overlayMapTypes.setAt("1",tileNEX); 
                }
                else {
                    map.overlayMapTypes.clear();
                }

            }
}
var radarButton = new buttonControl(radarOptions);

tileNEX = new google.maps.ImageMapType({
    getTileUrl: function(tile, zoom) {
        return "http://mesonet.agron.iastate.edu/cache/tile.py/1.0.0/nexrad-n0q-900913/" + zoom + "/" + tile.x + "/" + tile.y +".png?"+ (new Date()).getTime(); 
    },
    tileSize: new google.maps.Size(256, 256),
    opacity:0.70,
    name : 'NEXRAD',
    isPng: true
});   
于 2013-05-06T21:38:18.427 回答
0

如果要在索引处删除,请在设置它的位置删除它:

map.overlayMapTypes.setAt(1,tileNEX);

要从索引中删除它,请使用:

map.overlayMapTypes.removeAt(1, tileNex);
于 2018-08-23T08:32:58.337 回答