Tengo un conjunto de marcadores que se agrupan en mi mapa. Otro conjunto de marcadores se muestran individualmente, y necesito que estos se muestren por encima de los clústeres. He intentado configurar zIndex en el objeto de opciones de clústeres, menor que el del segundo conjunto de marcadores, pero fue en vano. ¿Alguna idea de cómo hacerlo?Google Maps: marcador de renderizado sobre marcador de marcador
Respuesta
Por lo que sé, esto no se puede hacer. Los clústeres residen en un panel más alto que la imagen del marcador.
https://developers.google.com/maps/documentation/javascript/reference#MapPanes
Tiene toda la razón, señor. –
Se puede hacer, pero es una forma bastante irregular hasta llegar allí ... Como dice Rick, el problema es que la propia MarkerClusterer añade un OverlayView con sus iconos de clúster en un panel superior como los marcadores regulares. La única forma de agregar un marcador por encima de los clústeres es vencer al clusterer con sus propias armas y agregar un OverlayView propio y agregar el marcado del icono del marcador a un panel aún más alto (lee sobre los paneles here). Realmente no me gusta, pero es la única forma que encontré.
Para hacer esto, tiene que crear una superposición personalizada implementando google.maps.OverlayView (reference), un buen ejemplo se puede encontrar here (con explicaciones, utilicé un poco de código).
Aquí es un prototipo CustomOverlay áspera:
// build custom overlay class which implements google.maps.OverlayView
function CustomOverlay(map, latlon, icon, title) {
this.latlon_ = latlon;
this.icon_ = icon;
this.title_ = title;
this.markerLayer = jQuery('<div />').addClass('overlay');
this.setMap(map);
};
CustomOverlay.prototype = new google.maps.OverlayView;
CustomOverlay.prototype.onAdd = function() {
var $pane = jQuery(this.getPanes().floatPane); // Pane 6, one higher than the marker clusterer
$pane.append(this.markerLayer);
};
CustomOverlay.prototype.onRemove = function(){
this.markerLayer.remove();
};
CustomOverlay.prototype.draw = function() {
var projection = this.getProjection();
var fragment = document.createDocumentFragment();
this.markerLayer.empty(); // Empty any previous rendered markers
var location = projection.fromLatLngToDivPixel(this.latlon_);
var $point = jQuery('<div class="map-point" title="'+this.title_+'" style="'
+'width:32px; height:32px; '
+'left:'+location.x+'px; top:'+location.y+'px; '
+'position:absolute; cursor:pointer; '
+'">'
+'<img src="'+this.icon_+'" style="position: absolute; top: -16px; left: -16px" />'
+'</div>');
fragment.appendChild($point.get(0));
this.markerLayer.append(fragment);
};
Esta superposición obtiene el mapa, un objeto LatLng y la dirección URL de un icono. Lo bueno es que puedes escribir tu propio HTML en la capa, lo malo es que tienes que manejar todo lo que la API de Maps hace por ti (como el manejo del anclaje de la imagen del marcador). El ejemplo solo funciona bien con imágenes de 32x32px donde el anclaje está en el medio de la imagen, por lo que sigue siendo bastante tosco.
Para utilizar el CustomOverlay, solo una instancia de esta manera:
// your map center/marker LatLng
var myLatlng = new google.maps.LatLng(24.247471, 89.920990);
// instantiate map
var map = new google.maps.Map(
document.getElementById("map-canvas"),
{zoom: 4, center: myLatlng, mapTypeId: google.maps.MapTypeId.ROADMAP}
);
// create the clusterer, but of course with markers
//var markerClusterer = new MarkerClusterer(map, []);
// add custom overlay to map
var customCustomOverlay = new CustomOverlay(map, myLatlng, 'http://www.foo.bar/icon.png');
Espero que esto funcione para usted.
Tuve el mismo problema pero no quería manejar una nueva superposición.
Sin tener que crear una Superposición específica, puede simplemente cambiar los índices z de los contenedores primarios de la superposición.
Esto se puede lograr mediante el uso de la siguiente función:
_changeOverlayOrder = function(map) {
var panes = map.getPanes();
var markerOverlayDiv = panes.overlayImage.parentNode;
var clusterOverlayDiv = panes.overlayMouseTarget.parentNode;
// Make the clusters clickable.
if(!markerOverlayDiv.style.pointerEvents) {
markerOverlayDiv.style.cssText += ";pointer-events: none;";
}
// Switch z-indexes
if(markerOverlayDiv.style.zIndex < clusterOverlayDiv.style.zIndex) {
var tmp = markerOverlayDiv.style.zIndex;
markerOverlayDiv.style.zIndex = clusterOverlayDiv.style.zIndex;
clusterOverlayDiv.style.zIndex = tmp;
}
};
espero que ayude.
¿Qué es "esto" en this.getPanes()? – marcovtwout
La respuesta de @mouwah es casi correcta, pero no hay un método 'getPanes()' para un objeto de mapa. Debe definir su clase 'OverlayView()' personalizada para usar el método 'getPanes()' y cambiar 'zIndex' del panel' overlayMouseTarget'. –
Este código * estaba * funcionando perfectamente hasta ahora, pero ** ¡ahora Google cambió algo y de repente dejó de funcionar! ** – TMS
- 1. Marcador Visibilidad En Google Maps
- 2. Google Maps marcador extraño problema
- 3. agrupación de marcador de Google Maps
- 4. Google Maps api V3 marcador de actualización
- 5. marcador google maps v3 mouseover tooltip
- 6. marcador estándar en Google Maps demasiado pequeño
- 7. Actualizar Marcador Posición Google Maps V3
- 8. marcador animoso en Google Maps v3
- 9. Quitar marcador en Google Maps Api v3
- 10. Google Maps marcador V3 con la etiqueta
- 11. ¿Cómo elimino un marcador en Google Maps?
- 12. Google maps API: posicionamiento de imagen de marcador
- 13. Obtención de coordenadas de marcador de Google Maps API
- 14. número de visualización en Google Maps Marcador para
- 15. Google Maps + Jquery: error de marcador en IE
- 16. icono de marcador de cambio en mouseover (google maps V3)
- 17. Evento de caída de marcador en google maps?
- 18. Agregar función de Marcador con la API de Google Maps
- 19. ¿Cómo "simular" un clic en un marcador de Google Maps?
- 20. Eliminación de un marcador en Google Maps API v3
- 21. API de Google Maps: Abrir URL haciendo clic en marcador
- 22. Cambiar el título en un marcador de Google Maps
- 23. Cómo poner el marcador con google maps cadena de consulta
- 24. marcador Clustering - Fusión Tabla de capa - Google Maps v3
- 25. Google Maps v3 marcador ventana de información en mouseover
- 26. Google Maps: cómo agregar sombra al marcador personalizado?
- 27. JS Google Maps API v3 Marcador animado entre coordenadas
- 28. Google Maps API v3 marcador con la etiqueta
- 29. Cómo determinar si un marcador está visible en Google Maps
- 30. Google Maps marcador cortado a la mitad Internet Explorer
Preguntas similares: http://stackoverflow.com/questions/9330802/zindex-on-clusters, http://stackoverflow.com/questions/6894548/positioning-markers-over-the-top-of-clusters- z-index-not-working – TMS