0

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

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

2 回答 2

2

所以事实证明我的问题与CSS有关。我的样式表之一适用max-width: 100%于所有 img 标签。这是在玩地图标记/折线。

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

于 2012-10-31T15:27:50.063 回答
0

如果您像这样修改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()。还要注意API 语法

addDomListener(instance:Object, eventName:string, handler:Function)

还修复了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); 
}
于 2012-10-31T14:06:03.817 回答