Aligue/apague los marcadores de mapa de Google por categoría
-
27-10-2019 - |
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
});
}
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.