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