2009-06-29 19 views
22

Vorrei visualizzare un'etichetta di testo accanto ai marcatori su google maps. Ho già utilizzato Virtual Earth e sto appena iniziando a utilizzare Google Maps. Ho provato a impostare la proprietà Title ma questo cambia solo il roll over del testo.Come visualizzare un'etichetta accanto a un indicatore per Google Maps?

C'è un modo per visualizzare una piccola riga di testo sotto un marcatore che rimarrà lì mentre l'utente zooma, apre e usa la mappa?

Grazie in anticipo!

+0

Penso di aver trovato una risposta ... il sito sembra essere inattivo per me, ma Google ne ha una cache. Ci proverò e vedremo come funziona. http://74.125.95.132/search?q=cache:http://googlemapsbook.com/2007/01/22/extending-gmarker/ –

risposta

13

C'è una buona classe di etichetta here, anche se dovrai aggiungerla accanto ai marcatori.

+0

Questo ragazzo ha delle buone cose :) – RedBlueThing

+0

La classe ELabel che mi hai indicato funziona abbastanza bene. Incredibile sito di Google Maps btw, non so come non l'ho trovato nelle mie ricerche originali. Grazie! –

+4

È comodo, anche se non funziona con la v3 dell'API JavaScript di Google Maps. Inoltre, se fai lo zoom indietro abbastanza lontano, le etichette si sovrappongono in una zuppa illeggibile. Comunque, la migliore offerta che ho trovato finora. –

25

Per l'API JavaScript v3 di Google Maps, vedere the examples here.

Source code available in normal and minimised forms.

+1

Versione 1.1.1 di MarkerWithLabel è stato rilasciato con alcune correzioni. –

+1

Per un esempio di questa API in uso, controlla un sito Web che ho sviluppato (continua a fare zoom sulla mappa e vedrai prima i marcatori, quindi le etichette man mano che ingrandirai ulteriormente): http://diveseven.com/atlas –

+0

Buono ..Ma è molto lento rispetto ai normali Marker, quando il numero di marker in alcune migliaia .. C'è qualche alternativa a questo problema? @Drew Noakes. –

0

Anche a questa domanda è stata data risposta Ho trovato this resource, che ritengo sia una buona soluzione per questo problema e potrebbe essere utile. Inoltre, una soluzione simile potrebbe essere trovata here.

+0

I collegamenti che hai condiviso sono per Android MapView, non per Google Maps. – draconis

0

Un'alternativa all'utilizzo della libreria js consiste semplicemente nel creare un'icona .png che includa il testo. Sembra sciocco, ma puoi usare qualche servizio esterno per questo (come this one).

Si carica l'icona e si ottiene un collegamento in cambio. Se aggiungi del testo ai collegamenti url, restituirà l'icona con il testo visualizzato.

6

Se si desidera solo per mostrare l'etichetta sotto il marcatore, quindi è possibile estendere Google Maps Marker per aggiungere un metodo setter per l'etichetta e si può definire l'oggetto etichetta estendendo Google Maps OverlayView come questo ..

demo: 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> 

Questo funzionerà.

+1

Come rimuoviamo questa etichetta dalla mappa? La rimozione del marcatore non rimuove l'etichetta dalla mappa. – YashG99

+0

Per rimuovere l'etichetta dall'indicatore utilizzare in questo modo 'marker.label.span.remove()' – shana

+0

grazie al lavoro come un fascino !!! –

Problemi correlati