J'utilise Leaflet pour rendre une carte. J'ai créé une carte avec des marqueurs et je ne sais pas comment implémenter le Listener d'événements 'onClick' sur chaque marqueur.
Mon code
var stops = JSON.parse(json);
var map = new L.Map('map', {
zoom: 12,
minZoom: 12,
center: L.latLng(41.11714, 16.87187)
});
map.addLayer(L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token={accessToken}', {
attribution: 'Map data',
maxZoom: 18,
id: 'mapbox.streets',
accessToken: '-----'
}));
var markersLayer = new L.LayerGroup();
map.addLayer(markersLayer);
//populate map from stops
for (var i in stops) {
L.marker(L.latLng(stops[i].Position.Lat, stops[i].Position.Lon), {
title: stops[i].Description
}).addTo(markersLayer).bindPopup("<b>" + stops[i].Description + "</b>").openPopup();
}
Exemple
map.on('click', function(e) {
alert(e.latlng);
});
La brochure traite des écouteurs d'événements par référence, donc si vous voulez ajouter un écouteur puis le supprimer, définissez-le comme une fonction:
function onClick(e) { ... }
map.on('click', onClick);
map.off('click', onClick);
javascript
leaflet
ilias ioannou
la source
la source
Réponses:
Bienvenue sur GIS Stack Exchange!
Il ne devrait pas y avoir de difficulté particulière à attacher un rappel à un événement de clic de marqueur (s). Vous utiliseriez simplement
myMarker.on('click', callback)
comme vous l'avez fait avec la carte. Vous devrez également le faire pour chaque marqueur auquel vous souhaitez attacher un rappel.Une autre possibilité serait d'ajouter tous vos marqueurs dans un groupe d'entités (par exemple, instanciez simplement votre
markersLayer
avecL.featureGroup()
au lieu deL.layerGroup()
), afin de pouvoir attacher le rappel directement à ce groupe. Il recevra les événements de clic des marqueurs individuels et vous pouvez accéder à la fonction cliquée individuelle à l'aide deevent.layer
.Démo: http://jsfiddle.net/ve2huzxw/74/
Question similaire posée par quelqu'un d'autre sur le forum Leaflet: https://groups.google.com/forum/#!topic/leaflet-js/RDTCHuLvMdw
la source
event.layer.properties
vous aurez accès au tableau de toutes les propriétés (métadonnées) de vos marqueurs, selon le format GeoJSON. Vous pouvez donc assignerevent.layer.properties.description = stops[i].Description
par exemple.Modifiez la boucle de population de votre carte pour attribuer des propriétés à votre marqueur.
Plus tard, pour accéder à ces propriétés (propriétés de fonction comme on les appelle) dans l'événement onclick,
L'
properties.var
approche a l'avantage supplémentaire de rendre votre marqueur au format GeoJson standard. Le rend compatible si, par exemple, vous devez exporter les données sous forme de fichier de formes, importer des marqueurs à partir de fichiers de formes, etc.la source
var oneMarker
- c'est une portée locale dans la boucle for, et la ligne layer.addTo () ajoute de la valeur. (comme:a=3; array1.push[a];
va ajouter de la valeur3
au tableau, pas une référence àa
lui-même.)Un moyen assez simple et facile de créer un tableau de marqueurs cliquables dans un objet de carte de dépliant consiste à manipuler la liste des classes du marqueur créé en ajoutant un nom de classe incrémenté personnalisé à chaque marqueur. Il est ensuite facile de créer un écouteur et de savoir quel marqueur a été cliqué. En sautant l'actif ou non, chacun a un événement de clic récupérable avec un ID fiable.
la source