如果我重命名地图变量,为什么使用 MarkerClusterer 的 Google 地图标记不会显示在地图上?

问题描述 投票:0回答:1

我想在我的网页上使用 Google Maps API。另外,我想按照 this

 教程使用 
MarkerClusterer 对标记进行聚类。

重命名之前

以下代码按预期工作:

注意:我删除了 API 密钥。

<html>
    <head>
        <title>Marker Clustering</title>
        <script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script>

        <style>
            #googleMapsDesktop {
                height: 100%;
            }

            html,
            body {
                height: 100%;
                margin: 0;
                padding: 0;
            }
        </style>
    </head>
    <body>
        <div id="googleMapsDesktop"></div>

        <script type="module">
            import { MarkerClusterer } from "https://cdn.skypack.dev/@googlemaps/[email protected]";

            function initMap() {
                const map = new google.maps.Map(document.getElementById("googleMapsDesktop"), {
                    zoom: 3,
                    center: { lat: -28.024, lng: 140.887 },
                });

                const infoWindow = new google.maps.InfoWindow({
                    content: "",
                    disableAutoPan: true,
                });

                const labels = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

                const markers = locations.map((position, i) => {
                    const label = labels[i % labels.length];
                    const marker = new google.maps.Marker({
                        position,
                        label,
                    });

                    marker.addListener("click", () => {
                        infoWindow.setContent(label);
                        infoWindow.open(map, marker);
                    });
                    return marker;
                });

                new MarkerClusterer({ markers, map });
            }

            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;
        </script>

        <script src="https://maps.googleapis.com/maps/api/js?key=xxxxxxxxxxxxxxxxxxxx&callback=initMap" defer></script>
    </body>
</html>

这是输出:


更名后

现在,如果我只是重命名

map
变量...

const map = new google.maps.Map(document.getElementById("googleMapsDesktop"), {...});

...对此...

const mapDesktop = new google.maps.Map(document.getElementById("googleMapsDesktop"), {...});

...并更新代码,标记不会显示在地图上。

以下代码不起作用(即标记不显示在地图上):

注意:我删除了 API 密钥。

<html>
    <head>
        <title>Marker Clustering</title>
        <script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script>

        <style>
            #googleMapsDesktop {
                height: 100%;
            }

            html,
            body {
                height: 100%;
                margin: 0;
                padding: 0;
            }
        </style>
    </head>
    <body>
        <div id="googleMapsDesktop"></div>

        <script type="module">
            import { MarkerClusterer } from "https://cdn.skypack.dev/@googlemaps/[email protected]";

            function initMap() {
                const mapDesktop = new google.maps.Map(document.getElementById("googleMapsDesktop"), {
                    zoom: 3,
                    center: { lat: -28.024, lng: 140.887 },
                });

                const infoWindow = new google.maps.InfoWindow({
                    content: "",
                    disableAutoPan: true,
                });

                const labels = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

                const markers = locations.map((position, i) => {
                    const label = labels[i % labels.length];
                    const marker = new google.maps.Marker({
                        position,
                        label,
                    });

                    marker.addListener("click", () => {
                        infoWindow.setContent(label);
                        infoWindow.open(mapDesktop, marker);
                    });
                    return marker;
                });

                new MarkerClusterer({ markers, mapDesktop });
            }

            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;
        </script>

        <script src="https://maps.googleapis.com/maps/api/js?key=xxxxxxxxxxxxxxxxxxxx&callback=initMap" defer></script>
    </body>
</html>

这是输出:

此外,控制台不会显示与 Google Maps API 或 MarkerClusterer 相关的任何错误。

我错过了什么?

google-maps google-maps-api-3 google-maps-markers markerclusterer
1个回答
1
投票

好的,我在这个已关闭的问题的帮助下找到了这个问题,它在某种程度上是相关的。

使用

new MarkerClusterer({ markers, mapX });
创建集群时会失败,但使用
new MarkerClusterer({ markers, map: mapX });
则可以正常工作。

如果您想安全起见,也许最好的选择是使用:

new MarkerClusterer({ markers: markers, map: mapX });

下面的工作代码片段。

<html>
    <head>
        <title>Marker Clustering</title>
        <script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script>

        <style>
            #googleMapsDesktop {
                height: 100%;
            }

            html,
            body {
                height: 100%;
                margin: 0;
                padding: 0;
            }
        </style>
    </head>
    <body>
        <div id="googleMapsDesktop"></div>

        <script type="module">
            import { MarkerClusterer } from "https://cdn.skypack.dev/@googlemaps/[email protected]";

            function initMap() {
                const mapX = new google.maps.Map(document.getElementById("googleMapsDesktop"), {
                    zoom: 3,
                    center: { lat: -28.024, lng: 140.887 },
                });

                const infoWindow = new google.maps.InfoWindow({
                    content: "",
                    disableAutoPan: true,
                });

                const labels = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

                const markers = locations.map((position, i) => {
                    const label = labels[i % labels.length];
                    const marker = new google.maps.Marker({
                        position,
                        label,
                    });

                    marker.addListener("click", () => {
                        infoWindow.setContent(label);
                        infoWindow.open(mapX, marker);
                    });
                    return marker;
                });

                new MarkerClusterer({ markers: markers, map: mapX });
            }

            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;
        </script>

        <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk&callback=initMap" defer></script>
    </body>
</html>

© www.soinside.com 2019 - 2024. All rights reserved.