svelte-maplibre-gl
Version:
Build interactive web maps effortlessly with MapLibre GL JS and Svelte
53 lines (52 loc) • 1.43 kB
JavaScript
import maplibregl from 'maplibre-gl';
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);
}
};
}
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 };
}
}