按类别切换谷歌地图标记的开/关状态

3

我有以下内容,希望按照cat: dataMarkers.cat下拉列表中的各种类别来排序标记。但我不太清楚最佳方法是什么。我在考虑为每个类别使用一个markerManager?是否需要将每个类别放入其自己的markerManager数组中?这如何与markerClusterer相关?

var map;

function initialize() {
        var center = new google.maps.LatLng(39.632906,-106.524591);
        var options = {
          'zoom': 8,
          'center': center,
          'mapTypeId': google.maps.MapTypeId.ROADMAP
        };

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

            <!--Load Markers-->
                    var markers = [];
                    for (var i = 0, dataMarkers; dataMarkers = data.markers[i]; i++) {
                      var latLng = new google.maps.LatLng(dataMarkers.lat, dataMarkers.lng);
                      var marker = new google.maps.Marker({
                        position: latLng,
                        title: dataMarkers.title,
                        date: dataMarkers.date,
                        time: dataMarkers.time,
                        desc: dataMarkers.desc,
                        img: dataMarkers.img,
                        add: dataMarkers.address,
                        cat: dataMarkers.cat,
                        map: map
                      });

            <!--Display InfoWindows-->    
                    var infowindow = new google.maps.InfoWindow({
                            content: " "
                          });
                          google.maps.event.addListener(marker, 'click', function() {
                            infowindow.setContent('<div id="mapCont"><img class="mapImg" src="'+this.img+'"/>' +
                                                  '<div class="mapTitle">'+this.title+'</div>' + 
                                                  '<div class="mapHead">Date: <div class="mapInfo">'+this.date+'</div>' +
                                                  '<div class="mapHead">Time: <div class="mapInfo">'+this.time+'</div>' +
                                                  '<p>'+this.desc+'</p></div>');
                            infowindow.open(map, this);
                          });

                      markers.push(marker);
                    }

            <!--Cluster Markers-->
                var markerClusterer = new MarkerClusterer(map, markers, {
                  maxZoom: 15,
                  gridSize: 50
                });

}
1个回答

3
我建议您将所有标记存储在一个数组中。在每个标记上创建一个名为category的字段,并赋予其正确的值。
每当类别更改时,您都可以遍历标记数组,并对正确类别中的标记设置marker.visible = true,并在所有其他标记上设置marker.visible = false
在JavaScript中,动态向对象分配新字段很容易。您只需简单地说:
var marker = new google.maps.Marker({
    position: latLng,
    title: dataMarkers.title,
    date: dataMarkers.date,
    time: dataMarkers.time,
    desc: dataMarkers.desc,
    img: dataMarkers.img,
    add: dataMarkers.address,
    cat: dataMarkers.cat,
    map: map
});
marker.category = THE_CATEGORY_IT_BELONGS_TO;

标记将拥有一个名为category的字段,只要它存在即可。

dataMarkers.cat在JSON数据中包含5个不同的类别。仍然不确定marker.category = THE_CATEGORY_IT_BELONGS_TO;如何区分这些类别。 - RonnieT
每个标记可以有多个类别吗?我所写的为每个标记分配一个单一的类别,然后您可以循环遍历标记数组,并仅显示当前选择的类别的标记。 - Kasper Vesth
每个标记可以有多个类别。最终我这样做了,但最终只从一个类别进行排序.. marker.mycategory = category; marker.myname = name; gmarkers.push(marker); 是否只需添加更多的marker.mycategories即可? - RonnieT
是的,我想你可以将类别存储为每个标记上的数组。只需说categories = new Array(); 填充它并设置marker.category = categories。然后您可以在每个标记上循环遍历它们。那可能是正确的方法。 - Kasper Vesth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接