Come posso cambiare il colore di un marcatore di Google Maps?


167

Sto usando l'API di Google Maps per creare una mappa piena di marcatori, ma voglio che un marcatore si distingua dagli altri. La cosa più semplice da fare, penso, sarebbe cambiare il colore dell'indicatore in blu, anziché in rosso. È una cosa semplice da fare o devo creare in qualche modo un'icona completamente nuova? Se devo creare una nuova icona, qual è il modo più semplice per farlo?


2
Puoi controllare questo post di ieri: stackoverflow.com/questions/2467720/…
Daniel Vassallo

Risposte:


45

Poiché le mappe v2 sono obsolete, probabilmente sei interessato alle mappe v3: https://developers.google.com/maps/documentation/javascript/markers#simple_icons

Per le mappe v2:

http://code.google.com/apis/maps/documentation/overlays.html#Icons_overview

Avresti un set di logica che fa tutti i pin "normali" e un altro che esegue i pin "speciali" usando il nuovo marker definito.


24
Nota per i lettori futuri: si tratta dell'API di Google Maps v2 che è obsoleta. Se stai usando la v3, devi cercare altrove.
priestc,

12
Ho cliccato sul primo link, ctrl-f per 'color': nessun risultato. Sarebbe bello aggiungere ulteriori dettagli alla risposta per rispondere effettivamente alla domanda. L'OP chiede specificamente se è possibile cambiare il colore senza creare una nuova icona.
qwertzguy,

125

Con la versione 3 dell'API di Google Maps, il modo più semplice per farlo potrebbe essere quello di prendere un set di icone personalizzato, come quello che Benjamin Keen ha creato qui:

http://www.benjaminkeen.com/?p=105

Se metti tutte quelle icone nello stesso posto della pagina della tua mappa, puoi colorare un indicatore semplicemente usando l'opzione icona appropriata durante la creazione:

var beachMarker = new google.maps.Marker({
  position: myLatLng,
  map: map,
  icon: 'brown_markerA.png'
});

Questo è semplicissimo ed è l'approccio che sto usando per il progetto a cui sto lavorando attualmente.


6
Questa risposta è fantastica. Ero triste che la risposta accettata fosse per V2, ma per fortuna lo scorrimento verso il basso ha dato i suoi frutti. Grazie!
Adam Tuttle,

Ho creato una versione che non si basa sulle immagini: stackoverflow.com/a/23163930/1689770
Jonathan

49

MapIconMaker: una libreria per Google Maps v2

Un modo è usare MapIconMaker (deadlink). C'è un esempio qui (deadlink). Le icone predefinite di Google Maps sono 20px di larghezza e 34px di altezza, quindi puoi usare qualcosa di simile per emulare:

var newIcon = MapIconMaker.createMarkerIcon({width: 20, height: 34, primaryColor: "#0000FF", cornercolor:"#0000FF"});
var marker = new GMarker(map.getCenter(), {icon: newIcon});

Potresti anche avvolgerlo in qualche funzione per rendere le cose ancora più facili su te stesso:

function getIcon(color) {
    return MapIconMaker.createMarkerIcon({width: 20, height: 34, primaryColor: color, cornercolor:color});
}

Questo è quello che uso personalmente per tutti i marker che creo. Preferisco avere la possibilità di cambiare i colori di un capriccio.

Aggiornamento: il colore esadecimale dell'icona predefinita è "# FE7569". Inoltre, è possibile impostare Immagine su un indicatore anziché creare un nuovo indicatore con una nuova icona. Quindi, se si desidera evidenziare una funzione, è possibile utilizzare qualcosa di simile utilizzando la funzione sopra:

function highlightMarker(marker, highlight) {
    var color = "#FE7569";
    if (highlight) {
        color = "#0000FF";
    }
    marker.setImage(getIcon(color).image);
}

StyledMarker: una libreria per Google Maps v3

Dato che V2 è stato sostituito da V3 qualche tempo fa, ho pensato che avrei dovuto aggiornare questa risposta. Ho creato una libreria per marcatori personalizzati che è possibile trovare qui nella Libreria di utilità V3 (deadlink). Consente diversi colori e forme e puoi anche posizionare il testo sul marcatore. Funziona utilizzando l'API Google Charts che ha metodi per creare marcatori di tipi di Google Maps. Sentiti libero di guardare il codice sorgente se preferisci utilizzare direttamente l'API Google Charts.

La cosa su quella libreria, tuttavia, è che si occupa di definire le aree cliccabili di queste immagini dei marker per te, quindi, per esempio, la bolla più lunga con il testo avrà le regioni cliccabili che ci si aspetta, come questo esempio (deadlink).


3
Sembra che questo sia compatibile solo con l'API GMaps v2?
Tigraine,

7
@Tigraine In realtà ho creato una libreria completamente nuova da utilizzare per la v3 chiamata "StyledMarker" che può essere trovata nella libreria di utilità v3: code.google.com/p/google-maps-utility-library-v3/wiki/Libraries
Bob

guarda la risposta di Sean McMains per v3
smp7d,

@Matt Inizialmente, sì, era solo v2. Da allora ho aggiornato per includere una soluzione v3
Bob

Cordiali saluti, "setImage" non è una funzione del mercato nell'API di Google Maps v3. "setIcon" è la funzione corretta da usare.
Nick Bork,

39

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine Design materiale

EDITED MARCH 2019 now with color programmatic pin,

JAVASCRIPT PURO, NESSUNA IMMAGINE, ETICHETTE DI SUPPORTO

non si basa più sull'API Charts obsoleta

    var pinColor = "#FFFFFF";
    var pinLabel = "A";

    // Pick your pin (hole or no hole)
    var pinSVGHole = "M12,11.5A2.5,2.5 0 0,1 9.5,9A2.5,2.5 0 0,1 12,6.5A2.5,2.5 0 0,1 14.5,9A2.5,2.5 0 0,1 12,11.5M12,2A7,7 0 0,0 5,9C5,14.25 12,22 12,22C12,22 19,14.25 19,9A7,7 0 0,0 12,2Z";
    var labelOriginHole = new google.maps.Point(12,15);
    var pinSVGFilled = "M 12,2 C 8.1340068,2 5,5.1340068 5,9 c 0,5.25 7,13 7,13 0,0 7,-7.75 7,-13 0,-3.8659932 -3.134007,-7 -7,-7 z";
    var labelOriginFilled =  new google.maps.Point(12,9);


    var markerImage = {  // https://developers.google.com/maps/documentation/javascript/reference/marker#MarkerLabel
        path: pinSVGFilled,
        anchor: new google.maps.Point(12,17),
        fillOpacity: 1,
        fillColor: pinColor,
        strokeWeight: 2,
        strokeColor: "white",
        scale: 2,
        labelOrigin: labelOriginFilled
    };
    var label = {
        text: pinLabel,
        color: "white",
        fontSize: "12px",
    }; // https://developers.google.com/maps/documentation/javascript/reference/marker#Symbol
    this.marker        = new google.maps.Marker({
        map: map.MapObject,
        //OPTIONAL: label: label,
        position: this.geographicCoordinates,
        icon: markerImage,
        //OPTIONAL: animation: google.maps.Animation.DROP,
    });

2
Questa funzione è stata purtroppo obsoleta, come puoi vedere qui . Questa è una situazione così deludente, in cui è deprecata e la versione precedente che ho usato MapIconMakerè già stata deprecata.
zerowords,

Nota che questo non funziona con https, solo http. Bummer!
Joe Galind

@JoeGalind c'è qualche motivo per cui è richiesta la crittografia durante il recupero dei colori? Voglio dire, non vedo alcun rischio per la sicurezza da usare a httpmeno che non stia esponendo qualcosa di cui non sono a conoscenza nell'intestazione
Jonathan,

@JonathanLeaders: questo significa che devi aggiungere il dominio all'elenco consentito nella info.plist del tuo progetto, poiché non è una chiamata https.
Joe Galind,

6
Aggiornato per il 2019, non più obsoleto
Jonathan


12

Il modo più semplice che ho trovato è usare BitmapDescriptorFactory.defaultMarker () la documentazione ha anche un esempio di impostazione del colore. Dal mio codice:

MarkerOptions marker = new MarkerOptions()
            .title(formatInfo(data))
            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
            .position(new LatLng(data.getLatitude(), data.getLongitude()))

Questo Android è solo o anche per browser Web?
Jonathan

@Jonathan - questo è solo per Android - l'esempio che ha pubblicato è in JAVA
dazza5000

2

Per personalizzare i marker, puoi farlo da questo strumento online: https://materialdesignicons.com/

Nel tuo caso, vuoi il marker della mappa che è disponibile qui: https://materialdesignicons.com/icon/map-marker e che puoi personalizzare online.

Se vuoi semplicemente cambiare il colore Rosso predefinito in Blu, puoi caricare questa icona: http://maps.google.com/mapfiles/ms/icons/blue-dot.png

È stato menzionato in questa discussione: https://stackoverflow.com/a/32651327/6381715


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.