【Maps JavaScript API】MarkerClustererのクラスターマーカーアイコンが表示されないときの解決

 

結論いうと、CDN読み込み後markerClusterer.MarkerClustererを使えば解決します。

環境

Windows10
Maps JavaScript API【Google Maps Platform】
js,html,css

経緯・困ったこと

Maps JavaScript APIを使用し、クラスターマップを作ろうとしていた時のこと。

以下を参照し、公式サイト内のコピペでそのまま動かしたが、マップのみ生成されてクラスターマーカー達は表示されなかった、、。

※マップ自体なんも表示されてないわ!!って方は以下を参照してください。

(API key取ってscriptタグ内に書いてない人はそこもしないといけないです!)

【Maps JavaScript APIが表示されない】原因のAccess to script at ‘ file名 ’from origin ‘null’ has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, isolated-app, chrome-extension, chrome, https, chrome-untrusted.を解決

原因・解決

CDNは追加していたのでここが問題ではなさそうでした。

※コピペ内にCDNを追加していないとクラスターは表示されません。

/* CDN、こいつをHTML内に追加する必要がある */
<script src="https://unpkg.com/@googlemaps/markerclusterer/dist/index.min.js"></script>

エラーの確認

とりあえず、ブラウザの検証からエラーが出てないかを確認。

すると以下のエラーが。

"Uncaught (in promise) ReferenceError: MarkerClusterer is not defined at initMap (index.js:31:3)"

エラーの発生個所を見てみるとどうやらjs内の以下の部分、markercluster追加の部分で発生してるみたいです。

// Add a marker clusterer to manage the markers.
  new MarkerClusterer({ markers, map });

解決方法

結論、自分の見落としでした。

公式リファレンスを確認しなおすと、CDNを使用した場合はmarkercluster追加の部分の表記がちょっと変わるみたいです。

/* 以下の形だとCDK追加環境で動く*/ const markerCluster =new markerClusterer.MarkerClusterer({ map, markers });

上記に変更したところ、無事マーカークラスター達は表示されました。

 

 

また、NPMの場合だとimportするものもあるのでお忘れなく!

一応わかりやすいよう全文載せておきます。

参考までに↓

function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 3,
    center: { lat: -28.024, lng: 140.887 },
  });
  const infoWindow = new google.maps.InfoWindow({
    content: "",
    disableAutoPan: true,
  });
  // Create an array of alphabetical characters used to label the markers.
  const labels = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  // Add some markers to the map.
  const markers = locations.map((position, i) => {
    const label = labels[i % labels.length];
    const marker = new google.maps.Marker({
      position,
      label,
    });

    // markers can only be keyboard focusable when they have click listeners
    // open info window when marker is clicked
    marker.addListener("click", () => {
      infoWindow.setContent(label);
      infoWindow.open(map, marker);
    });
    return marker;
  });

  // Add a marker clusterer to manage the markers.
 /* 以下の形だとCDK追加環境で動く*/
 const markerCluster =new markerClusterer.MarkerClusterer({ map, markers }); } const locations = [   { lat: -31.56391, lng: 147.154312 },   { lat: -33.718234, lng: 150.363181 },   { lat: -33.727111, lng: 150.371124 },   { lat: -33.848588, lng: 151.209834 },   { lat: -33.851702, lng: 151.216968 },   { lat: -34.671264, lng: 150.863657 },   { lat: -35.304724, lng: 148.662905 },   { lat: -36.817685, lng: 175.699196 },   { lat: -36.828611, lng: 175.790222 },   { lat: -37.75, lng: 145.116667 },   { lat: -37.759859, lng: 145.128708 },   { lat: -37.765015, lng: 145.133858 },   { lat: -37.770104, lng: 145.143299 },   { lat: -37.7737, lng: 145.145187 },   { lat: -37.774785, lng: 145.137978 },   { lat: -37.819616, lng: 144.968119 },   { lat: -38.330766, lng: 144.695692 },   { lat: -39.927193, lng: 175.053218 },   { lat: -41.330162, lng: 174.865694 },   { lat: -42.734358, lng: 147.439506 },   { lat: -42.734358, lng: 147.501315 },   { lat: -42.735258, lng: 147.438 },   { lat: -43.999792, lng: 170.463352 }, ]; window.initMap = initMap;