2012-03-17 54 views
0

我創建了一個在Google Map上繪製多個KML圖層的for循環。之後,我試圖爲每個KML多段線添加一個infoWindow。我可以爲每行顯示infowindow,但它們都具有相同的內容:我繪製的最後一個KML文件的URL。使用盡可能多的Google地圖創建多個KML圖層infoWindows

下面的代碼:

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

我在做什麼錯?

如果我這樣做(將infowindows添加到數組中),InfoWindows在我點擊KML時甚至不會出現。

var infowindow = new Array(); 
infowindow[i] = new google.maps.InfoWindow({ 
    content: urls[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[i].close(); 
infowindow[i].setPosition(posX); 
infowindow[i].open(map); 

});

+0

除了infowindow問題,我應該指出,您不應該將額外的Date參數添加到您的KML網址。它所做的只是去除KmlLayer基礎架構的緩存功能,這意味着您的地圖將加載速度較慢,最好的情況。如果您的KML經常更新,只需設置expires標題即可。 – jlivni 2012-03-18 03:51:32

回答

0

我假設您只想要一次顯示一個infoWindow。 (你的點擊事件有infoWindow.close())你需要從這一行刪除內容:選項。

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

更妙的是,所有的事件處理器創建信息窗口作爲一個全球性的使用。