使用谷歌地图版本3聚类标记

时间:2015-05-15 15:09:27

标签: google-maps-api-3 markerclusterer

我有大约2400个标记在谷歌地图版本3上显示。问题是地图上有太多标记,这不是一个很好的视觉表现。想要做的是将标记分组(即将它们聚类)。我遇到了一些与此相关的问题。以下是我的示例代码。

function initialize() {
        var markers = JSON.parse('<%=ConvertDataTabletoString() %>');
        var mapOptions = {
            center: new google.maps.LatLng(markers[0].lat, markers[0].lng),
            zoom: 2,
            mapTypeId: google.maps.MapTypeId.ROADMAP
            //marker:true
        };

        var infoWindow = new google.maps.InfoWindow();
        var map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);

        //Get marker image
        var redMarker = 'Images/marker2.png';
        var greenMarker = 'Images/g48.png';
        var currentMarker;

        var gmarkers = [];

        for (i = 0; i < markers.length; i++) {
            var data = markers[i];
            var mag = data.Magnitude;
            if (mag < 5) {
                currentMarker = greenMarker;
            }
            else if (mag >= 5) {
                currentMarker = redMarker;
            };
            var myLatlng = new google.maps.LatLng(data.lat, data.lng);
            var marker = new google.maps.Marker({
                position: myLatlng,
                map: map,
                title: data.title,
                icon: currentMarker
            });
            (function (marker, data) {
                //Attaching a click event to the current marker
                google.maps.event.addListener(marker, "click", function (e) {
                    infoWindow.setContent('Magnitude: ' + data.Magnitude + '<br />'
                                         + 'Location: ' + data.title);
                    infoWindow.open(map, marker);
                });
            })(marker, data);
            gmarkers.push(marker);
        }
    }

    var markerCluster = new MarkerClusterer(map, gmarkers);

    window.onload = function () { initialize();
}

1 个答案:

答案 0 :(得分:1)

我在您的代码中发布了javascript错误

Uncaught ReferenceError: map is not defined

在这一行:

var markerCluster = new MarkerClusterer(map, gmarkers);  

map变量是initialize函数的本地变量。 该行在initialize函数之外,因此map变量不可用。

将它放在初始化函数内(但在解析了标记之后)。