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'}) });

Replace YOUR_MAPTILER_API_KEY_HERE with your own API key. Make sure to secure the key before you publish it.

Was this helpful?