Измените содержимое информационного окна в Google Maps

На основе выбранной страны и даты на карте отобразится список результатов. Размещение маркеров с данными html в них работает нормально, у меня проблема заключается в обработке случаев с повторяющимися маркерами.

Я нашел способ проверить наличие дубликатов, но я хотел бы иметь возможность изменять содержимое в информационном окне того, которое уже есть. Так что я могу добавить содержимое повторяющегося маркера к существующему маркеру, который стоит в том же месте.

Проблема, с которой я столкнулся, заключается в том, что я не могу найти правильный способ доступа к данным в существующем информационном окне для дублирующего окна.

Если я сделаю alert (infoWindow.getContent ());, тогда я просто получу «undefined». Я также пробовал markers [i] .getContent (), но это тоже ничего не дало.

Любая идея или предложение о том, как я могу получить доступ к информационным окнам ранее добавленных маркеров, получить их содержимое с помощью getContent () и добавить к нему данные дубликата?

var marker = new google.maps.Marker({
    map: map,
    position: latlng
});

for (var i=0; i<markers.length; i++) {
    if (markers[i].getPosition().equals(marker.getPosition())) {
        alert('duplicate found');
        alert(infoWindow.getContent());

    } else {
        google.maps.event.addListener(marker, 'click', function() {
            infoWindow.setContent(html);
            infoWindow.open(map, marker);
        });
    }
}

person Tijmen    schedule 11.07.2011    source источник


Ответы (1)


Я почти уверен, что вы не можете делать именно то, что хотите.

Насколько я знаю и могу видеть в API, ни информационное окно, ни маркер ничего не знают друг о друге. Единственное, что знает, какое информационное окно должно отображаться при нажатии на определенный маркер, - это обработчик событий Google Maps.

Решением вашей проблемы было бы хранить все информационные окна в массиве, а маркеры - в другом массиве, где вы должны были бы убедиться, что индексы соответствующих маркеров и информационных окон совпадают.

Другой способ сделать это - определить свой собственный объект, в котором вы убедитесь, что он может содержать как маркер, так и информационное окно.

В любом случае вам придется пройти через массив маркеров, чтобы найти повторяющийся маркер, а затем получить соответствующее информационное окно, используя один из двух сценариев, которые я описал. Это кажется немного глупым, но я не знаю другого способа сделать это.

person Kasper Vesth    schedule 11.07.2011
comment
да, это все еще решение, которое на сегодняшний день заключается в том, чтобы прокручивать каждый раз, когда вам нужно обновить информацию. вы можете обойти это, сохранив свои данные kml в диаграмме или таблице слияния и поместив условия для добавления содержимого информационного окна, но все же ограничивая - person ericjam; 14.12.2012