Javascript 使用尽可能多的Google Maps信息窗口创建多个KML层
我创建了一个for循环,可以在谷歌地图上绘制多个KML层。在这之后,我将尝试为每个KML多段线添加一个信息窗口。我可以为每一行显示infowindow,但它们都有相同的内容:我绘制的最后一个KML文件的URL 代码如下: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 =
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);
});