【问题标题】:Toggle on/off Google map markers by category按类别打开/关闭 Google 地图标记
【发布时间】:2011-08-15 05:43:44
【问题描述】:

我有以下内容,并希望按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
                });

}

【问题讨论】:

    标签: google-maps google-maps-api-3 google-maps-markers markermanager


    【解决方案1】:

    我建议您将所有标记存储在一个数组中。在每个标记上创建一个名为 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;区分类别。
    • 每个 Marker 可以有多个类别吗?我所写的内容为每个标记分配了一个类别,然后您可以遍历标记数组并仅显示当前选择了该类别的标记
    • 每个标记可以有多个类别。最终这样做了,但我最终只从一个类别中排序.. marker.mycategory = category;标记.myname = 名称; gmarkers.push(标记);是不是像扔更多的marker.mycategories一样简单?
    • 是的,我想您可以将类别存储为每个标记上的数组。简单地说 categories = new Array();填写并设置 marker.category = categories。然后你可以在每个标记上循环它们。这可能是要走的路。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 2011-02-13
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 2014-10-26
    相关资源
    最近更新 更多