0

我一直在按照 Google Maps API V3 中的示例对我放置在地图上的标记进行聚类。我正在使用最简单的方法。我似乎无法让 MarkerCluster 出现。我可能将相应的代码放在错误的区域,但是在尝试了几种变体之后,我似乎无法让 MarkerCluster 出现。

如果有人有任何见解并且可以告诉我我做错了什么,将不胜感激。

这是代码:

    var stories = {{storyJson|safe}};
var geocoder;
var map;

function loadMarkers(stories){
    var markers = [];

    for (i=0;i<stories.length;i++) {
        var story = stories[i];    
        if (story.copy.length > 120) {
                story.copy = story.copy.substring(0, 120) + "...";
            }

        (function(story) {      
            var pinColor = "69f2ff";
                var pinImage = new google.maps.MarkerImage("http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=S|" + pinColor,
                    new google.maps.Size(21, 34),
                    new google.maps.Point(0,0),
                    new google.maps.Point(10, 34));
          var point = new google.maps.LatLng(story.latitude, story.longitude);
          var marker = new google.maps.Marker({position: point, map: map, icon: pinImage});
          var infowindow = new google.maps.InfoWindow({
            content: '<div >'+
                '<div >'+
                '</div>'+
                '<h2 class="firstHeading">'+story.headline+'</h2>'+
                '<div>'+
                '<span>'+story.author+'</span><br />'+
                '<span>'+story.city+'</span><br />'+
                '<span>'+story.topic+'</span><br />'+
                '<p>'+story.date+'</p>'+
                '<p>'+story.copy+'</p>'+
                '<p><a href='+story.url+'>Click to read story</a></p>'+
                '</div>'+
                '</div>'

          });

          google.maps.event.addListener(marker, 'click', function() {
            infowindow.open(map,this);

          });
            markers.push(marker);

        })(story);

    }
}




 function mainMap(position)
 {
       geocoder = new google.maps.Geocoder();
       // Define the coordinates as a Google Maps LatLng Object
       var coords = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);


       // Prepare the map options
       var mapOptions =
      {
                  zoom: 15,
                  center: coords,
                  mapTypeControl: false,
                  navigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL},
                  mapTypeId: google.maps.MapTypeId.ROADMAP
        };

        // Create the map, and place it in the map_canvas div
        map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);

        // Place the initial marker
        var marker = new google.maps.Marker({
                  position: coords,
                  map: map,
                  title: "Your current location!"
        });
        loadMarkers(stories);
        var markerCluster = new MarkerClusterer(map, markers);

    }
4

1 回答 1

0

看起来有些奇怪markers,应该只有一个全局markers变量填充在 loadMarkers 中并用于创建集群器。

但是,里面有一行var markers = []function (story)在每次循环迭代时被清空。此外,markers.push(marker)应该与创建标记的位置位于同一块中;现在它在 for 循环之外,所以只添加了一个标记(最后一个)。

最后,我不明白为什么有 { } 大括号var markerCluster = new MarkerClusterer(map, markers);

于 2012-06-25T18:41:54.673 回答