La diferencia entre los dos métodos no parece estar claramente documentada. Sin embargo, tenga en cuenta lo siguiente:
Cuando se utiliza setMap(null)
, el marcador se pierda la referencia a la Map
. Si no mantiene una referencia al objeto Map
, no podrá volver a mostrar el marcador.
Además, el método setMap()
no activará el evento visible_changed
, mientras que el método setVisible()
hace (si la visibilidad es en realidad activarse).
Ejemplo:
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 4,
center: new google.maps.LatLng(-25.363, 131.044),
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var marker = new google.maps.Marker({
position: new google.maps.LatLng(-25.363, 131.044),
map: map
});
google.maps.event.addListener(marker, 'visible_changed', function() {
console.log('visible_changed triggered');
});
marker.setVisible(false); // visible_changed triggered
marker.setVisible(true); // visible_changed triggered
marker.setMap(null); // visible_changed not triggered
marker.setMap(map); // visible_changed not triggered
supongo que deberíamos estar usando el método setVisible(false)
cuando tenemos la intención de reshow el marcador de nuevo en el mapa, y el setMap(null)
cuando no estaremos mostrando de nuevo.
En resumen, 'setMap (null)' produciría un mejor rendimiento para 1000s de marcadores – Federico