Ich benutze Leaflet, um eine Karte zu rendern. Ich habe eine Karte mit Markierungen erstellt und weiß nicht, wie ich den Ereignis-Listener 'onClick' für jede Markierung implementieren soll.
Mein 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();
}
Beispiel
map.on('click', function(e) {
alert(e.latlng);
});
Die Broschüre behandelt Ereignis-Listener als Referenz. Wenn Sie also einen Listener hinzufügen und dann entfernen möchten, definieren Sie ihn als Funktion:
function onClick(e) { ... }
map.on('click', onClick);
map.off('click', onClick);
javascript
leaflet
ilias ioannou
quelle
quelle
Antworten:
Willkommen bei GIS Stack Exchange!
Es sollte keine besonderen Schwierigkeiten geben, einen Rückruf an das Klickereignis der Markierung (en) anzuhängen. Sie würden einfach so verwenden,
myMarker.on('click', callback)
wie Sie es mit der Karte getan haben. Sie müssten dies auch für jeden Marker tun, an den Sie einen Rückruf anhängen möchten.Eine andere Möglichkeit wäre, alle Ihre Markierungen in eine hinzufügen Feature Reihe (zB einfach Ihre instanziiert
markersLayer
mitL.featureGroup()
stattL.layerGroup()
), so dass Sie den Rückruf anhängen kann direkt an die Gruppe. Es werden die Klickereignisse von einzelnen Markierungen empfangen, und Sie können mit auf die einzelne angeklickte Funktion zugreifenevent.layer
.Demo: http://jsfiddle.net/ve2huzxw/74/
Ähnliche Fragen, die von jemand anderem im Leaflet-Forum gestellt wurden: https://groups.google.com/forum/#!topic/leaflet-js/RDTCHuLvMdw
quelle
event.layer.properties
Sie Zugriff auf das Array aller Eigenschaften (Metadaten) Ihrer Marker gemäß dem GeoJSON-Format. So können Sieevent.layer.properties.description = stops[i].Description
zum Beispiel zuweisen .Ändern Sie Ihre Kartenpopulationsschleife, um Ihrem Marker Eigenschaften zuzuweisen.
Um später im onclick-Ereignis auf diese Eigenschaften (so genannte Feature-Eigenschaften) zuzugreifen,
Der
properties.var
Ansatz hat den zusätzlichen Vorteil, dass Ihr Marker im Standard-GeoJson-Format vorliegt. Macht es kompatibel, wenn Sie beispielsweise die Daten als Shapefile exportieren, Markierungen aus Shapefile importieren usw. müssen.quelle
var oneMarker
- es ist ein lokaler Bereich innerhalb der for-Schleife, und die Zeile layer.addTo () fügt den Wert hinzu. (wie:a=3; array1.push[a];
wird3
dem Array einen Mehrwert hinzufügen , kein Verweis auf sicha
selbst.)Eine ziemlich einfache und einfache Möglichkeit, ein Array anklickbarer Markierungen in einem Faltblattkartenobjekt zu erstellen, besteht darin, die Klassenliste der erstellten Markierung zu bearbeiten, indem jeder Markierung ein benutzerdefinierter inkrementierter Klassenname hinzugefügt wird. Dann ist es einfach, einen Listener zu erstellen und zu wissen, auf welchen Marker geklickt wurde. Durch Überspringen des aktiven oder nicht aktiven Ereignisses verfügt jedes über ein abrufbares Klickereignis mit einer zuverlässigen ID.
quelle