吹き出し(情報ウィンドウ)付きマーカーを複数配置する

企業サイトの場合、本社と支社。グルメサイトなら表示中の地図に存在するカフェ。現在地から一番近いガソリンスタンド。

地図上にたくさんのマーカー、クリックしたらその店名や住所を吹き出し形式で。

ものすごく基本的にやりたいことなのに、なぜか、なぜか、公式ドキュメント にそのサンプルが無いのです!

由々しき問題です。なので、サンプルを公開します。

<div id="map-canvas" class="map-canvas"></div>
<script type="text/javascript">
	var map;
	var currentInfoWindow = null;
	var data = [
		{ lat: 35.705833, lng: 139.751944, team: "読売ジャイアンツ" },
		{ lat: 35.674556, lng: 139.717083, team: "東京ヤクルトスワローズ" },
		{ lat: 35.443383, lng: 139.640028, team: "横浜DeNAベイスターズ" },
		{ lat: 35.185972, lng: 136.947467, team: "中日ドラゴンズ" },
		{ lat: 34.721231, lng: 135.361642, team: "阪神タイガース" },
		{ lat: 34.391878, lng: 132.484731, team: "広島東洋カープ" },
		{ lat: 43.015192, lng: 141.409686, team: "北海道日本ハムファイターズ" },
		{ lat: 38.256136, lng: 140.902567, team: "東北楽天ゴールデンイーグルス" },
		{ lat: 35.768617, lng: 139.420464, team: "埼玉西武ライオンズ" },
		{ lat: 35.645117, lng: 140.030847, team: "千葉ロッテマリーンズ" },
		{ lat: 34.669403, lng: 135.476214, team: "オリックス・バファローズ" },
		{ lat: 33.595383, lng: 130.362175, team: "福岡ソフトバンクホークス" }
	];
	
	function initMap() {
		map = new google.maps.Map(document.getElementById("map-canvas"), {
			zoom: 5,
			center: {lat: 39.725341641807056, lng: 137.85576856249997},
		});

		data.forEach(function(d) {
			var infoWindow = new google.maps.InfoWindow({
				content: '<div style="text-align:center">' + d.team + '</div>',
			});
			var marker = new google.maps.Marker({
				map: map,
				position: {lat: d.lat, lng: d.lng},
			});
			marker.addListener("click", function() {
				if (currentInfoWindow){
					currentInfoWindow.close();
				}
				infoWindow.open(map, marker);
				currentInfoWindow = infoWindow;
			});
		});
	}
</script>
<script async defer
	src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDjsHQdiN9T0LeJHfrP67Y1QKLiq3SjLno&callback=initMap">
</script>