Проблема с активными информационными окнами при выборе другого слоя KML — Google Maps API V3

У меня есть несколько слоев kml, которые загружаются в мой Google Map API V3 с помощью флажков. Когда выбрано два или более слоев, информационные окна на одном слое не сворачиваются автоматически при нажатии маркеров на других слоях. Я бы хотел, чтобы информационные окна закрывались автоматически, даже если они находятся на разных слоях KML. Любые указатели в правильном направлении будут полезны.

Спасибо

Даррен Уилсон


person Darren Wilson    schedule 16.05.2012    source источник
comment
Но у вас может быть открыто более одного окна InfoWindow одновременно. Что заставляет вас думать, что наблюдаемое поведение неправильно? Или вы говорите, что это не так, но как вы обходите это?   -  person Andrew Leach    schedule 17.05.2012
comment
Привет, Эндрю, я хочу, чтобы одновременно открывалось только одно информационное окно, даже если оно активировано через разные слои.   -  person Darren Wilson    schedule 17.05.2012
comment
@DarrenWilson Открыты ли InfoWindows вашим кодом или вы говорите об InfoWindows, которые предоставляются непосредственно KmlLayer?   -  person Sean Mickey    schedule 17.05.2012
comment
Привет, Шон! Прямо из слоя KML!   -  person Darren Wilson    schedule 18.05.2012


Ответы (1)


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

var CommonInfoWindow = new google.maps.InfoWindow({"maxWidth": 500});

/** @param {...*} KmlMouseEvent */
function KmlLayerClicked(KmlMouseEvent) {
  var ClickData = /** @type {google.maps.KmlMouseEvent} */(KmlMouseEvent);

  CommonInfoWindow.close();

  if (ClickData.featureData && ClickData.featureData.id) {
    CommonInfoWindow.setOptions({ "position": ClickData.latLng,
        "pixelOffset": ClickData.pixelOffset,
        "content": ClickData.featureData.infoWindowHtml
    });
    CommonInfoWindow.open(map);
  }
}

/** @type {google.maps.KmlLayer} */
var KmlOverlay = new google.maps.KmlLayer(KmlUrl, {
    'preserveViewport': true,
    'suppressInfoWindows': true
});
google.maps.event.addListener(KmlOverlay, "click", KmlLayerClicked);
person Chad Killingsworth    schedule 17.05.2012
comment
Привет, Чад, спасибо за это - я попробовал, но это все равно не сработало. InfoWindows предоставляются слоем KML. Очень ценю код! Спасибо. - person Darren Wilson; 18.05.2012
comment
Вы пропустили добавление этой опции тогда: 'suppressInfoWindows': true. Чтобы это работало, вы должны сообщить API, чтобы он не создавал свои собственные информационные окна. - person Chad Killingsworth; 24.05.2012
comment
Является ли предлагаемое редактирование вашим собственным? На данный момент это анонимно. - person Fionnuala; 03.07.2012
comment
Я согласен с редактированием (хотя я этого не сделал). Существует много вариантов этого кода, и особенности зависят от загружаемого файла KML. - person Chad Killingsworth; 03.07.2012