上の応用。
<html>
<head>
<meta charset="utf-8">
<style>
html, body { height: 100%; }
#map { height: 100%; }
</style>
<script>
var MAP_INIT_PARAM = {
center: { lat: 34.3986543, lng: 132.4553011 },
zoom: 12.0
};
var KML_URL = "https://example.com/sample.kml";
var map;
function InitMap() {
// 地図表示
map = new google.maps.Map(document.querySelector("#map"), MAP_INIT_PARAM);
// KMLファイルをロード
var kmlLayer = new google.maps.KmlLayer({
url: KML_URL + "?" + (new Date()).getTime(), // キャッシュ無視のため時刻をつける
map: map,
suppressInfoWindows: true // 既定のバルーンは出さない
});
// KmlLayerのオブジェクトをクリックしたときにバルーン表示
var infoWindowList = [];
kmlLayer.addListener("click", function(kmlEvent) {
var infoWindow = new google.maps.InfoWindow({
position: kmlEvent.latLng,
pixelOffset: new google.maps.Size(-1, -10)
});
// クリックされたとき、それを一番手前にするイベントハンドラ設定
var dom = document.createElement("div");
dom.innerHTML = kmlEvent.featureData.infoWindowHtml;
dom.infoWindow = infoWindow;
dom.addEventListener("click", function() {
infoWindowList.forEach(function(item){ item.setZIndex(0); });
dom.infoWindow.setZIndex(1);
});
infoWindow.setContent(dom);
// infoWindowListに追加
infoWindowList.push(infoWindow);
infoWindow.addListener("closeclick", function() {
infoWindowList = infoWindowList.filter(function(item){ return item !== infoWindow; });
});
// 一番手前に表示
infoWindowList.forEach(function(item){ item.setZIndex(0); });
infoWindow.setZIndex(1);
infoWindow.open(map);
});
}
</script>
<script src="https://maps.googleapis.com/maps/api/js?key=API_KEY&callback=InitMap" async defer></script>
</head>
<body>
<div id="map"></div>
★APIキーの登録は必須★
</body>
</html>