Google maps Google Maps KMZ文件未在IE8和IE7中呈现

Google maps Google Maps KMZ文件未在IE8和IE7中呈现,google-maps,internet-explorer-8,internet-explorer-7,kml,kmz,Google Maps,Internet Explorer 8,Internet Explorer 7,Kml,Kmz,我有一个带有地图的web应用程序。我添加了一个很好的自定义贴图控件,用于打开和关闭贴图上的不同图层。目前只有两个层,在大多数浏览器中都运行良好 除了IE8+7。启用时,地图上不会显示任何图层。据我所知,地图正在加载kmz/kml文件(当preserveViewport设置为false时,地图将移动到正确的位置),但它们只是没有出现。一个图层包含多段线,另一个图层包含标记。我使用的代码如下: function someFunction() { //code to initialise ma

我有一个带有地图的web应用程序。我添加了一个很好的自定义贴图控件,用于打开和关闭贴图上的不同图层。目前只有两个层,在大多数浏览器中都运行良好

除了IE8+7。启用时,地图上不会显示任何图层。据我所知,地图正在加载kmz/kml文件(当preserveViewport设置为false时,地图将移动到正确的位置),但它们只是没有出现。一个图层包含多段线,另一个图层包含标记。我使用的代码如下:

function someFunction() {
    //code to initialise map etc goes here...
    var layers = [];

    //Create 1st layer
    var exchangeslayer = new google.maps.KmlLayer('http://link.to.file/exchanges.kmz'
        suppressInfoWindows: true,
        preserveViewport: true
    });
    layers.push({name: "Exchanges", layer: exchangeslayer});

    //Code to create second layer
    var nyclayer = new google.maps.KmlLayer('http://www.nyc.gov/html/dot/downloads/misc/cityracks.kml'
        suppressInfoWindows: true,
        preserveViewport: false
    });
    layers.push({name: "NY City Tracks", layer: nyclayer});

    addCustomLayerControls(layers);
}

function addCustomLayerControls(layers) {
    //there is code here that would generate the divs for the custom map control
    var container; //container is a div element created via javascript

    for (var i = 0; i < layers.length; i++) {
        this.addLayerLabelToContainer(layers[i], container);
    }

    //some more code
}

function addLayerLabelToContainer(layer, container) {
    var map; //Assume I get a reference to the map

    //some code here to make pretty labels for the map controls...
    var layerLabel; // layerLabel is a div element created via javascript

    google.maps.event.addDomListener(layerLabel, 'click', function() {
        if(layer.layer.map == null) {
            layer.layer.setMap(map);
        } else {
            layer.layer.setMap(null);
        }
    });
}
function someFunction(){
//初始化地图等的代码在这里。。。
var层=[];
//创建第一层
var exchangeslayer=new google.maps.KmlLayer('http://link.to.file/exchanges.kmz'
suppressInfoWindows:对,
保存视口:true
});
layers.push({name:“Exchanges”,layer:exchangeslayer});
//创建第二层的代码
var nyclayer=new google.maps.KmlLayer('http://www.nyc.gov/html/dot/downloads/misc/cityracks.kml'
suppressInfoWindows:对,
保存视口:false
});
layers.push({name:“纽约城市轨道”,layer:nyclayer});
添加自定义图层控件(图层);
}
函数addCustomLayerControl(层){
//这里有一些代码可以为自定义映射控件生成div
var container;//container是通过javascript创建的div元素
对于(变量i=0;i
如果您像这样修改addLayerLabelToContainer(),那么它将在IE中正常工作。已验证其在IE 8和9中正确加载KMZ

function addLayerLabelToContainer(layer, container) {
    // var map; //Assume I get a reference to the map
    //some code here to make pretty labels for the map controls...
    var layerLabel; // layerLabel is a div element created via javascript                       

    if(layer.layer.map == null) {               
        layer.layer.setMap(map);
    } else {
        layer.layer.setMap(null);
    }
}
不需要调用addDomListener()。还请注意:

还对someFunction中的语法错误进行了如下小修复:

function someFunction() {
    // var map; //assume map is initialised, I've just removed that code
    var layers = [];

    // see https://developers.google.com/maps/documentation/javascript/layers
    //Create 1st layer
    var exchangeslayer = new google.maps.KmlLayer(
    'http://kml-samples.googlecode.com/svn/trunk/kml/kmz/simple/big.kmz',
        { suppressInfoWindows: true, preserveViewport: true
        });
    layers.push( {name: "Exchanges", layer: exchangeslayer} );

    // ...
    addCustomLayerControls(layers); 
}

因此,事实证明我的问题与CSS有关。我的一个样式表将
最大宽度:100%
应用于所有img标记。这是在玩弄地图标记/多段线


我现在明白了,但当你认为问题与javascript有关时,就不那么明显了。因此,我将把这个答案留给其他犯同样错误的人。

在发现任何kml/kmz文件都出现此错误后编辑了我的原始问题。Kmlayer.getStatus()是否告诉您有用的信息?@geocodezip getStatus()每次都返回“OK”,但是地图上仍然没有显示任何东西,所以我只是注意到当我将光标悬停在kml层应该渲染的区域上时,光标会发生变化。对我来说,这表明它们已添加到地图中,但只是不可见。是否有方法更改可见性?是否使用“兼容性视图”?来自“*不支持Internet Explorer的兼容性视图”。addLayerLabelToContainer()用于向屏幕添加一个div,单击该div将添加/删除该层。我现在意识到,当我复制代码时,它有点混乱。我的问题已经解决了。
function someFunction() {
    // var map; //assume map is initialised, I've just removed that code
    var layers = [];

    // see https://developers.google.com/maps/documentation/javascript/layers
    //Create 1st layer
    var exchangeslayer = new google.maps.KmlLayer(
    'http://kml-samples.googlecode.com/svn/trunk/kml/kmz/simple/big.kmz',
        { suppressInfoWindows: true, preserveViewport: true
        });
    layers.push( {name: "Exchanges", layer: exchangeslayer} );

    // ...
    addCustomLayerControls(layers); 
}