UNPKG

svelte-maplibre-gl

Version:

Build interactive web maps effortlessly with MapLibre GL JS and Svelte

80 lines (79 loc) 2.35 kB
let layerIdCounter = 0; let sourceIdCounter = 0; export function generateLayerID() { return `svmlgl-layer-${layerIdCounter++}`; } export function generateSourceID() { return `svmlgl-source-${sourceIdCounter++}`; } /** * Set an event listener on an Evented object, and return a function that will remove the listener. * * Intended to be used within the $effect rune. */ export function resetEventListener(evented, type, listener) { if (listener) { evented?.on(type, listener); } const prevListener = listener; return () => { if (prevListener) { evented?.off(type, prevListener); } }; } /** * Set a Layer event listener on the Map object, and return a function that will remove the listener. * * Intended to be used within the $effect rune. */ export function resetLayerEventListener(map, type, layer, listener) { if (listener) { map?.on(type, layer, listener); } const prevListener = listener; return () => { if (prevListener) { map?.off(type, layer, prevListener); } }; } /** * Returns whichever object actually carries MapLibre's internal camera state, * so the same call sites work on both MapLibre 5.x and 6.x. See {@link MapCamera}. */ export function getCamera(map) { const m = map; return m._camera ?? m; } /** * Reads the pending "desired state" camera transform, bridging the 5.x * `_getTransformForUpdate()` / 6.x `getTransformForUpdate()` rename. */ export function getUpdateTransform(camera) { const resolve = camera.getTransformForUpdate ?? camera._getTransformForUpdate; if (!resolve) { throw new Error('svelte-maplibre-gl: neither getTransformForUpdate nor _getTransformForUpdate is available on the map camera'); } return resolve.call(camera); } export function setTransformCameraUpdate(map, value) { const m = map; if (m.setTransformCameraUpdate) { m.setTransformCameraUpdate(value); } else { getCamera(map).transformCameraUpdate = value; } } export function formatLngLat(target, lnglat) { if (Array.isArray(target)) { return [lnglat.lng, lnglat.lat]; } else if ('lon' in target) { return { lon: lnglat.lng, lat: lnglat.lat }; } else { return { lng: lnglat.lng, lat: lnglat.lat }; } }