Google Maps API V3 + Infobubble dans MarkerClusterrer
-
13-11-2019 - |
Question
J'essayais d'ajouter une infobubble à un markercluster dans l'événement 'clusterClick', mais la méthode infobubble.open demande un paramètre 'marqueur' avec qui se lier. Le problème est qu'un markercluster n'est pas un google.maps.point, il n'est donc pas possible de lui lier l'infobubble.
J'ai attribué la possibilité du markercluster à l'infobubble mais l'infobubble redestiche dans la nouvelle position en déplaçant le marqueur de sa possibilité.
Quelqu'un a-t-il eu le même problème? Existe-t-il une solution sans modifier le code d'infobubble d'origine?
http://google-maps-utility-library-v3.googlecode.com/svn/trunk/infobubble/
La solution
Problème de solution 1:Le paramètre de marqueur était facultatif si je ne l'aimais jamais, le problème est résolu.
Utilisation:
infoBubble.setPossition(latLng);
infoBubble.open(map);
Pas:
infoBubble.open(map, marker);
Problème 2: Mais maintenant, l'infobubble apparaît sur le marché, y a-t-il un moyen de le déplacer ??
Problème de solution 2:
J'ai modifié le Sourcecode Infobubble pour contenir unparamètre offset, puis ajouter les pixels dans la fonction Draw:
InfoBubble.prototype.PIXEL_OFFSET = 0
...
var top = pos.y - (height + arrowSize); if (anchorHeight) { top -= anchorHeight; } top -= this.PIXEL_OFFSET
Juste au cas où quelqu'un aurait le même problème
Autres conseils
Ajoutez ceci à la ligne 93 (sous les autres champs d'option)
if (options['pixelOffset'] == undefined) {
options['pixelOffset'] = this.PIXEL_OFFSET_;
}
Autour de la ligne 182, ajoutez ceci
InfoBubble.prototype.PIXEL_OFFSET_ = [0.0];
Autour de la ligne 908, ajoutez ceci:
top -= this.get('pixelOffset')[1]; // Add offset Y.
left -= this.get('pixelOffset')[0]; // Add offset X.
Les lignes au-dessus doivent être placées au-dessus:
this.bubble_.style['top'] = this.px(top);
this.bubble_.style['left'] = this.px(left);
Maintenant dans votre construction pour les options que vous pourriez faire
var popupWindowOptions = {
backgroundColor: '#2B2B2B',
arrowStyle: 0,
pixelOffset: [0,16]
};
this.popupWindow = new InfoBubble(popupWindowOptions);