2010-03-18 63 views
144

Ich verwende das Google Maps-API, um eine Karte voller Marker zu erstellen, aber ich möchte, dass sich ein Marker von den anderen abhebt. Das Einfachste, was ich denke, wäre, die Farbe des Markers auf Blau anstatt auf Rot zu ändern. Ist das eine einfache Sache oder muss ich irgendwie ein ganz neues Icon erstellen? Wenn ich ein neues Symbol erstellen muss, was ist der einfachste Weg?Wie kann ich die Farbe eines Google Maps-Markers ändern?

+2

Sie können diesen Beitrag von gestern überprüfen möchten: http://StackOverflow.com/Questions/2467720/How-to-change-Color-of-Marker-in-Google-map –

+0

oder vielleicht eine bessere Post http: //stackoverflow.com/questions/7095574/google-maps-api-3-custom-marker-color-for-default-dot-marker – Faizan

Antwort

39

Da Karten v2 veraltet ist, sind Sie wahrscheinlich interessiert in v3 Karten: 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 eine Reihe von Logik alles tun, die 'normale' Stifte und eine andere, die die "speziellen" Stifte verwendet, die den neuen definierten Marker verwenden.

+23

Hinweis für zukünftige Leser: Dies ist für Google Maps API v2, die veraltet ist. Wenn Sie v3 verwenden, müssen Sie sich woanders umsehen. – priestc

48

MapIconMaker: eine Bibliothek für Google Maps v2

Eine Möglichkeit, die MapIconMaker zu verwenden ist. Es gibt ein Beispiel here. Google Maps Standardsymbole sind 20px Breite und 34px Höhe, so könnte man so etwas wie diese verwenden 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 sogar in irgendeiner Funktion wickeln Sie es Dinge noch einfacher auf sich selbst 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 Möglichkeit, die Farben einer Laune zu ändern.

Aktualisierung: Die Hex-Farbe des Standardsymbols ist "# FE7569". Außerdem können Sie Image auf einem Marker setzen, anstatt einen neuen Marker mit einem neuen Symbol zu erstellen. Wenn Sie also eine Funktion markieren Sie mit so etwas wie dies gehen könnte, um die Funktion oben mit:

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 irgendwann durch V3 ersetzt wurde vor dachte ich, Ich sollte diese Antwort aktualisieren. Ich habe eine Bibliothek für benutzerdefinierte Markierungen erstellt, die in der V3-Dienstprogrammbibliothek gefunden werden kann. Es ermöglicht verschiedene Farben und Formen, und Sie können auch Text auf dem Marker platzieren. Es funktioniert mit der Google Charts-API, die Methoden zum Erstellen von Google Maps-Typ-Markern bietet. Schauen Sie sich den Quellcode an, wenn Sie die Google Charts API lieber direkt verwenden möchten.

Die Sache mit dieser Bibliothek ist jedoch, dass sie die anklickbaren Regionen dieser Markerbilder für Sie definiert, so dass zum Beispiel die längere Blase mit Text die anklickbaren Regionen hat, die man erwartet, wie this example.

+3

Es scheint, dass dies nur mit GMaps API v2 kompatibel ist? – Tigraine

+6

@Tigraine Ich habe tatsächlich eine komplett neue Bibliothek für v3 mit dem Namen "StyledMarker" erstellt, die in der v3-Dienstprogrammbibliothek zu finden ist: http://code.google.com/p/google-maps-utility-vibrary-v3/ wiki/Bibliotheken – Bob

+0

sieh dir Sean McMains 'Antwort für v3 an – smp7d

106

Mit der Version 3 des Google Maps API, der einfachste Weg, dies zu tun durch Greifen ein eigenes Icon-Set sein kann, wie derjenige, der Benjamin Keen hier geschaffen hat:

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

Wenn Sie setzen all diese Symbole an der gleichen Stelle wie Ihre Karte Seite können Sie eine Markierung einfach über die entsprechende Symbol Option kolorieren beim Erstellen:

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

das ist super-leicht und ist der Ansatz, den ich bin mit für das Projekt arbeite ich momentan.

+5

Diese Antwort ist genial. Ich war traurig, dass die angenommene Antwort für V2 ist, aber glücklicherweise hat sich das Herunterscrollen gelohnt. Vielen Dank! –

9

Der einfachste Weg, ich fand, ist BitmapDescriptorFactory.defaultMarker() zu verwenden, die documentation auch ein Beispiel für die Einstellung der Farbe. Von meinem eigenen Code:

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

Sie benötigen keine benutzerdefinierten Bibliotheken für Google Maps v3.

var pinColor = "FE7569"; 
var pinImage = new google.maps.MarkerImage("http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=%E2%80%A2|" + pinColor, 
    new google.maps.Size(21, 34), 
    new google.maps.Point(0,0), 
    new google.maps.Point(10, 34)); 
var pinShadow = new google.maps.MarkerImage("http://chart.apis.google.com/chart?chst=d_map_pin_shadow", 
    new google.maps.Size(40, 37), 
    new google.maps.Point(0, 0), 
    new google.maps.Point(12, 35)); 
var marker = new google.maps.Marker({ 
      position: new google.maps.LatLng(0,0), 
      map: map, 
      icon: pinImage, 
      shadow: pinShadow 
     }); 

von Matt Burns Das funktioniert ab Oktober 2014 aber ist veraltet.

+2

Diese Funktion wurde leider eingestellt [wie Sie hier sehen können] (https://developers.google.com/chart/infographics/). Dies ist eine so enttäuschende Situation, wo dies veraltet ist und die vorherige Version, MapIconMaker, bereits veraltet ist. – zerowords

+0

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

+0

@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 von "http", es sei denn, es wird etwas offengelegt, das mir nicht bekannt ist. –

Verwandte Themen