Создание нескольких слоев KML с использованием как много карт Google infoWindows - PullRequest
0 голосов
/ 17 марта 2012

Я создал цикл for, который рисует несколько слоев KML на карте Google.После этого я пытаюсь добиться добавления одного информационного окна к каждой из полилиний KML.Я могу получить информационное окно для каждой строки, но все они имеют одинаковое содержимое: URL-адрес последнего нарисованного мной файла KML.

Вот код:

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 даже не появится, когда я нажму на 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);

});

1 Ответ

0 голосов
/ 17 марта 2012

Полагаю, вы хотите, чтобы одновременно отображалось только одно информационное окно.(Ваше событие клика имеет 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);
        });

Более того, создайте информационное окно как глобальное для использования всеми вашими eventHandlers.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...