2010-10-23 19 views
40

Esiste un modo per visualizzare una mappa di Google (incorporata tramite l'API di Javascript) in scala di grigi senza perdere altre funzionalità?Google Maps in scala di grigi

+0

Ne dubito. Potrebbe essere possibile in IE sovrapponendo la mappa con un DIV che utilizza una delle proprietà CSS 'filter' di DirectX per creare qualcosa sotto la scala di grigi, ma sovrapporrebbe anche i controlli. Interessato a vedere se qualcosa viene fuori –

+1

correlati: http://gis.stackexchange.com/questions/5964/how-to-apply-custom-google-map-style-in-openlayers – radek

risposta

105

Sì, nella V3 dell'api hanno introdotto StyledMaps.

Hanno persino provided a tool per generare il codice per gli stili che ti piacciono. Fai scorrere la "Saturazione" fino in fondo e hai la scala di grigi in corso!

L'esempio seguente visualizza una mappa in scala di grigi di Brooklyn:

var map; 
var brooklyn = new google.maps.LatLng(40.6743890, -73.9455); 

var stylez = [ 
    { 
     featureType: "all", 
     elementType: "all", 
     stylers: [ 
     { saturation: -100 } // <-- THIS 
     ] 
    } 
]; 

var mapOptions = { 
    zoom: 11, 
    center: brooklyn, 
    mapTypeControlOptions: { 
     mapTypeIds: [google.maps.MapTypeId.ROADMAP, 'tehgrayz'] 
    } 
}; 

map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions); 

var mapType = new google.maps.StyledMapType(stylez, { name:"Grayscale" });  
map.mapTypes.set('tehgrayz', mapType); 
map.setMapTypeId('tehgrayz'); 
+11

'tehgrayz' +1 per quello – EaterOfCode

+0

Come restituire come era prima delle modifiche? – gstackoverflow

-12

Oltre a scrivere le brave persone su Google e chiedendo loro di creare versioni in scala di grigi di tutti i riquadri dell'immagine e un parametro API facoltativo, no.

+2

Hanno fatto questo :) – micmcg

0

IE ha la direttiva filter: gray.

Rappresenta qualsiasi elemento HTML in scala di grigi. JSFiddle here.

È in grado di applicare questo al DIV principale della mappa. può girare la mappa che contiene in una represtenation di gradazione di grigio. Non posso dire se questo funzionerà senza effetti collaterali - dovresti provare. Ma è ben possibile.

IE soltanto, però, ma supportato dalla versione 4.

Grayscale Filter docs at MSDN

Oltre a questo, penso che ci sia un API di Flash per Maps, non c'è? Potrebbe essere più facile da raggiungere lì.

+0

Avere il la mappa in scala di grigi per IE non sarebbe particolarmente utile visto che il resto dell'applicazione viene codificato usando HTML5 e Canvas - grazie per la risposta! – DLiKS

+0

@DliKS sì. Non penso che ci sia un modo cross-browser per fare ciò, la roba 'filter' mai vista in altri browser. Purtroppo! ... Potrebbe essere possibile in Flash, non lo so. –

10

Basta usare CSS3 grayscale() effetto filtro per le mappe di Google elemento iframe! Funziona perché il codice js stampa le immagini.

iframe { 
    -webkit-filter: grayscale(100%); 
    -moz-filter: grayscale(100%); 
    -ms-filter: grayscale(100%); 
    -o-filter: grayscale(100%); 
    filter: grayscale(100%); 
    filter: url(grayscale.svg); /* Firefox 4+ */ 
    filter: gray; /* IE 6-9 */ 
} 

Prova anche a bersaglio solo le immagini di sfondo applicando questo per la prima div elemento sotto il div.gm-style (o qualsiasi altro involucro). Non so se Google modifichi spesso la struttura dom ma al momento parlando (25 nov 2014) questo funziona correttamente.

iframe .gm-style > div:first-child { 
    // Same code here 
} 
+0

questo mi ha salvato la giornata! – dinodsaurus

+2

.. attenzione .. il marker della mappa colorata verrà visualizzato anche in scala di grigi. –

+0

Finalmente quello che stavo cercando! Mi piace questo perché trasforma tutto in scala di grigi. Il problema con la soluzione js è che si perdono alcuni dei valori predefiniti nell'incorporazione della mappa. – adedoy

-1

Sì, c'è un'API di terze parti per le mappe di Google che fornisce una scala di grigi (snazzymaps).

È molto semplice. È possibile utilizzare questo sito Web per ottenere la combinazione di colori diversa per google maps.

http://snazzymaps.com

28

C'è un modo più breve po '(confronto ad @Roatin Marth di best answer) per rendere la vostra mappa di Google scala di grigi con Google Maps JavaScript API v3 includendo direttamente gli stili generati con Google Maps API Styled Map Wizard nell'oggetto google.maps.MapOptions:

var container = document.getElementById('map_canvas'); 
var mapOptions = { 
    zoom: 11, 
    center: new google.maps.LatLng(40.6743890, -73.9455), 
    styles: [{ 
    stylers: [{ 
     saturation: -100 
    }] 
    }] 
}; 

var map = new google.maps.Map(container, mapOptions); 

Si ottiene l'array impostato in styles proprietà in mapOptions variabile facendo clic sul pulsante su "Mostra JSON" dentro pannello Mappa di stile durante la finitura la personalizzazione di stili utilizzando Google Maps API Styled Map Wizard.

JSON output demonstrating styles array to set into mapOptions

+4

Soluzione molto migliore! – doitlikejustin

+2

Soluzione molto più semplice e migliore. Dovrebbe essere accettata risposta. –

Problemi correlati