Я постараюсь ответить на ваши вопросы.
1) Одна вещь, которую вы можете сделать, - это иметь глобальную переменную selectedPolygon, и каждый раз, когда пользователь нажимает Polygon, вы меняете цвет ранее выбранного Polygon,и установите переменную, указывающую на полигон, который пользователь только что нажал.Подобные вещи хорошо работали для меня в прошлом.
2) Я почти уверен, что не существует немедленного способа сказать «Не запускайте событие mouseout».Решением, хотя и не таким привлекательным, может быть заполнение глобального массива всеми информационными окнами, которые вы хотите оставить открытыми.Затем в событии mouseout вы пробегаете этот массив и проверяете, находится ли информационное окно в массиве, и если это не так, вы закрываете его.Вы должны не забыть удалить информационные окна из массива и закрыть их, когда вы больше не хотите, чтобы они отображались:)
Надеюсь, это помогло.
РЕДАКТИРОВАТЬ
Вот небольшой пример, где я использую технику для информационного окна, чтобы убедиться, что открытое окно закрывается, если вы пытаетесь открыть новое:
var currentinfowindow = null;
function addeventlistenerinfo(marker, infowindow, i){
google.maps.event.addListener(marker, 'click', function() {
if (currentinfowindow)
currentinfowindow.close();
infowindow.open(map,marker);
currentinfowindow = infowindow;
});
}
Код состоит из двух фрагментов и состоит изглобальной переменной currentinfowindow и функции addeventlistenerinfo.
Функция просто создает EventListener для вашего маркера, и вы можете сделать это для своего оверлея.Всякий раз, когда вы запускаете событие, вы проверяете, имеет ли значение глобальная переменная, и затем выполняете процедуру, которая устанавливает цвет различных полигонов.
Это лучший пример, который я могу привести прямо сейчас.Надеюсь, это поможет прояснить ситуацию немного.