Google地图切换图层

时间:2013-05-06 21:30:24

标签: javascript google-maps google-maps-api-3 overlays

我创建了一个按钮来切换我的雷达图层。默认情况下,加载页面时图层已关闭。这就是我想要的,完美的。我点击了雷达按钮,雷达覆盖了。那部分也很有效。我的问题是,当我再次点击它关闭它时,它只会熄灭一秒钟,然后再回来。我错过了什么?

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

DEMO MAP

修改

这是我用于按钮和图层的当前更新代码。它会出现但是当我把它关闭时,它只会熄灭一秒然后再回来。

/

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

2 个答案:

答案 0 :(得分:6)

你只需要清除它:

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

答案 1 :(得分:0)

如果要在索引处删除,请在设置位置将其删除:

map.overlayMapTypes.setAt(1,tileNEX);

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

map.overlayMapTypes.removeAt(1, tileNex);