Итак, вы хотите иметь одно информационное окно, но оно получает разный контент для каждого маркера.то есть содержание и его позиция изменяются в ответ на щелчки пользователя.Так что в цикле, где вы создаете свои маркеры, вы также хотите создать свое информационное окно.Однако вам нужно будет отделить это от другой функции, иначе вы столкнетесь с ситуацией, когда каждое информационное окно просто содержит содержимое последнего маркера.
function setMarkers(map, locations) {
...
var infowindow = new google.maps.InfoWindow({
content: ''
});
for (var i = 0; i < locations.length; i++) {
var liana = locations[i];
var myLatLng = new google.maps.LatLng(liana[1], liana[2]);
var marker = new google.maps.Marker({
position: myLatLng,
map: map,
shadow: shadow,
icon: image,
shape: shape,
title: liana[0],
zIndex: liana[3]
});
// add an event listener for this marker
bindInfoWindow(marker, map, infowindow, "<p>" + liana[0] + "</p>");
}
}
function bindInfoWindow(marker, map, infowindow, html) {
google.maps.event.addListener(marker, 'click', function() {
infowindow.setContent(html);
infowindow.open(map, marker);
});
}
Я не уверен, куда вы попалидетали адреса из - в моем примере я просто использую ту же часть вашего массива, которую вы передаете атрибуту title, который я затем отображаю в информационном окне.Возможно, вам придется воспользоваться сервисом Geocoder для поиска адресов каждого latLng, который затем может быть дополнительным столбцом в массиве.
Update :Если затем вам нужен нормальный триггер ссылки, как если бы вы щелкнули маркер, вам нужно сделать так, чтобы ваши маркеры были в массиве (сделайте это глобальной переменной, вставьте маркеры в массивпосле их создания).Нажатие на ссылку вызывает функцию javascript, передавая число, чтобы определить, какой элемент массива использовать.Затем вы нажимаете на этот маркер, например
<a href="#" onclick="showWindow(0); return false">One</a>
<a href="#" onclick="showWindow(1); return false">Two</a>
function showWindow(id) {
google.maps.event.trigger(markersArray[id], 'click');
}