J'ai réussi à utiliser et à appliquer mon propre marqueur sur Google Map comme ci-dessous.
var marker = new google.maps.Marker({
position: point,
map: map,
icon: pIcon,
optimized:false
});
Je voudrais ajouter un fond de coin rond comme ci-dessous css
#orangeIcon {
width: 50px;
height: 50px;
overflow: hidden;
border-top-left-radius:5px 5px;
border-top-right-radius:5px 5px;
border-bottom-left-radius:5px 5px;
border-bottom-right-radius:5px 5px;
-moz-box-shadow: 0 1px 3px #FFBF00;
-webkit-box-shadow: 0 1px 3px #FFBF00;
background-color: #FFBF00;
position: relative;
border: 5px solid #FFBF00;
}
comment y parvenir pour google map?
Depuis la version 3.17, les objets google.maps.Marker existent dans le volet markerLayer
, qui n'est qu'un nom de fantaisie pour un div.
Pour obtenir une référence à markerLayer, vous devez créer un objet OverlayView. Maintenant, cet objet est un peu abstrait. Vous devez implémenter une fonction draw pour que cela fonctionne. Par exemple, ouvrez le exemple de base dans un nouvel onglet et collez-le dans la console.
var overlay = new google.maps.OverlayView();
overlay.draw=function() {};
overlay.setMap(map);
overlay.getPanes();
il retourne:
{
floatPane: div
floatShadow: div
mapPane: div
markerLayer: div
overlayImage: div
overlayLayer: div
overlayMouseTarget: div
overlayShadow: div
}
Thay markerLayer est un div qui contient les marqueurs. Si je crée votre marqueur en utilisant une image d'icône donnée,
var marker = new google.maps.Marker({
position: map.getCenter(),
map: map,
icon: 'http://ruralshores.com/assets/marker-icon.png',
optimized:false
});
Mon marqueur sera:
Où le div sélectionné (celui avec z-index 103) est le markerLayer.
Si vous souhaitez accéder au marqueur par couche, vous pouvez lui ajouter une classe "markerLayer" après avoir obtenu sa référence avec la méthode getPanes
. Je suppose que chaque image de la couche marqueur est un marqueur, vous pouvez donc la nommer à votre guise.
TL/DR : vous pouvez le nommer, à condition que vous ayez eu la peine de trouver la référence DOM à votre marqueur.
Lorsque vous connaissez l'URL de l'image utilisée pour le marqueur, vous savez comment y accéder via CSS: utilisez un sélecteur d'attribut.
Créons un marqueur de cercle basé sur votre avatar avec une bordure noire de 1px:
Configuration du marqueur:
icon:{
url: 'https://www.gravatar.com/avatar/0a9745ea7ac5c90d7acadb02ab1020cd?s=32&d=identicon&r=PG&f=1',
//the size of the image is 32x32,
//when you want to add a border you must add 2*borderWidth to the size
size:new google.maps.Size(34,34)},
//define the shape
shape:{coords:[17,17,18],type:'circle'},
//set optimized to false otherwise the marker will be rendered via canvas
//and is not accessible via CSS
optimized:false
}
le CSS:
img[src="https://www.gravatar.com/avatar/0a9745ea7ac5c90d7acadb02ab1020cd?s=32&d=identicon&r=PG&f=1"]{
border-radius:16px;
border:1px solid #000 !important;
}
....terminé.
Démo: http://jsfiddle.net/doktormolle/5raf237u/
Lorsque vous utilisez une ombre, utilisez une taille plus grande (en fonction de la taille de l’ombre):
Bonjour, j’essaie toutes ces réponses, mais personne ne travaille comme je le veux
var map;
function initialize() {
var mapOptions = {
zoom: 9,
center: new google.maps.LatLng(40.6, -74)
};
map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
// I create 3 markers using http://ruralshores.com/assets/marker-icon.png as icon
var myIcon='http://ruralshores.com/assets/marker-icon.png';
var marker1 = new google.maps.Marker({ position: {lat:40.8, lng:-74}, map: map, icon: myIcon, optimized:false });
var marker2 = new google.maps.Marker({ position: {lat:40.6, lng:-74.5}, map: map, icon: myIcon , optimized:false });
var marker3 = new google.maps.Marker({ position: {lat:40.5, lng:-74.3}, map: map, icon: myIcon , optimized:false });
// I create an OverlayView, and set it to add the "markerLayer" class to the markerLayer DIV
var myoverlay = new google.maps.OverlayView();
myoverlay.draw = function () {
this.getPanes().markerLayer.id='markerLayer';
};
myoverlay.setMap(map);
}
google.maps.event.addDomListener(window, 'load', initialize);
et maintenant ajouter somme CSS
#markerLayer img {
border: 2px solid red !important;
width: 85% !important;
height: 90% !important;
border-radius: 5px;
}
Le tutoriel complet est elle
comme mentionné ci-dessus, j'ai utilisé OverlayView
var AvatarMarker = function(latlng,avatarUrl,map,id){
this.latlng = latlng;
this.avatarUrl = avatarUrl;
this.setMap(map);
this.id= id;
};
AvatarMarker.prototype = new google.maps.OverlayView();
AvatarMarker.prototype.onAdd= function(){
var img = document.createElement("img"),me=this;
img.style.width="30px";
img.style.height="30px";
img.style.position="absolute";
img.style.webkitBorderRadius="50%";
img.style.borderRadius="50%";
img.style.zIndex="999";
img.src=me.avatarUrl;
this.getPanes().overlayMouseTarget.appendChild(img);
me.img= img;
img.onclick = function(){
google.maps.event.trigger(me,"click",{id:me.id});
}
};
AvatarMarker.prototype.draw = function(){
this.setLatLng(this.latlng);
}
AvatarMarker.prototype.onRemove = function(){
this.img.parentNode.removeChild(this.img);
this.img = null;
}
AvatarMarker.prototype.setLatLng = function(latlng){
if(!this.getProjection()) return ;
var overlayProjection = this.getProjection(),
xy=overlayProjection.fromLatLngToDivPixel(latlng);
this.img && (this.img.style.left=(xy.x-15)+'px');
this.img && (this.img.style.top=(xy.y-15)+'px');
google.maps.event.trigger(this,"draw");
}
AvatarMarker.prototype.getLatLng = function(){return this.latlng;}
et le document associé est ici: customoverlays