Domanda

Sto usando Marker ClanterPLUS per raggruppare i marcatori su una mappa di Google ma l'opzione EnableRetinaCons non sembra funzionare.

// Custom style to alter the default font color (style is always the same).
var styles = [
    {
        url: 'PATH_TO_MY_66x66px_IMAGE',
        textColor: '#ddddd',
        textSize: 18,
        width: 33,
        height: 33,
    }
];

// Calculator function to determine which style to use (I only have one)
var calculator = function (markers, iconstyles){
    return{ text: markers.length.toString(), index:1};
};

// Set Options
var clusterOptions = {
    title: 'Cluster Title',
    enableRetinaIcons: true,
    styles: styles,
    calculator: calculator
}

// Add to map
new MarkerClusterer(this.map, this.markers, clusterOptions);
.


.

L'opzione EnablereRetinaInnons non sembra funzionare, l'immagine viene visualizzata il doppio delle dimensioni.

Impostazione della larghezza a 66x66px non aiuta neanche.

Qualcuno sa come configurarlo correttamente?

È stato utile?

Soluzione

Questo è apparentemente bug in Marker Clanter Plus. L'unico posto nel codice in cui effettivamente usano questa opzione è qui:

img = "<img src='" + this.url_ + "' style='position: absolute; top: " + spriteV + "px; left: " + spriteH + "px; ";
if (!this.cluster_.getMarkerClusterer().enableRetinaIcons_) {
  img += "clip: rect(" + (-1 * spriteV) + "px, " + ((-1 * spriteH) + this.width_) + "px, " +
      ((-1 * spriteV) + this.height_) + "px, " + (-1 * spriteH) + "px);";
}
img += "'>";
.

Quindi, in realtà, disabilitano solo il ritaglio per le icone sprite, ma non eseguono effettivamente l'azione retina richiesta. L'albero HTML dell'icona è in realtà simile:

Inserisci Descrizione dell'immagine qui

Quindi puoi vedere che il div che circonda l'icona ha dimensioni corrette (33x33), ma l'immagine stessa (il codice blu) non ha alcun set di dimensioni.

Ho provato a risolvere il problema patching la libreria dei cluster del marker, solo aggiungendo un altro ramo:

img = "<img src='" + this.url_ + "' style='position: absolute; top: " + spriteV + "px; left: " + spriteH + "px; ";
if (!this.cluster_.getMarkerClusterer().enableRetinaIcons_) {
  img += "clip: rect(" + (-1 * spriteV) + "px, " + ((-1 * spriteH) + this.width_) + "px, " +
      ((-1 * spriteV) + this.height_) + "px, " + (-1 * spriteH) + "px);";
}
else {
    img += "width: " + this.width_ + "px;" + "height: " + this.height_ + "px;";
}
img += "'>";
.

sembra funzionare:

Completa Biblioteca patch @pastebin

Esempio di test - http://jsfiddle.net/rt28t/2/

Puoi segnalare un bug e aggiungere questo come patch proposto: -)

Altri suggerimenti

So che questa domanda è stata data una risposta, ma un altro modo per risolvere questo problema (e probabilmente più facile) è solo utilizzando un'icona di marcatore SVG .In questo modo:

    .
  • La tua soluzione supporterà qualsiasi dispositivo di densità pixel
  • Non è necessario patchare la libreria (con tutti i problemi che può causare)
  • Il supporto del browser corrente è abbastanza buono - controlla caniuse.com svg-img per il browserStatistiche

Basta caricare le icone due volte la taglia:

m1.png = 53x53 (normal) 106x106 (retina)
m2.png = 56x56 (normal) 112x112 (retina) 
m3.png = 66x66 (normal) 132x132 (retina)
m4.png = 78x78 (normal) 156x156 (retina)
m5.png = 90x90 (normal) 180x180 (retina)
.

e aggiungi al tuo CSS:

#map .cluster img {
    max-width: 100%;
}
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top