Wie kann ich die Farbe eines Google Maps-Markers ändern?


167

Ich verwende die Google Maps-API, um eine Karte voller Markierungen zu erstellen, möchte jedoch, dass sich eine Markierung von den anderen abhebt. Ich denke, das Einfachste wäre, die Farbe des Markers in Blau anstatt in Rot zu ändern. Ist das eine einfache Sache oder muss ich irgendwie ein ganz neues Symbol erstellen? Was ist der einfachste Weg, wenn ich ein neues Symbol erstellen muss?


2
Vielleicht möchten Sie diesen Beitrag von gestern überprüfen: stackoverflow.com/questions/2467720/…
Daniel Vassallo

oder vielleicht ein besserer Beitrag stackoverflow.com/questions/7095574/…
Faizan

Antworten:


45

Da Maps v2 veraltet ist, sind Sie wahrscheinlich an V3-Maps interessiert: https://developers.google.com/maps/documentation/javascript/markers#simple_icons

Für v2-Karten:

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

Sie würden einen Satz Logik veranlassen, alle 'regulären' Pins auszuführen, und einen anderen, der die 'speziellen' Pins unter Verwendung des neu definierten Markers ausführt.


24
Hinweis für zukünftige Leser: Dies gilt für Google Maps API v2, das veraltet ist. Wenn Sie v3 verwenden, müssen Sie woanders suchen.
Priester

12
Ich habe auf den ersten Link geklickt, Strg-F für 'Farbe': keine Ergebnisse. Es wäre großartig, der Antwort weitere Details hinzuzufügen, um die Frage tatsächlich zu beantworten. Das OP fragt speziell, ob es möglich ist, die Farbe zu ändern, ohne ein neues Symbol zu erstellen.
qwertzguy

125

Mit Version 3 der Google Maps-API können Sie dies am einfachsten tun, indem Sie ein benutzerdefiniertes Symbolset verwenden, wie es Benjamin Keen hier erstellt hat:

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

Wenn Sie alle diese Symbole an derselben Stelle wie Ihre Kartenseite platzieren, können Sie einen Marker einfärben, indem Sie beim Erstellen einfach die entsprechende Symboloption verwenden:

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

Dies ist sehr einfach und der Ansatz, den ich für das Projekt verwende, an dem ich gerade arbeite.


6
Diese Antwort ist großartig. Ich war traurig, dass die akzeptierte Antwort für V2 ist, aber dankenswerterweise hat sich das Scrollen nach unten ausgezahlt. Vielen Dank!
Adam Tuttle

Ich habe eine Version erstellt, die nicht auf Bildern basiert
Jonathan

49

MapIconMaker: Eine Bibliothek für Google Maps v2

Eine Möglichkeit ist die Verwendung des MapIconMaker (Deadlink). Es ist ein Beispiel hier (Dead). Die Standardsymbole von Google Maps sind 20 Pixel breit und 34 Pixel hoch. Sie können also Folgendes verwenden, um Folgendes zu emulieren:

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

Sie könnten es sogar in eine Funktion einwickeln, um es sich noch einfacher zu machen:

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

Das verwende ich persönlich für alle Marker, die ich erstelle. Ich bevorzuge die Option, die Farben einer Laune zu ändern.

Update: Die Hex-Farbe des Standardsymbols lautet "# FE7569". Sie können das Bild auch auf einen Marker setzen, anstatt einen neuen Marker mit einem neuen Symbol zu erstellen. Wenn Sie also eine Funktion hervorheben möchten, können Sie mit der obigen Funktion Folgendes tun:

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

StyledMarker: Eine Bibliothek für Google Maps v3

Da V2 vor einiger Zeit durch V3 ersetzt wurde, dachte ich, ich sollte diese Antwort aktualisieren. Ich habe eine Bibliothek für benutzerdefinierte Markierungen erstellt, die hier in der V3-Dienstprogrammbibliothek zu finden ist (Deadlink). Es ermöglicht verschiedene Farben und Formen, und Sie können auch Text auf dem Marker platzieren. Es funktioniert mithilfe der Google Charts-API, die Methoden zum Erstellen von Google Maps-Typmarkierungen enthält. Schauen Sie sich den Quellcode an, wenn Sie die Google Charts-API lieber direkt verwenden möchten.

Das Besondere an dieser Bibliothek ist jedoch, dass sie sich darum kümmert, die anklickbaren Bereiche dieser Markierungsbilder für Sie zu definieren. So hat beispielsweise die längere Blase mit Text die erwarteten anklickbaren Bereiche, wie in diesem Beispiel (Deadlink).


3
Es scheint, dass dies nur mit GMaps API v2 kompatibel ist?
Migräne

7
@Tigraine Ich habe tatsächlich eine völlig neue Bibliothek für v3 namens "StyledMarker" erstellt, die in der v3-Dienstprogrammbibliothek zu finden ist: code.google.com/p/google-maps-utility-library-v3/wiki/Libraries
Bob

Schauen Sie sich Sean McMains Antwort für v3
smp7d

@ Matt Ursprünglich war es ja nur v2. Ich habe seitdem aktualisiert, um eine v3-Lösung einzuschließen
Bob

Zu Ihrer Information, "setImage" ist keine Funktion des Marktes in Google Maps API v3. "setIcon" ist die richtige Funktion.
Nick Bork

39

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein Material Design

EDITED MÄRZ 2019 jetzt mit programmatischer Stiftfarbe,

PURE JAVASCRIPT, KEINE BILDER, UNTERSTÜTZT ETIKETTEN

stützt sich nicht mehr auf die veraltete Charts-API

    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
Diese Funktion wurde leider nicht mehr unterstützt, wie Sie hier sehen können . Dies ist eine so enttäuschende Situation, in der dies veraltet ist und die vorherige Version, die ich verwendet habe, MapIconMakerbereits veraltet ist.
Nullwörter

Beachten Sie, dass dies nicht mit https funktioniert, sondern nur mit http. Schade!
JoeGalind

@ JoeGalind Gibt es einen Grund, warum beim Abrufen von Farben eine Verschlüsselung erforderlich ist? Ich meine, ich sehe kein Sicherheitsrisiko für die Verwendung, es httpsei denn, es enthüllt etwas, das mir im Header nicht bekannt ist
Jonathan

@JonathanLeaders: Dies bedeutet, dass Sie die Domain zur zulässigen Liste in der info.plist Ihres Projekts hinzufügen müssen, da es sich nicht um einen https-Aufruf handelt.
JoeGalind

6
Aktualisiert für 2019, nicht mehr veraltet
Jonathan


12

Der einfachste Weg, den ich gefunden habe, ist die Verwendung von BitmapDescriptorFactory.defaultMarker (). Die Dokumentation enthält sogar ein Beispiel für das Festlegen der Farbe. Aus meinem eigenen Code:

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

Ist das nur Android oder auch für Webbrowser?
Jonathan

@ Jonathan - dies ist nur für Android - das Beispiel, das er gepostet hat, ist in JAVA
dazza5000

2

Um Marker anzupassen, können Sie dies über dieses Online-Tool tun: https://materialdesignicons.com/

In Ihrem Fall möchten Sie den Kartenmarker, der hier verfügbar ist: https://materialdesignicons.com/icon/map-marker und den Sie online anpassen können.

Wenn Sie einfach die Standardfarbe Rot in Blau ändern möchten, können Sie dieses Symbol laden: http://maps.google.com/mapfiles/ms/icons/blue-dot.png

Es wurde in diesem Thread erwähnt: https://stackoverflow.com/a/32651327/6381715


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.