2012-07-23 3 views
19

Sto lavorando alla migrazione del codice della mappa dalla v2 alla v3.Come creare un cerchio in google map v3 con lo stesso raggio in tutto il livello di zoom?

In v2 ho creato il cerchio con l'aiuto di GProjection e Overlay e avrà le stesse dimensioni in tutto il livello di zoom.

In v3 google fornisce la classe Circle che creerà una mappa circolare ma cambierà in un diverso livello di zoom.

Voglio creare un cerchio che avrà le stesse dimensioni in tutto il livello di zoom.

Voglio sapere in qualsiasi altro modo in Google mappa v3 con quello che posso creare cerchio con le stesse dimensioni per tutto il livello di zoom.

Grazie in anticipo.

+0

Cosa fare intendi con la stessa taglia? che ha lo stesso raggio indipendentemente dallo zoom sulla mappa? – Jorge

+0

stessa dimensione: significa nel livello di zoom 6 con raggio 10 la dimensione del cerchio è diversa e nel livello di zoom 7 raggio 10 la dimensione del cerchio è diversa.punto di disegno a forma di cerchio basato sul valore di proiezione quindi stesso raggio nessun effetto diverso in ogni livello di zoom. – Ashvin

+0

Intendi un cerchio che cambia dimensione rispetto al suolo ma mantiene le stesse dimensioni in termini di pixel? – Marcelo

risposta

31

Per creare cerchi con la stessa dimensione di pixel sullo schermo (rispetto alle stesse dimensioni dell'area in coordinate geografiche), si utilizza tradizionalmente un indicatore con un'icona personalizzata a forma di cerchio. Ma ora puoi essere più flessibile e utilizzare i simboli relativamente nuovi in ​​v3.

var marker = new google.maps.Marker({ 
    position: new google.maps.LatLng(-122.5,47.5), 
    icon: { 
    path: google.maps.SymbolPath.CIRCLE, 
    fillOpacity: 0.5, 
    fillColor: '#ff0000', 
    strokeOpacity: 1.0, 
    strokeColor: '#fff000', 
    strokeWeight: 3.0, 
    scale: 20 //pixels 
    } 
}); 

parte: È possibile effettuare animazioni fresco fuori di questi simboli così: http://googlegeodevelopers.blogspot.com/2012/06/powerful-data-visualization-with.html

+0

L'utilizzo di questo ha alcuni problemi con la gestione degli eventi zIndex e del mouse: http://stackoverflow.com/questions/11845916/google-maps-marker-zindex-doesnt-work-for-two-icon-types-symbol-and-string https://code.google.com/p/gmaps-api-issues/issues/detail?id=3611 – AlfaTeK

+0

Sfortunatamente, sembra che i simboli non siano attualmente compatibili con i display Retina: http://stackoverflow.com/questions/17352770/making-google-maps-symbols-compatible-con-display ad alta risoluzione –

+0

Utilizzo della scala non ha funzionato per me, ho dovuto usare il raggio, qualcosa del genere: 'raggio: MAX_VALUE/Math.pow (2 , map.getZoom()) ' –

9

io uso questo codice per gestire lo zoom e cerchi di scala sul mio Google Map V3:

google.maps.event.addListener(iMap.map, 'zoom_changed', function() { 
    for (var i = 0; i < iMap.circle.length; i++) { 
     var p = Math.pow(2, (21 - iMap.map.getZoom())); 
     iMap.circle[i].setRadius(p * 1128.497220 * 0.0027); 
    } 

    menu.hide(); 
}); 
+6

Mi chiedo come sei arrivato a questi due valori 1128.497220 e 0.0027? –

+0

Il fattore 1128.49 è il fattore di scala per Google Maps a livello di zoom 20. Non sono sicuro però dello 0,0027. La mia ipotesi è che è la dimensione che sta andando. – Rarw