J'aimerais afficher une étiquette de texte à côté des marqueurs sur Google Maps. J'ai déjà utilisé Virtual Earth et je commence tout juste à utiliser Google Maps. J'ai essayé de définir la propriété Title mais cela ne change que le texte survolé.
Existe-t-il un moyen d'afficher une petite ligne de texte sous un marqueur qui y restera lorsque l'utilisateur fera un zoom, un panoramique et utilisera la carte?
Merci d'avance!
Il y a une bonne classe de classe ici , bien que vous deviez l'ajouter à côté des marqueurs.
Pour Google Maps JavaScript API v3, consultez les exemples ici .
Si vous souhaitez simplement afficher une étiquette sous le marqueur, vous pouvez étendre Google Maps Marker pour ajouter une méthode de définition de libellé. Vous pouvez également définir l'objet Label en étendant Google Maps overlayView comme ceci.
Démo: jsFiddle
<script type="text/javascript">
var point = { lat: 22.5667, lng: 88.3667 };
var markerSize = { x: 22, y: 40 };
google.maps.Marker.prototype.setLabel = function(label){
this.label = new MarkerLabel({
map: this.map,
marker: this,
text: label
});
this.label.bindTo('position', this, 'position');
};
var MarkerLabel = function(options) {
this.setValues(options);
this.span = document.createElement('span');
this.span.className = 'map-marker-label';
};
MarkerLabel.prototype = $.extend(new google.maps.OverlayView(), {
onAdd: function() {
this.getPanes().overlayImage.appendChild(this.span);
var self = this;
this.listeners = [
google.maps.event.addListener(this, 'position_changed', function() { self.draw(); })];
},
draw: function() {
var text = String(this.get('text'));
var position = this.getProjection().fromLatLngToDivPixel(this.get('position'));
this.span.innerHTML = text;
this.span.style.left = (position.x - (markerSize.x / 2)) - (text.length * 3) + 10 + 'px';
this.span.style.top = (position.y - markerSize.y + 40) + 'px';
}
});
function initialize(){
var myLatLng = new google.maps.LatLng(point.lat, point.lng);
var gmap = new google.maps.Map(document.getElementById('map_canvas'), {
zoom: 5,
center: myLatLng,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var myMarker = new google.maps.Marker({
map: gmap,
position: myLatLng,
label: 'Hello World!',
draggable: true
});
}
</script>
<style>
.map-marker-label{
position: absolute;
color: blue;
font-size: 16px;
font-weight: bold;
}
</style>
Cela fonctionnera.
Voici un exemple de code permettant de résoudre le problème: https://github.com/printercu/google-maps-utility-library-v3-read-only/tree/master/markerwithlabel/examples
C'est une classe personnalisée appelée InfoBox. Vous pouvez voir la référence de l'API sur le lien ci-dessus
Le fichier js peut être inclus à partir d’ici: https://github.com/printercu/google-maps-utility-library-v3-read-only/blob/master/infobox/src/infobox.js
À votre santé!
Une alternative à l’utilisation de la bibliothèque js est simplement de créer une icône .png qui inclura votre texte. Cela semble idiot, mais vous pouvez utiliser un service externe pour cela (comme celui-ci ).
Vous téléchargez votre icône et obtenez un lien en retour. Si vous ajoutez du texte à l'URL des liens, votre icône avec ce texte restitué sera renvoyée.
Même cette question a été résolue, j’ai trouvé cette ressource , qui, à mon avis, est une bonne solution pour ce problème et pourrait être utile . Une solution similaire pourrait également être trouvée ici .