For AI agents: a documentation index is available at /llms.txt. Markdown versions of all pages
are available by appending .md to any URL.
Map events in Leaflet
This example shows how to handle events of both the Leaflet map and the L.maptiler.maptilerLayer map together with a vector tiles layer. Discover how to incorporate interactivity and responsiveness into your map applications.
NPM module setup
npm install --save @maptiler/leaflet-maptilersdk leaflet
import { MaptilerLayer, MapStyle } from '@maptiler/leaflet-maptilersdk';
import L from 'leaflet';
import 'leaflet/dist/leaflet.css';
const key = 'YOUR_MAPTILER_API_KEY_HERE';
const leafletMap = L.map('map').setView([38.912753, -77.032194], 4);
const mtLayer = new MaptilerLayer({
apiKey: key,
style: MapStyle.STREETS, // optional
interactive: true
}).addTo(leafletMap);
const maptilerMap = mtLayer.getMaptilerSDKMap();
// control that shows events info
const info = L.control();
info.onAdd = function (map) {
this._div = L.DomUtil.create('div', 'info');
this.events = {};
return this._div;
};
info.update = function (event) {
const currentevents = this.events;
this.events = {...currentevents, ...event};
this._div.innerHTML = `<div>Last <b>Leaflet</b> event: ${this.events.leaflet || ""}</div>
<div>Last <b>MapTiler SDK</b> event: ${this.events.sdk || ""}</div>
<div>Last <b>Vector layer</b> event: ${this.events.layer || ""}</div>
`;
};
info.addTo(leafletMap);
maptilerMap.on('load', () => {
info.update({sdk:'load'});
// let's see events on MapTiler SDK map
maptilerMap.on('mousemove', () => { info.update({sdk:'mousemove'}) });
maptilerMap.on('mouseenter', () => { info.update({sdk:'mouseenter'}) });
maptilerMap.on('mouseout', () => { info.update({sdk:'mouseout'}) });
maptilerMap.on('mouseleave', () => { info.update({sdk:'mouseleave'}) });
maptilerMap.on('mouseover', () => { info.update({sdk:'mouseover'}) });
// let's add some layer and fire events on it
maptilerMap.addSource('states', {
'type': 'geojson',
'data': 'https://docs.maptiler.com/sdk-js/assets/us_states.geojson'
});
maptilerMap.addLayer({
'id': 'state-fills',
'type': 'fill',
'source': 'states',
'layout': {},
'paint': {
'fill-color': '#627BC1',
'fill-opacity': ['case', ['boolean', ['feature-state', 'hover'], false], 1, 0.5 ]
}
});
maptilerMap.on('mouseenter', 'state-fills', (e) => {info.update({layer:'mouseenter'}) });
maptilerMap.on('mouseleave', 'state-fills', (e) => {info.update({layer:'mouseleave'}) });
});
// now let's see on leaflet map events
leafletMap.on('mousemove', () => { info.update({leaflet:'mousemove'}) });
leafletMap.on('mouseenter', () => { info.update({leaflet:'mouseenter'}) });
leafletMap.on('mouseout', () => { info.update({leaflet:'mouseout'}) });
leafletMap.on('mouseleave', () => { info.update({leaflet:'mouseleave'}) });
leafletMap.on('mouseover', () => { info.update({leaflet:'mouseover'}) });
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="robots" content="noindex">
<title>Map events in Leaflet | NPM example</title>
<link rel="stylesheet" href="./style.css">
</head>
<body>
<div id="map"></div>
<script type="module" src="./main.js"></script>
</body>
</html>
#map {position: absolute; top: 0; right: 0; bottom: 0; left: 0;}
Replace YOUR_MAPTILER_API_KEY_HERE with your own API key. Make sure to secure the key before you publish it.