Respuesta

22

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.

10

Otra distinción clave es que setMap(NULL) libera los recursos asociados con el marcador, mientras que setVisible(false) hace que el marcador sea invisible, pero los recursos asociados con el marcador todavía están asignados.

Si se trata de 100s o 1000s de marcadores, esto puede convertirse en un problema de rendimiento y memoria.

+3

En resumen, 'setMap (null)' produciría un mejor rendimiento para 1000s de marcadores – Federico

Cuestiones relacionadas