Pregunta

Tengo el siguiente y quiero clasificar los marcadores por el tipo de categoría de diversas categorías que se extraen cat: dataMarkers.cat. Estoy un poco perdido sobre cómo hacer esto de la mejor manera. ¿Estoy pensando en Markermanager para cada categoría? ¿Necesitaría que cada categoría esté en su propia matriz Markermanager? ¿Cómo se tiene en cuenta esto con 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
                });

}
¿Fue útil?

Solución

Le recomiendo que almacene todos los marcadores en una matriz. Crea un campo llamado category en cada marcador y dale el valor correcto.

Cada vez que cambia la categoría, ejecuta su variedad de marcadores y establece marker.visible = true en los que están en la categoría correcta y marker.visible = false en todos los demás.

En JavaScript, es fácil asignar dinámicamente nuevos campos a un objeto. Simplemente diría:

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;

El marcador tendrá un campo llamado category Mientras exista.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top