2010-03-18 13 views
144

J'utilise l'API Google Maps pour construire une carte pleine de marqueurs, mais je veux qu'un marqueur se démarque des autres. La chose la plus simple à faire, je pense, serait de changer la couleur du marqueur en bleu, au lieu de rouge. Est-ce une chose simple à faire ou dois-je créer une toute nouvelle icône en quelque sorte? Si je dois créer une nouvelle icône, quelle est la manière la plus simple de le faire?Comment changer la couleur d'un marqueur Google Maps?

+2

Vous pouvez vérifier ce post d'hier: http://stackoverflow.com/questions/2467720/how-to-change-color-of-marker-in-google-map –

+0

ou peut-être un meilleur poste http: //stackoverflow.com/questions/7095574/google-maps-api-3-custom-marker-color-for-default-dot-marker – Faizan

Répondre

39

Depuis cartes v2 est désapprouvées, vous êtes probablement intéressé par cartes v3: https://developers.google.com/maps/documentation/javascript/markers#simple_icons

Pour les cartes v2:

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

Vous auriez un ensemble de logique faire toutes les broches « ordinaires » , et un autre qui fait les broches 'spéciales' en utilisant le nouveau marqueur défini.

+23

Note aux futurs lecteurs: Ceci est pour l'API Google Maps v2 qui est obsolète. Si vous utilisez la version 3, vous devez chercher ailleurs. – priestc

48

MapIconMaker: une bibliothèque pour Google Maps v2

Une façon est d'utiliser le MapIconMaker. Il y a un exemple here. icônes par défaut Google Maps sont la largeur 20px et la hauteur 34px, vous pouvez donc utiliser quelque chose comme ceci à imiter:

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

Vous pouvez même l'envelopper dans une fonction pour rendre les choses encore plus facile sur vous-même:

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

C'est ce que j'utilise personnellement pour tous les marqueurs que je crée. Je préfère avoir la possibilité de changer les couleurs d'un caprice.

Mise à jour: La couleur Hex de l'icône par défaut est "# FE7569". En outre, vous pouvez définir une image sur un marqueur plutôt que de créer un nouveau marqueur avec une nouvelle icône. Donc, si vous voulez une fonction de mettre en évidence, vous pouvez aller avec quelque chose comme cela, en utilisant la fonction ci-dessus:

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

StyledMarker: une bibliothèque pour Google Maps v3

Depuis V2 a été remplacé par V3 il y a quelque temps que je pensais Je devrais mettre à jour cette réponse. J'ai créé une bibliothèque pour les marqueurs personnalisés que vous pouvez trouver dans la bibliothèque d'utilitaires V3 here. Il permet de différentes couleurs et formes, et vous pouvez également placer du texte sur le marqueur. Il fonctionne en utilisant l'API Google Maps, qui propose des méthodes pour créer des marqueurs de type Google Maps. N'hésitez pas à regarder le code source si vous préférez utiliser directement l'API Google Charts. La chose à propos de cette bibliothèque, cependant, est qu'elle prend soin de définir les régions cliquables de ces images de marqueur pour vous, ainsi, par exemple, la plus longue bulle de texte aura les régions cliquables que l'on attend, comme this example.

+3

Il semble que ce soit seulement compatible avec GMaps API v2? – Tigraine

+6

@Tigraine J'ai en fait créé une bibliothèque entièrement nouvelle à utiliser pour la v3 appelée "StyledMarker" qui se trouve dans la v3 Utility Library: http://code.google.com/p/google-maps-utility-library-v3/ wiki/Bibliothèques – Bob

+0

regardez la réponse de Sean McMains pour v3 – smp7d

106

Avec la version 3 de l'API Google Maps, la meilleure façon de faire peut-être en saisissant un jeu d'icônes personnalisé, comme celui que Benjamin Keen a créé ici:

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

Si vous mettez toutes ces icônes au même endroit que votre page de la carte, vous pouvez coloriser un marqueur simplement en utilisant l'option d'icône appropriée lors de sa création:

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

C'est très facile, et est l'approche que je utilise pour le projet je travaille actuellement.

+5

Cette réponse est géniale. J'étais triste que la réponse acceptée est pour V2, mais heureusement, le défilement a payé. Merci! –

9

Le j'ai trouvé moyen le plus simple est d'utiliser BitmapDescriptorFactory.defaultMarker() le documentation a même un exemple de définir la couleur. De mon propre code:

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

Vous n'avez besoin d'aucune bibliothèque personnalisée pour 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 
     }); 

de Matt Burns Cela fonctionne comme l'OCT 2014, mais est dépréciée.

+2

Cette fonctionnalité est malheureusement obsolète [comme vous pouvez le voir ici] (https://developers.google.com/chart/infographics/). C'est une situation tellement décevante, où cela est déprécié et la version précédente que j'ai utilisée, 'MapIconMaker', a déjà été dépréciée. – zerowords

+0

Notez que cela ne fonctionne pas avec https, seulement http. Bummer! – JoeGalind

+0

@JoeGalind existe-t-il une raison pour laquelle le cryptage est requis lors de l'extraction des couleurs? Je ne vois aucun risque pour la sécurité d'utiliser 'http' à moins d'exposer quelque chose que je ne connais pas dans l'en-tête –

Questions connexes