Javascript 使用尽可能多的Google Maps信息窗口创建多个KML层

Javascript 使用尽可能多的Google Maps信息窗口创建多个KML层,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我创建了一个for循环,可以在谷歌地图上绘制多个KML层。在这之后,我将尝试为每个KML多段线添加一个信息窗口。我可以为每一行显示infowindow,但它们都有相同的内容:我绘制的最后一个KML文件的URL 代码如下: function initmap(urls){ // Creating an option object for the map var myLatlng = new google.maps.LatLng(61.130298, 24.009358); var options =

我创建了一个for循环,可以在谷歌地图上绘制多个KML层。在这之后,我将尝试为每个KML多段线添加一个信息窗口。我可以为每一行显示infowindow,但它们都有相同的内容:我绘制的最后一个KML文件的URL

代码如下:

function initmap(urls){
// Creating an option object for the map
var myLatlng = new google.maps.LatLng(61.130298, 24.009358);
var options = {
zoom: 7,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
// Initializing the map
var map = new google.maps.Map(document.getElementById('map_canvas'), options);

if(urls != null) {

    var ctaLayer = new Array();
    var url = new Array();

    for(var i=0;i<urls.length;i++) {
        url[i] = urls[i];
        url[i] = url[i]+"?dummy="+(new Date()).getTime();

        ctaLayer[i] = new google.maps.KmlLayer(url[i], {suppressInfoWindows: true});
        ctaLayer[i].setMap(map);

        // Creating an InfoWindow object
        var infowindow = new google.maps.InfoWindow({content: url[i]});

        google.maps.event.addListener(ctaLayer[i], 'click', function(kmlEvent) {

            var clickPos = kmlEvent.latLng;
            var posX = new google.maps.LatLng(clickPos.lat(), clickPos.lng());

            infowindow.close();
            infowindow.setPosition(posX);
            infowindow.open(map);
        });
    }
}
}

}))

我假设您一次只希望显示一个信息窗口。(单击事件具有infoWindow.close())您需要从此行中删除content:选项

var infowindow = new google.maps.InfoWindow({content: url[i]});
并将其添加到addListener函数中:

 var infoWindow = new google.map.InfoWindow();
    ....
 google.maps.event.addListener(ctaLayer[i], 'click', function(kmlEvent) {

            var clickPos = kmlEvent.latLng;
            var posX = new google.maps.LatLng(clickPos.lat(), clickPos.lng());

            infowindow.close();
            infowindow.setPosition(posX);
            infoWindow.setContent(url[i]);
            infowindow.open(map);
        });

更好的做法是,将infoWindow创建为全局事件处理程序。

除了infoWindow问题之外,我应该指出,您不应该向KML url添加额外的日期参数。它所做的只是删除Kmlayer基础设施的缓存功能,这反过来意味着您的地图将以较慢的速度加载,这是最好的情况。如果您的KML更新频繁,只需设置expires标头即可。
 var infoWindow = new google.map.InfoWindow();
    ....
 google.maps.event.addListener(ctaLayer[i], 'click', function(kmlEvent) {

            var clickPos = kmlEvent.latLng;
            var posX = new google.maps.LatLng(clickPos.lat(), clickPos.lng());

            infowindow.close();
            infowindow.setPosition(posX);
            infoWindow.setContent(url[i]);
            infowindow.open(map);
        });