Skip to content

Events

Event callbacks are the main way to keep your host application in sync with map state.

Subscribe with on and unsubscribe with off:

ts
map.on(eventName, handler);
map.off(eventName, handler);

Event summary

EventPayloadWhen it fires
readyvoidAfter map initialization completes
viewchangeViewStateWhen map movement settles
layerchangeLayer[]After layer updates (API or built-in UI)
basemapchange"basemap" | "satellite" | "hybrid" | "basemap-2.5d" | "hybrid-2.5d"After basemap switches

ready

Use this as your integration checkpoint.
Attach the callback immediately after construction and place map-dependent setup inside it.

ts
map.on("ready", () => {
  console.log("Map is interactive");
});

viewchange

This event provides normalized view state:

ts
type ViewState = {
  center: [number, number];
  bearing: number;
  zoom: number;
};

Example:

ts
map.on("viewchange", (view) => {
  // push into external state, analytics, or 3D sync layer
  console.log(view.center, view.zoom, view.bearing);
});

layerchange

Fires after any layer mutation, including:

  • visibility toggles
  • opacity changes
  • order changes
  • layer add/remove actions
ts
map.on("layerchange", (layers) => {
  // update host-side layer UI
  console.log("Current layers:", layers);
});

basemapchange

Use this to keep host UI controls in sync.

ts
map.on("basemapchange", (basemap) => {
  console.log("Active basemap:", basemap);
});

Define stable named handlers when you need clean teardown:

ts
function handleViewChange(view: { center: [number, number]; bearing: number; zoom: number }) {
  // ...
}

map.on("viewchange", handleViewChange);
// later
map.off("viewchange", handleViewChange);