isard 0.5.1 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/map.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"map.js","sourceRoot":"","sources":["../src/map.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The map: canvas, camera, layers, events, overlays, credits and the frame loop. Frames are drawn on demand only: an\n * idle map costs nothing. Hover events are coalesced to one per frame, so the values computed for a mouse position are\n * drawn in the same frame. The engine's loading is in engine-loader.ts, its settings from the options in settings.ts,\n * the camera animations in animation.ts.\n */\nimport { easeTo, flyTo, type Step } from './animation.ts';\nimport { BASEMAPS, basemapName, HILLSHADE, SEA } from './basemaps.ts';\nimport { AttributionControl, type Control, type ControlPosition } from './controls.ts';\nimport {\n destroyedEngine,\n type EngineClass,\n engineUrl,\n loadEngine,\n loadFullEngineLater,\n preloadFullEngine,\n startTileLoader,\n} from './engine-loader.ts';\nimport { ExtrusionLayer, type ExtrusionOptions, extrusionStyle } from './extrusions.ts';\nimport {\n CircleLayer,\n type CircleOptions,\n circleStyle,\n type Feature,\n FillLayer,\n type FillOptions,\n fillStyle,\n LineLayer,\n type LineOptions,\n lineStyle,\n} from './features.ts';\nimport { Glyphs } from './glyphs.ts';\nimport { equirectangularGrid, gridLoader, gridZooms, type RemoteReprojection, resolveGrid } from './grid.ts';\nimport { Icons, type ImageOptions, type Pixels, readPixels } from './icons.ts';\nimport { Interaction } from './interaction.ts';\nimport {\n CustomLayer,\n type CustomLayerInterface,\n GroundLayer,\n type GroundOptions,\n type Layer,\n ModelLayer,\n type ModelOptions,\n NetworkLayer,\n RasterLayer,\n Tiles3dLayer,\n} from './layers.ts';\nimport type { TileLoader } from './loader.ts';\nimport type { Positioned } from './overlay.ts';\nimport { PointCloudLayer, type PointCloudOptions } from './pointclouds.ts';\nimport {\n atmosphereSettings,\n bodySettings,\n haloSettings,\n rgb,\n type Settings,\n type TerrainLoader,\n terrainSettings,\n} from './settings.ts';\nimport { injectStyle } from './style.ts';\nimport { SymbolLayer, type SymbolOptions, symbolStyle } from './symbols.ts';\nimport { encodedTerrainLoader, type PngEncoding, type RemoteHeights } from './terrain.ts';\nimport type {\n AnimationOptions,\n AtmosphereOptions,\n Basemap,\n BasemapName,\n CelestialBody,\n FeatureHit,\n FlyToOptions,\n GeoMapOptions,\n LoadingMode,\n LonLat,\n MapEvents,\n NetworkOptions,\n Point,\n Projection,\n RasterOptions,\n TerrainModel,\n TerrainOptions,\n Tiles3dOptions,\n} from './types.ts';\nimport {\n BasemapWorkers,\n defaultWorkerCount,\n defaultWorkerUrl,\n VECTOR_BASEMAPS,\n VectorTiles,\n type VectorTilesOptions,\n} from './vectortiles.ts';\nimport type { Camera, Engine, PickHit, PickResult, RasterLayerStats } from './wasm/isard.js';\n\n/** Reports an error without throwing it here: the console shows it, as an uncaught one */\nfunction report(error: unknown): void {\n if (typeof reportError === 'function') reportError(error);\n else\n queueMicrotask(() => {\n throw error;\n });\n}\n\ntype Listeners = { [K in keyof MapEvents]: Set<(event: MapEvents[K]) => void> };\n\n/** Checks a network's arrays before the engine reads them: node index pairs, indices of existing nodes */\nfunction validateNetwork(nodes: Float64Array, edges: Uint32Array): void {\n if (nodes.length % 2 !== 0) throw new Error(`isard: network nodes must be lon, lat pairs (length ${nodes.length})`);\n if (edges.length % 2 !== 0) throw new Error(`isard: network edges must be node index pairs (length ${edges.length})`);\n const count = nodes.length / 2;\n for (let i = 0; i < edges.length; i += 1) {\n const node = edges[i] as number;\n if (node >= count) throw new Error(`isard: network edge ${i >> 1} refers to node ${node}, of ${count} nodes`);\n }\n}\n\nconst CORNERS: readonly ControlPosition[] = ['top-left', 'top-right', 'bottom-left', 'bottom-right'];\n\n/** Frames the hover picking waits for its answer at most (usually one) */\nconst MAX_POLLS = 30;\n\n/** The name of a basemap, checked: an unknown one throws */\nfunction checkBasemap(basemap: Basemap): BasemapName {\n const name = basemapName(basemap);\n if (name !== 'none' && !(name in VECTOR_BASEMAPS) && !(name in BASEMAPS)) {\n throw new Error(`isard: unknown basemap '${basemap}'`);\n }\n return name;\n}\n\n/** A map (see `GeoMap.create`); layers take it as their host */\nexport class GeoMap {\n readonly canvas: HTMLCanvasElement;\n #glyphs: Glyphs | undefined;\n #icons: Icons | undefined;\n /** Layers new layers go under */\n private readonly onTop = new Set<Layer>();\n /** The vector basemap, if any: its tiles' workers and its labels */\n private vector: { tiles: VectorTiles; labels: SymbolLayer<unknown> } | undefined;\n private readonly glyphsUrl: string | undefined;\n private readonly basemapWorkerUrl: string | URL | undefined;\n /** Texture size of the vector basemap's tiles */\n private readonly basemapTileSize: number | undefined;\n private readonly container: HTMLElement;\n /** Markers and popups, over the canvas */\n private readonly overlay: HTMLDivElement;\n private readonly corners: Record<ControlPosition, HTMLDivElement>;\n private readonly controls = new Map<Control, HTMLElement>();\n private readonly positioned = new Set<Positioned>();\n /** Canvas size in CSS pixels, kept on resize so placing overlays never reads the layout */\n private size: Point = [0, 0];\n #engine: Engine;\n /** Layers in drawing order (bottom first), to recreate them after a context loss */\n private readonly layers: Layer[] = [];\n private readonly settings: Settings;\n /** The WebGL context is lost: nothing is drawn until it is restored */\n private lost = false;\n private readonly listeners: Listeners = {\n movestart: new Set(),\n move: new Set(),\n moveend: new Set(),\n resize: new Set(),\n hover: new Set(),\n hoverfeature: new Set(),\n click: new Set(),\n render: new Set(),\n idle: new Set(),\n leave: new Set(),\n };\n private readonly resizeObserver: ResizeObserver;\n private readonly interaction: Interaction | undefined;\n private loader: TileLoader | undefined;\n /** The class of the engine: without 3D Tiles until a 3D Tiles layer is added, unless asked for from the start */\n private engineClass: EngineClass;\n /** The module of the engine with 3D Tiles once it runs this map (the decoding workers run it too) */\n private tiles3dModule: WebAssembly.Module | undefined;\n /** The engine with 3D Tiles is loading, for the 3D Tiles layers added on the core engine */\n private upgrading: Promise<void> | undefined;\n /** What loading the engine with 3D Tiles and its workers needs */\n private readonly tiles3dOptions: Pick<\n GeoMapOptions,\n 'wasmUrl' | 'workers' | 'workerUrl' | 'decoders' | 'pointsWasmUrl'\n >;\n private gone = false;\n /** The map is of the Earth: a basemap by default */\n private readonly earth: boolean;\n /** The body, as the option named it */\n private readonly body: CelestialBody | undefined;\n private basemap: RasterLayer | undefined;\n private hillshade: RasterLayer | undefined;\n /** Called when the credits of the layers or relief change (the attribution controls) */\n private readonly attributionListeners = new Set<() => void>();\n /** Credits of the raster layers that have some (basemaps, hillshade, the Géoplateforme's rasters…) */\n private readonly rasterCredits = new Map<object, string>();\n private animation: Step | undefined;\n private hoverPoint: Point | undefined;\n /** Frame polling the engine for the answer of the hover picking, 0 if none */\n private hoverPoll = 0;\n /** Polls of the hover picking under way: given up after `MAX_POLLS` (an answer that never comes) */\n private hoverPolls = 0;\n /** What 'hoverfeature' looks for: within `radius` CSS pixels, in `layers` only if given */\n hoverPicking: { radius?: number; layers?: readonly Layer[] } = {};\n private frameRequest = 0;\n private lastCamera = '';\n /** The camera moved since the last 'moveend' */\n private moving = false;\n /** The last frame found everything loaded ('idle' sent) */\n private settled = false;\n private inFrame = false;\n /** The camera of the frame being drawn: what `getCamera` gives the custom layers while the engine is busy */\n private frameCamera: Camera | undefined;\n /** Vector tiles made by `vectorTiles()`, destroyed with the map */\n private readonly vectorSets = new Set<VectorTiles>();\n /** The workers drawing vector tiles, shared by every `VectorTiles` of the map; created on first use */\n private basemapPool: BasemapWorkers | undefined;\n /** Stops watching the device pixel ratio */\n private unwatchRatio: (() => void) | undefined;\n /** Stops listening to the canvas's context loss and restoration */\n private readonly unwatchContext: () => void;\n\n /** The loaders of the relief by encoding, URL and floor: the same loader for the same tiles (the engine keeps its\n * tiles when only the exaggeration changes) */\n private readonly terrainLoaders = new Map<string, TerrainLoader>();\n\n /** Loads the engine (once per page) and creates a map filling `container` */\n static async create(container: HTMLElement, options: GeoMapOptions = {}): Promise<GeoMap> {\n // With 3D Tiles from the start when asked, or when only that engine's URL is given (as before the core engine)\n const full = options.tiles3d === true || (options.wasmUrl !== undefined && options.coreWasmUrl === undefined);\n // Before anything is created\n if (options.basemap !== undefined) checkBasemap(options.basemap);\n const kind = full ? 'full' : 'core';\n const bindings = await loadEngine(kind, engineUrl(kind, options));\n const map = new GeoMap(container, options, bindings.Engine, full ? bindings.module : undefined);\n if (options.tiles3d === 'preload' && !full) map.preloadTiles3d();\n return map;\n }\n\n private constructor(\n container: HTMLElement,\n options: GeoMapOptions,\n engineClass: EngineClass,\n tiles3dModule: WebAssembly.Module | undefined,\n ) {\n this.engineClass = engineClass;\n this.tiles3dModule = tiles3dModule;\n this.tiles3dOptions = { ...options };\n this.glyphsUrl = options.glyphs;\n this.basemapWorkerUrl = options.basemapWorkerUrl;\n this.basemapTileSize = options.basemapTileSize;\n this.container = container;\n this.canvas = document.createElement('canvas');\n Object.assign(this.canvas.style, { display: 'block', width: '100%', height: '100%', touchAction: 'none' });\n // Overlays and controls are positioned against the container\n injectStyle(container.ownerDocument);\n if (getComputedStyle(container).position === 'static') container.style.position = 'relative';\n container.classList.add('isard-map');\n this.overlay = document.createElement('div');\n this.overlay.className = 'isard-overlay';\n const corner = (position: ControlPosition) => {\n const element = document.createElement('div');\n element.className = `isard-ctrl-${position}`;\n return element;\n };\n this.corners = {\n 'top-left': corner('top-left'),\n 'top-right': corner('top-right'),\n 'bottom-left': corner('bottom-left'),\n 'bottom-right': corner('bottom-right'),\n };\n container.append(this.canvas, this.overlay, ...CORNERS.map((position) => this.corners[position]));\n this.earth = (options.body ?? 'earth') === 'earth';\n this.body = options.body;\n const body = bodySettings(options.body);\n this.settings = {\n body,\n zoomRange: [options.minZoom ?? 0, options.maxZoom ?? 22],\n maxPitch: options.maxPitch ?? 70,\n globe: (options.projection ?? 'globe') === 'globe',\n sky: options.sky ?? true,\n atmosphere: atmosphereSettings(options.atmosphere),\n terrain: terrainSettings(options.terrain, options.body, body.radius, this.terrainLoader),\n loading: options.loading ?? 'immediate',\n background: rgb(options.background ?? (this.earth ? '#f2f2f0' : '#000000')),\n globeColor: this.earth ? SEA['osm-positron'] : rgb(body.color),\n };\n this.#engine = this.createEngine();\n // The browser may take the GPU away (driver reset, background tab on mobile): the map waits, then rebuilds\n const lost = (event: Event) => {\n event.preventDefault();\n this.lost = true;\n cancelAnimationFrame(this.frameRequest);\n this.frameRequest = 0;\n };\n const restored = () => this.restore();\n this.canvas.addEventListener('webglcontextlost', lost);\n this.canvas.addEventListener('webglcontextrestored', restored);\n this.unwatchContext = () => {\n this.canvas.removeEventListener('webglcontextlost', lost);\n this.canvas.removeEventListener('webglcontextrestored', restored);\n };\n const start: Camera = this.earth\n ? { center: [2.4246, 48.8457], zoom: 13, pitch: 0, bearing: 0 }\n : { center: [0, 0], zoom: 2, pitch: 0, bearing: 0 };\n this.setCamera({ ...start, ...options });\n this.setBasemap(options.basemap ?? (this.earth ? 'osm-positron' : 'none'), options.hillshade ?? 0);\n this.resizeObserver = new ResizeObserver(() => this.resize());\n this.resizeObserver.observe(container);\n this.watchRatio();\n this.resize();\n const interactive = options.interactive ?? true;\n const keyboard = interactive && (options.keyboard ?? true);\n this.interaction = interactive ? new Interaction(this, { keyboard }) : undefined;\n // Reached with Tab when the keys move it; named for screen readers either way\n this.canvas.classList.add('isard-canvas');\n this.canvas.setAttribute('role', keyboard ? 'application' : 'region');\n this.canvas.setAttribute('aria-roledescription', 'map');\n this.canvas.setAttribute('aria-label', options.ariaLabel ?? 'Map');\n if (keyboard) this.canvas.tabIndex = 0;\n const attribution = options.attributionControl ?? true;\n if (attribution !== false) {\n this.addControl(new AttributionControl(attribution === true ? {} : attribution), 'bottom-right');\n }\n }\n\n /** The element the map was created in */\n getContainer(): HTMLElement {\n return this.container;\n }\n\n getCanvas(): HTMLCanvasElement {\n return this.canvas;\n }\n\n /** @internal The engine (replaced after a context loss) */\n get engine(): Engine {\n return this.#engine;\n }\n\n private createEngine(): Engine {\n const engine = new this.engineClass(this.canvas, () => this.requestRender());\n // The body first: the layers' shaders may take its size\n const { radius, flattening, atmosphere: air, relief } = this.settings.body;\n engine.setBody(radius, flattening, haloSettings(air), ...relief);\n const { zoomRange, maxPitch, globe, sky, atmosphere, terrain, loading, background, globeColor } = this.settings;\n engine.setZoomRange(...zoomRange);\n engine.setMaxPitch(maxPitch);\n engine.setGlobe(globe);\n engine.setSky(sky);\n engine.setAtmosphere(atmosphere);\n engine.setTerrain(terrain?.url, terrain?.exaggeration ?? 1, terrain?.maxZoom, terrain?.geoid, terrain?.loader);\n engine.setImmediateLoading(loading === 'immediate');\n engine.setBackground(...background);\n engine.setGlobeColor(...globeColor);\n this.loader ??= this.startLoader(engine);\n if (this.loader) engine.setTileLoader(this.loader);\n return engine;\n }\n\n /** The decoding workers of 3D Tiles, with the engine that has them (they run its module) and unless turned off */\n private startLoader(engine: Engine): TileLoader | undefined {\n return this.tiles3dModule && startTileLoader(this.tiles3dModule, this.tiles3dOptions, engine);\n }\n\n /** A 3D Tiles layer or a model on the core engine: loads the engine with 3D Tiles, then rebuilds the map on it\n * (camera, settings and layers kept, as after a context loss); the layer is created then */\n private upgrade(): void {\n this.upgrading ??= loadFullEngineLater(engineUrl('full', this.tiles3dOptions)).then(\n ({ module, Engine }) => {\n this.upgrading = undefined;\n if (this.gone) return;\n this.engineClass = Engine;\n this.tiles3dModule = module;\n // A lost context: the engine is rebuilt on it once restored\n if (!this.lost) this.restore();\n },\n (error: unknown) => {\n // The 3D Tiles layers stay empty; the next one added tries again\n this.upgrading = undefined;\n if (this.gone) return;\n report(error);\n this.requestRender();\n },\n );\n }\n\n /** Downloads and compiles the engine with 3D Tiles once the map is idle (`tiles3d: 'preload'`), without running\n * it: the first 3D Tiles layer then only instantiates it */\n private preloadTiles3d(): void {\n const url = engineUrl('full', this.tiles3dOptions);\n const later = () => preloadFullEngine(url, () => !this.gone && !this.tiles3dModule);\n if (this.settled) later();\n else {\n const off = this.on('idle', () => {\n off();\n later();\n });\n }\n }\n\n /** After a context loss: a new engine with the same camera, settings and layers (same handles, same order) */\n private restore(): void {\n if (this.gone) return;\n this.cancelHoverPick();\n const camera = this.getCamera();\n this.#engine.free();\n this.#engine = this.createEngine();\n this.lost = false;\n this.setCamera(camera);\n this.#glyphs?.attach(this.#engine);\n this.#icons?.attach(this.#engine);\n const engine = this.#engine;\n // No layer refers to an id of the old engine while the others are created\n for (const layer of this.layers) layer.forgetEngine();\n for (const layer of this.layers) {\n // Still waiting for the engine with 3D Tiles (loading, or failed): created with it\n if (layer.needsFullEngine && !this.tiles3dModule) continue;\n // A layer that fails is reported and left out; the others are created\n try {\n layer.attach(engine);\n } catch (error) {\n report(error);\n }\n }\n // Links between layers, once every layer has its new id (buildings colored by a network above them)\n for (const layer of this.layers) {\n if (layer.id < 0) continue;\n try {\n layer.relink(engine);\n } catch (error) {\n report(error);\n }\n }\n this.resize();\n }\n\n /** @internal Forgets a removed layer */\n detach(layer: object): void {\n this.unlist(layer);\n this.onTop.delete(layer as Layer);\n if (this.rasterCredits.delete(layer)) this.attributionChanged();\n }\n\n /** @internal The layer is on the map */\n hasLayer(layer: object): boolean {\n return !this.gone && this.layers.includes(layer as Layer);\n }\n\n /** Takes a layer out of the drawing order (to put it back elsewhere, or for good) */\n private unlist(layer: object): void {\n const index = this.layers.indexOf(layer as Layer);\n if (index >= 0) this.layers.splice(index, 1);\n }\n\n private add<L extends Layer>(layer: L): L {\n // On the core engine, a 3D Tiles layer or a model waits for the engine with 3D Tiles: it is created with the\n // others on it\n if (layer.needsFullEngine && !this.tiles3dModule) this.upgrade();\n else layer.attach(this.engine);\n this.layers.push(layer);\n // Under the layers kept on top (the basemap's labels)\n const top = this.layers.find((l) => this.onTop.has(l) && l !== layer);\n if (top) this.moveLayer(layer, top);\n this.requestRender();\n return layer;\n }\n\n /** @internal Keeps a layer above the layers added after it (they go under it), as the labels of a basemap */\n keepOnTop(layer: Layer): void {\n this.onTop.add(layer);\n }\n\n /** @internal Moves a layer under `before`, or on top of all */\n moveLayer(layer: object, before: object | undefined): void {\n const handle = layer as Layer;\n this.unlist(handle);\n const index = before ? this.layers.indexOf(before as Layer) : -1;\n const at = index < 0 ? this.layers.length : index;\n this.layers.splice(at, 0, handle);\n if (handle.id >= 0) this.engine.moveLayer(handle.id, this.engineIndex(at));\n this.requestRender();\n }\n\n /** @internal See `LayerHost.replaceLayer` */\n replaceLayer(layer: object, old: number): void {\n this.engine.removeLayer(old);\n const index = this.layers.indexOf(layer as Layer);\n if (index >= 0) this.engine.moveLayer((layer as Layer).id, this.engineIndex(index));\n }\n\n /** Index in the engine of the layer at `index`: the layers waiting for the engine with 3D Tiles are not in it yet */\n private engineIndex(index: number): number {\n let count = 0;\n for (let i = 0; i < index; i += 1) if ((this.layers[i]?.id ?? -1) >= 0) count += 1;\n return count;\n }\n\n /** Moves a layer under all the others */\n private toBottom(layer: Layer): void {\n this.engine.moveLayer(layer.id, 0);\n this.unlist(layer);\n this.layers.unshift(layer);\n }\n\n // ── Events ──\n\n /** Listens to an event; returns the function that stops listening */\n on<K extends keyof MapEvents>(type: K, listener: (event: MapEvents[K]) => void): () => void {\n const listeners: Set<(event: MapEvents[K]) => void> = this.listeners[type];\n listeners.add(listener);\n return () => listeners.delete(listener);\n }\n\n /** @internal Calls the listeners; one that throws is reported and does not stop the others nor the frame */\n emit<K extends keyof MapEvents>(type: K, event: MapEvents[K]): void {\n const listeners: Set<(event: MapEvents[K]) => void> = this.listeners[type];\n for (const listener of listeners) {\n try {\n listener(event);\n } catch (error) {\n report(error);\n }\n }\n }\n\n // ── Camera ──\n\n getCamera(): Camera {\n return this.frameCamera ?? this.engine.camera();\n }\n\n setCamera(camera: Partial<Camera>): void {\n const c = { ...this.getCamera(), ...camera };\n this.engine.setCamera(c.center[0], c.center[1], c.zoom, c.pitch, c.bearing);\n this.requestRender();\n }\n\n /** Animated move to a camera: over `duration` milliseconds (or the options), ease-out by default */\n easeTo(camera: Partial<Camera>, options: number | AnimationOptions = 600): void {\n const from = this.getCamera();\n const to = { ...from, ...camera };\n this.animate(easeTo(() => this.engine, from, to, options));\n // The destination's tiles load during the flight (as Cesium does)\n this.engine.preload(to.center[0], to.center[1], to.zoom, to.pitch, to.bearing);\n }\n\n /**\n * Flight to a camera that zooms out on its way and back in (van Wijk and Nuij's optimal path, as MapLibre's\n * `flyTo`): long moves stay readable. Pitch and bearing follow the progress.\n */\n flyTo(camera: Partial<Camera>, options: FlyToOptions = {}): void {\n const from = this.getCamera();\n const to = { ...from, ...camera };\n const viewport = Math.max(this.canvas.clientWidth, this.canvas.clientHeight);\n this.animate(flyTo(() => this.engine, from, to, viewport, options));\n this.engine.preload(to.center[0], to.center[1], to.zoom, to.pitch, to.bearing);\n }\n\n /** Longitudes and latitudes the view covers on the ground: `[west, south, east, north]` */\n getBounds(): [west: number, south: number, east: number, north: number] {\n const [west = -180, south = -85, east = 180, north = 85] = this.engine.bounds();\n return [west, south, east, north];\n }\n\n /** Lowest zoom the camera accepts (the widest view) */\n setMinZoom(zoom: number): void {\n this.settings.zoomRange[0] = zoom;\n this.engine.setZoomRange(...this.settings.zoomRange);\n this.requestRender();\n }\n\n setMaxZoom(zoom: number): void {\n this.settings.zoomRange[1] = zoom;\n this.engine.setZoomRange(...this.settings.zoomRange);\n this.requestRender();\n }\n\n /** Highest pitch, degrees, up to 85 */\n setMaxPitch(pitch: number): void {\n this.settings.maxPitch = pitch;\n this.engine.setMaxPitch(pitch);\n this.requestRender();\n }\n\n /** Sky over the plane and the fog of the ground (see `GeoMapOptions.atmosphere`); undefined to remove them */\n setAtmosphere(options: AtmosphereOptions | undefined): void {\n this.settings.atmosphere = atmosphereSettings(options);\n this.engine.setAtmosphere(this.settings.atmosphere);\n this.requestRender();\n }\n\n setProjection(projection: Projection): void {\n this.settings.globe = projection === 'globe';\n this.engine.setGlobe(this.settings.globe);\n this.requestRender();\n }\n\n /** How tiles load and show (see `LoadingMode`) */\n setLoading(mode: LoadingMode): void {\n this.settings.loading = mode;\n this.engine.setImmediateLoading(mode === 'immediate');\n this.requestRender();\n }\n\n /** Space behind the globe (stars, atmosphere halo) */\n setSky(enabled: boolean): void {\n this.settings.sky = enabled;\n this.engine.setSky(enabled);\n this.requestRender();\n }\n\n /** Relief under the basemap: true for the body's terrain model (on the Earth the worldwide Terrain Tiles, NASA's\n * on the Moon and Mars), one of the Earth's models by name (`'ign'`), its options, or false; on another body, its\n * options with a `url` */\n setTerrain(terrain: boolean | TerrainModel | TerrainOptions): void {\n this.settings.terrain = terrainSettings(terrain, this.body, this.settings.body.radius, this.terrainLoader);\n const t = this.settings.terrain;\n this.engine.setTerrain(t?.url, t?.exaggeration ?? 1, t?.maxZoom, t?.geoid, t?.loader);\n this.attributionChanged();\n this.requestRender();\n }\n\n /** @internal The credits of the raster layers (the basemap first) and of the relief in use, each once */\n attributions(): string[] {\n const layers = this.layers.map((layer) => this.rasterCredits.get(layer));\n const credits = [...layers, this.settings.terrain?.attribution];\n return [...new Set(credits.filter((c): c is string => c !== undefined))];\n }\n\n /** @internal Calls `listener` when the credits change; returns what stops it */\n onAttributionChange(listener: () => void): () => void {\n this.attributionListeners.add(listener);\n return () => this.attributionListeners.delete(listener);\n }\n\n private attributionChanged(): void {\n for (const listener of this.attributionListeners) listener();\n }\n\n /** Color behind the map, a CSS color (its alpha ignored) */\n setBackground(color: string): void {\n this.settings.background = rgb(color);\n this.engine.setBackground(...this.settings.background);\n this.requestRender();\n }\n\n /** Tile counters of the raster layers, for diagnostics */\n stats(): RasterLayerStats[] {\n return this.engine.stats();\n }\n\n /**\n * The feature under a screen point (CSS pixels), undefined if none: its layer id and index. Reads one pixel of an\n * offscreen picking pass, whatever the number of features, but waits for the GPU to finish the frame (a stall): for\n * clicks and one-off queries. On hover, listen to 'hoverfeature' instead, which picks without waiting.\n */\n pick(point: Point, radius = 0, layers?: readonly Layer[]): PickHit | undefined {\n const only = layers && Uint32Array.from(layers.map((l) => l.id));\n return this.engine.pick(point[0], point[1], radius, only);\n }\n\n /**\n * The feature under a screen point (CSS pixels), or the nearest one within `radius` pixels: its layer handle, its\n * index there and, for line, circle and fill layers, the feature itself; undefined if none. `layers` restricts the\n * search to some layers (the others hide nothing).\n */\n pickFeature(point: Point, options: { radius?: number; layers?: readonly Layer[] } = {}): FeatureHit | undefined {\n const hit = this.pick(point, options.radius ?? 0, options.layers);\n return hit && this.featureHit(hit);\n }\n\n /** A hit with its layer handle and feature; undefined if the layer is gone */\n private featureHit(hit: PickHit): FeatureHit | undefined {\n const layer = this.layers.find((l) => l.id === hit.layer);\n if (!layer) return undefined;\n const feature =\n 'featureAt' in layer && typeof layer.featureAt === 'function'\n ? (layer.featureAt(hit.index) as Feature | undefined)\n : undefined;\n return { layer, index: hit.index, feature };\n }\n\n /** Asks the engine what is under the pointer; its answer, read without waiting for the GPU, comes on a later frame */\n private requestHoverPick(point: Point): void {\n const { radius = 0, layers } = this.hoverPicking;\n const only = layers && Uint32Array.from(layers.map((l) => l.id));\n // The engine cannot pick (no request in flight): the poll under way would wait for nothing\n if (!this.engine.requestPick(point[0], point[1], radius, only)) {\n this.cancelHoverPick();\n return;\n }\n // A new request replaces the one in flight (in the engine too): one poll loop at most\n this.hoverPolls = 0;\n if (!this.hoverPoll) this.hoverPoll = requestAnimationFrame(this.pollHoverPick);\n }\n\n private readonly pollHoverPick = (): void => {\n this.hoverPoll = 0;\n if (this.lost) return;\n const result: PickResult | undefined = this.engine.pollPick();\n if (!result) {\n // The GPU is not done yet (usually a frame): asked again next frame, without drawing; given up at last\n this.hoverPolls += 1;\n if (this.hoverPolls < MAX_POLLS) this.hoverPoll = requestAnimationFrame(this.pollHoverPick);\n return;\n }\n this.emit('hoverfeature', {\n point: [result.x, result.y],\n lonLat: result.lonLat,\n hit: result.hit && this.featureHit(result.hit),\n });\n };\n\n private cancelHoverPick(): void {\n cancelAnimationFrame(this.hoverPoll);\n this.hoverPoll = 0;\n }\n\n /** Screen point (CSS pixels) of a position, undefined behind the camera */\n project(lonLat: LonLat): Point | undefined {\n return this.engine.project(lonLat[0], lonLat[1]);\n }\n\n /** Position under a screen point (CSS pixels), undefined above the horizon */\n unproject(point: Point): LonLat | undefined {\n return this.engine.ground(point[0], point[1]);\n }\n\n // ── Overlays and controls ──\n\n /** Adds a control in a corner of the map; controls stack from the corner inward */\n addControl(control: Control, position: ControlPosition = 'top-right'): this {\n if (this.controls.has(control)) return this;\n const element = control.onAdd(this);\n element.classList.add('isard-ctrl');\n // In the bottom corners the first control added stays lowest, as in MapLibre\n if (position.startsWith('bottom')) this.corners[position].prepend(element);\n else this.corners[position].append(element);\n this.controls.set(control, element);\n return this;\n }\n\n removeControl(control: Control): this {\n const element = this.controls.get(control);\n if (!element) return this;\n this.controls.delete(control);\n control.onRemove(this);\n element.remove();\n return this;\n }\n\n /** @internal Shows a marker or popup, placed after every frame from now on */\n attachOverlay(item: Positioned, element: HTMLElement): void {\n this.overlay.append(element);\n this.positioned.add(item);\n item.position(this.size);\n }\n\n /** @internal */\n detachOverlay(item: Positioned, element: HTMLElement): void {\n this.positioned.delete(item);\n element.remove();\n }\n\n /** @internal Places one overlay now (it moved), without drawing a frame */\n positionOverlay(item: Positioned): void {\n if (this.positioned.has(item)) item.position(this.size);\n }\n\n // ── Layers ──\n\n /** Replaces the basemap and the IGN hillshade, under the other layers (hillshade by default: 0, none). The former\n * names of the Géoplateforme basemaps (`LegacyBasemap`) are taken under their new ones */\n setBasemap(basemap: Basemap, hillshade = 0): void {\n const name = checkBasemap(basemap);\n if (this.basemap && this.hasLayer(this.basemap)) this.basemap.remove();\n if (this.hillshade && this.hasLayer(this.hillshade)) this.hillshade.remove();\n // Its raster and labels go with it\n this.vector?.tiles.destroy();\n this.vector = undefined;\n const vector = VECTOR_BASEMAPS[name as keyof typeof VECTOR_BASEMAPS];\n if (vector) {\n const tiles = new VectorTiles(this, {\n style: vector,\n ...(this.basemapWorkerUrl ? { workerUrl: this.basemapWorkerUrl } : {}),\n });\n this.basemap = tiles.raster(this.basemapTileSize ? { size: this.basemapTileSize } : {});\n this.vector = { tiles, labels: tiles.labels() as SymbolLayer<unknown> };\n } else {\n this.basemap = name === 'none' ? undefined : this.addRaster(BASEMAPS[name as keyof typeof BASEMAPS]);\n }\n // Off the Earth, the body's own color\n if (this.earth) this.settings.globeColor = SEA[name];\n this.engine.setGlobeColor(...this.settings.globeColor);\n this.hillshade = hillshade > 0 ? this.addRaster({ ...HILLSHADE, opacity: hillshade }) : undefined;\n if (this.hillshade) this.toBottom(this.hillshade);\n if (this.basemap) this.toBottom(this.basemap);\n this.attributionChanged();\n }\n\n /** Raster tiles ({z}, {x}, {y} URL; Web Mercator, or reprojected from another `grid`: longitudes and latitudes,\n * Lambert-93, UTM…), over the layers already added */\n addRaster(options: RasterOptions & { before?: Layer }): RasterLayer {\n const { url, grid = 'mercator', opacity = 1, saturation = 1, size, before } = options;\n let { minZoom = 0, maxZoom = 19 } = options;\n let loader = options.loader;\n if (grid !== 'mercator' && !loader) {\n if (grid === 'equirectangular') {\n // `minZoom` and `maxZoom` are levels of the source: its level n has the pixel size of Mercator level n + 1 at\n // the equator\n loader = gridLoader(\n url,\n resolveGrid(equirectangularGrid(minZoom, maxZoom)),\n size ?? 256,\n this.remoteReprojection,\n );\n [minZoom, maxZoom] = [minZoom + 1, maxZoom + 1];\n } else {\n const resolved = resolveGrid(grid);\n const zooms = gridZooms(resolved);\n minZoom = options.minZoom ?? zooms.minZoom;\n maxZoom = options.maxZoom ?? zooms.maxZoom;\n loader = gridLoader(url, resolved, size ?? 256, this.remoteReprojection);\n }\n }\n const layer = new RasterLayer(this, { url, minZoom, maxZoom, opacity, saturation, size, loader });\n this.place(layer, before);\n if (options.attribution) {\n this.rasterCredits.set(layer, options.attribution);\n this.attributionChanged();\n }\n return layer;\n }\n\n /** Line network colored by a value per node; `layer.setValues` recolors it in one texture upload */\n addNetwork(options: NetworkOptions): NetworkLayer {\n const { nodes, edges, lines, costs, edgeWidths, width = 2, max = 1800, contour = 0, opacity = 1 } = options;\n const { halo = 0, haloOpacity = 0.11, ramp, unreachedColor = 'rgba(140, 140, 140, 0.25)', fade = 0 } = options;\n const style = { width, max, contour, opacity, halo, haloOpacity, ramp, unreachedColor, fade };\n validateNetwork(nodes, edges);\n return this.add(new NetworkLayer(this, { nodes, edges, lines }, costs, style, edgeWidths));\n }\n\n /** Lines from GeoJSON (line strings, and polygon outlines), styled per feature */\n addLines<P = Record<string, unknown>>(options: LineOptions<P>): LineLayer<P> {\n return this.place(new LineLayer<P>(this, options.data, lineStyle(options)), options.before);\n }\n\n /** Discs from GeoJSON points, styled per feature */\n addCircles<P = Record<string, unknown>>(options: CircleOptions<P>): CircleLayer<P> {\n return this.place(new CircleLayer<P>(this, options.data, circleStyle(options)), options.before);\n }\n\n /** Filled polygons from GeoJSON (holes included), styled per feature; over the relief they lie on the ground */\n addFills<P = Record<string, unknown>>(options: FillOptions<P>): FillLayer<P> {\n return this.place(new FillLayer<P>(this, options.data, fillStyle(options)), options.before);\n }\n\n /** The application's fragment shader over the ground (see `GroundOptions`); under `before` if given */\n addGround(options: GroundOptions & { before?: Layer }): GroundLayer {\n return this.place(new GroundLayer(this, options), options.before);\n }\n\n /** Polygons raised into blocks with depth (buildings), styled per feature; tiles of them come with `setTile` */\n addExtrusions<P = Record<string, unknown>>(options: ExtrusionOptions<P> = {}): ExtrusionLayer<P> {\n return this.place(new ExtrusionLayer<P>(this, options.data, extrusionStyle(options)), options.before);\n }\n\n /** Text labels from GeoJSON (points, the middle of lines, the center of polygons), placed without overlaps */\n addSymbols<P = Record<string, unknown>>(options: SymbolOptions<P>): SymbolLayer<P> {\n return this.place(new SymbolLayer<P>(this, options.data, symbolStyle(options)), options.before);\n }\n\n /** @internal The glyphs of the symbol layers, loaded on first use */\n get glyphs(): Glyphs {\n if (!this.#glyphs) {\n // The engine's context: the atlas stays within its texture size limit\n const gl = this.canvas.getContext('webgl2');\n const max = gl?.getParameter(gl.MAX_TEXTURE_SIZE);\n this.#glyphs = new Glyphs(this.glyphsUrl, typeof max === 'number' ? max : undefined);\n this.#glyphs.attach(this.engine);\n }\n return this.#glyphs;\n }\n\n /** @internal The icons of the symbol layers: the application's images and the vector basemaps' sprites */\n get icons(): Icons {\n if (!this.#icons) {\n const gl = this.canvas.getContext('webgl2');\n const max = gl?.getParameter(gl.MAX_TEXTURE_SIZE);\n this.#icons = new Icons(typeof max === 'number' ? max : undefined);\n this.#icons.attach(this.engine);\n }\n return this.#icons;\n }\n\n /**\n * An image for the symbol layers' icons (`icon: name`), as MapLibre's `addImage`: its pixels (an image, a canvas,\n * `ImageData`, or RGBA bytes with their size), `pixelRatio` 2 for an image drawn at twice its CSS size; `sdf` for a\n * signed distance field drawn in the `iconColor`; `stretchX`, `stretchY` and `content` for an icon stretched around its\n * text. An image of the same name is replaced\n */\n addImage(\n name: string,\n image: Pixels | (CanvasImageSource & { width: number; height: number }),\n options: ImageOptions = {},\n ): void {\n const pixels = 'data' in image ? image : readPixels(image);\n if (!pixels) throw new Error(`isard: the image ${name} has no pixels`);\n this.icons.add(name, pixels, options);\n }\n\n hasImage(name: string): boolean {\n return this.#icons?.has(name) ?? false;\n }\n\n removeImage(name: string): void {\n this.#icons?.remove(name);\n }\n\n /**\n * Vector tiles with a MapLibre style (OpenFreeMap's Positron by default): `tiles.raster(…)` draws its fills and lines\n * (or a subset) as a raster layer, `tiles.labels(…)` its labels. `setBasemap('osm-positron')` does both for the\n * basemap.\n */\n vectorTiles(options: VectorTilesOptions = {}): VectorTiles {\n const tiles = new VectorTiles(this, {\n ...(this.basemapWorkerUrl ? { workerUrl: this.basemapWorkerUrl } : {}),\n ...options,\n });\n // Its workers stop with the map\n this.vectorSets.add(tiles);\n return tiles;\n }\n\n /** @internal Forgets a destroyed `VectorTiles` */\n dropVectorTiles(tiles: VectorTiles): void {\n this.vectorSets.delete(tiles);\n }\n\n /**\n * @internal The workers for a `VectorTiles`: the map's shared pool, or a pool of its own (`own`, to stop with it)\n * when it asks for another count or URL\n */\n basemapWorkers(count?: number, url?: string | URL): { pool: BasemapWorkers; own: boolean } {\n const sharedUrl = this.basemapWorkerUrl ?? defaultWorkerUrl();\n const shared = defaultWorkerCount();\n const workers = Math.max(1, count ?? shared);\n const workerUrl = url ?? sharedUrl;\n if (workers === shared && String(workerUrl) === String(sharedUrl)) {\n this.basemapPool ??= new BasemapWorkers(shared, sharedUrl);\n return { pool: this.basemapPool, own: false };\n }\n return { pool: new BasemapWorkers(workers, workerUrl), own: true };\n }\n\n /**\n * The workers decoding the relief and reprojecting rasters: the map's pool, unless the map has no workers\n * (`workers: false` or 0, or none in this browser): that is done in the page then\n */\n private decodingPool(): BasemapWorkers | undefined {\n const { workers } = this.tiles3dOptions;\n if (this.gone || workers === false || (workers !== undefined && workers <= 0)) return undefined;\n if (typeof Worker === 'undefined' || typeof OffscreenCanvas === 'undefined') return undefined;\n return this.basemapWorkers().pool;\n }\n\n private readonly remoteHeights: RemoteHeights = (url, encoding, floor, tile, signal) =>\n this.decodingPool()?.heights(url, encoding, floor, tile, signal, this);\n\n private readonly remoteReprojection: RemoteReprojection = (job, tile, signal) =>\n this.decodingPool()?.reproject(job, tile, signal, this);\n\n /** The loader of the relief tiles of `url` in a PNG encoding (one per URL, encoding and floor) */\n private readonly terrainLoader = (url: string, encoding: PngEncoding, floor?: number): TerrainLoader => {\n const key = `${encoding} ${floor ?? ''} ${url}`;\n let loader = this.terrainLoaders.get(key);\n if (!loader) {\n loader = encodedTerrainLoader(url, encoding, floor, this.remoteHeights);\n this.terrainLoaders.set(key, loader);\n }\n return loader;\n };\n\n /** Adds a layer, under `before` if given */\n private place<L extends Layer>(layer: L, before: Layer | undefined): L {\n this.add(layer);\n if (before) this.moveLayer(layer, before);\n return layer;\n }\n\n /** Textured meshes in 3D Tiles (photogrammetry, buildings), drawn with depth over the basemap */\n addTiles3d(options: Tiles3dOptions): Tiles3dLayer {\n const { url, maxScreenSpaceError = 16, opacity = 1, pointSize } = options;\n return this.add(\n new Tiles3dLayer(this, url, { maxScreenSpaceError, opacity, ...(pointSize !== undefined ? { pointSize } : {}) }),\n );\n }\n\n /**\n * A point cloud (see `PointCloudOptions`): a COPC file read by range requests (IGN's LiDAR HD…), or 3D Tiles\n * points; with depth, on the engine with 3D Tiles; under `before` if given\n */\n addPointCloud(options: PointCloudOptions & { before?: Layer }): PointCloudLayer {\n return this.place(new PointCloudLayer(this, options), options.before);\n }\n\n /** A glTF model drawn at positions (see `ModelOptions`), with depth; on the engine with 3D Tiles, as they are */\n addModels(options: ModelOptions & { before?: Layer }): ModelLayer {\n return this.place(new ModelLayer(this, options), options.before);\n }\n\n /**\n * The page's own WebGL drawing at its place among the layers, in every frame (see `CustomLayerInterface`): raw\n * WebGL, three.js… with the matrices of the frame (`frame.matrixAt`); under `before` if given\n */\n addCustomLayer(layer: CustomLayerInterface, options: { before?: Layer } = {}): CustomLayer {\n const custom = new CustomLayer(\n this,\n layer,\n this.canvas,\n this,\n (lon, lat, altitude) => this.engineClass.customMatrix(lon, lat, altitude),\n () => this.getCamera(),\n );\n return this.place(custom, options.before);\n }\n\n // ── Frames ──\n\n /** Asks for a frame; several calls before the next frame draw it once */\n requestRender(): void {\n // Changes made by listeners during a frame are drawn by that frame; nothing is drawn without a context\n if (this.inFrame || this.lost) return;\n this.frameRequest ||= requestAnimationFrame((now) => this.frame(now));\n }\n\n /** @internal Runs `step` every frame until it returns false; replaces the running animation */\n animate(step: Step | undefined): void {\n // A flight cut short no longer needs its destination\n if (this.animation) this.engine.clearPreload();\n this.animation = step;\n this.requestRender();\n }\n\n /** @internal The pointer moved over the map (undefined: it left). Without 'hover' and 'hoverfeature' listeners,\n * nothing is drawn: a still map stays idle under a moving mouse */\n hover(point: Point | undefined): void {\n if (!point) {\n this.hoverPoint = undefined;\n this.cancelHoverPick();\n return;\n }\n if (this.listeners.hover.size === 0 && this.listeners.hoverfeature.size === 0) return;\n this.hoverPoint = point;\n this.requestRender();\n }\n\n private frame(now: number): void {\n this.frameRequest = 0;\n try {\n this.inFrame = true;\n this.drawFrame(now);\n } finally {\n // Whatever throws in a frame, the next ones are still drawn\n this.inFrame = false;\n }\n }\n\n private drawFrame(now: number): void {\n if (this.animation && !this.animation(now)) this.animation = undefined;\n const camera = this.getCamera();\n const key = `${camera.center}|${camera.zoom}|${camera.pitch}|${camera.bearing}`;\n const moved = key !== this.lastCamera;\n if (moved) {\n // The first frame is no move\n if (!this.moving && this.lastCamera !== '') {\n this.moving = true;\n this.emit('movestart', camera);\n }\n this.lastCamera = key;\n this.emit('move', camera);\n } else if (this.moving && !this.animation && !this.interaction?.active) {\n this.moving = false;\n this.emit('moveend', camera);\n }\n // Values for the pointer position are computed before drawing, in the same frame\n let hovered: Point | undefined;\n if (this.hoverPoint) {\n const point = this.hoverPoint;\n hovered = point;\n this.hoverPoint = undefined;\n // The position under the pointer for its listeners only (a 'hoverfeature' alone does not need it)\n if (this.listeners.hover.size > 0) this.emit('hover', { point, lonLat: this.unproject(point) });\n }\n const t0 = performance.now();\n // The engine asks for the next frame while it draws (uploads past the frame budget, fades): not ignored\n this.inFrame = false;\n // As the engine has it now (a listener may have moved it), for the custom layers drawn in the frame\n this.frameCamera = this.layers.some((layer) => layer instanceof CustomLayer) ? this.engine.camera() : undefined;\n let loading: boolean;\n try {\n loading = this.engine.render();\n } finally {\n this.frameCamera = undefined;\n }\n this.inFrame = true;\n // The picking pass sees the frame just drawn; its answer comes on a later frame\n if (hovered && this.listeners.hoverfeature.size > 0) this.requestHoverPick(hovered);\n // Overlays follow the frame just drawn (camera, relief altitudes): all in one pass, transforms only\n for (const item of this.positioned) item.position(this.size);\n this.emit('render', { ms: performance.now() - t0 });\n this.inFrame = false;\n // A move goes on until a frame finds the camera still: that frame sends 'moveend'\n if (this.animation || (moved && this.moving)) this.requestRender();\n // Idle: nothing loading (the engine with 3D Tiles neither), no animation, no frame asked for (uploads waiting,\n // fades, listeners)\n if (loading || this.upgrading || this.animation || this.frameRequest !== 0) {\n this.settled = false;\n } else if (!this.settled) {\n this.settled = true;\n this.emit('idle', {});\n }\n }\n\n /** Resizes when the device pixel ratio changes (browser zoom, a window moved to another screen) */\n private watchRatio(): void {\n if (typeof matchMedia !== 'function') return;\n const query = matchMedia(`(resolution: ${window.devicePixelRatio || 1}dppx)`);\n const changed = () => {\n // A query for the new ratio\n this.unwatchRatio?.();\n this.watchRatio();\n this.resize();\n };\n query.addEventListener('change', changed, { once: true });\n this.unwatchRatio = () => query.removeEventListener('change', changed);\n }\n\n private resize(): void {\n if (this.lost) return;\n const { clientWidth: width, clientHeight: height } = this.canvas;\n const ratio = window.devicePixelRatio || 1;\n this.canvas.width = Math.round(width * ratio);\n this.canvas.height = Math.round(height * ratio);\n this.engine.resize(width, height, ratio);\n this.size = [width, height];\n this.emit('resize', { width, height });\n // Draw at once: a resized canvas is cleared, waiting one frame would flash\n cancelAnimationFrame(this.frameRequest);\n this.frame(performance.now());\n }\n\n destroy(): void {\n if (this.gone) return;\n this.gone = true;\n // A context restored later rebuilds nothing\n this.unwatchContext();\n const camera = this.getCamera();\n cancelAnimationFrame(this.frameRequest);\n this.cancelHoverPick();\n this.vector?.tiles.destroy();\n for (const tiles of [...this.vectorSets]) tiles.destroy();\n this.vectorSets.clear();\n this.basemapPool?.terminate();\n this.basemapPool = undefined;\n this.unwatchRatio?.();\n this.unwatchRatio = undefined;\n this.resizeObserver.disconnect();\n this.interaction?.destroy();\n this.loader?.destroy();\n // Custom layers free their WebGL objects, models their data, while the context is there\n for (const layer of this.layers) layer.dispose();\n this.engine.free();\n // Work still under way (labels being shaped, tiles arriving, timers) may call the engine after this: it finds one\n // that does nothing, and nothing is drawn again\n this.#engine = destroyedEngine(camera);\n // Glyph ranges still arriving upload to it, not to the freed engine\n this.#glyphs?.attach(this.#engine);\n this.#icons?.attach(this.#engine);\n this.lost = true;\n for (const control of [...this.controls.keys()]) this.removeControl(control);\n this.positioned.clear();\n this.canvas.remove();\n this.overlay.remove();\n for (const position of CORNERS) this.corners[position].remove();\n this.container.classList.remove('isard-map');\n for (const listeners of Object.values(this.listeners)) listeners.clear();\n }\n}\n"]}
1
+ {"version":3,"file":"map.js","sourceRoot":"","sources":["../src/map.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The map: canvas, camera, layers, events, overlays, credits and the frame loop. Frames are drawn on demand only: an\n * idle map costs nothing. Hover events are coalesced to one per frame, so the values computed for a mouse position are\n * drawn in the same frame. The engine's loading is in engine-loader.ts, its settings from the options in settings.ts,\n * the camera animations in animation.ts.\n */\nimport { easeTo, flyTo, type Step } from './animation.ts';\nimport { BASEMAPS, basemapName, HILLSHADE, SEA } from './basemaps.ts';\nimport { AttributionControl, type Control, type ControlPosition } from './controls.ts';\nimport {\n destroyedEngine,\n type EngineClass,\n engineUrl,\n loadEngine,\n loadFullEngineLater,\n preloadFullEngine,\n startTileLoader,\n} from './engine-loader.ts';\nimport { ExtrusionLayer, type ExtrusionOptions, extrusionStyle } from './extrusions.ts';\nimport {\n CircleLayer,\n type CircleOptions,\n circleStyle,\n type Feature,\n FillLayer,\n type FillOptions,\n fillStyle,\n LineLayer,\n type LineOptions,\n lineStyle,\n} from './features.ts';\nimport { Glyphs } from './glyphs.ts';\nimport { equirectangularGrid, gridLoader, gridZooms, type RemoteReprojection, resolveGrid } from './grid.ts';\nimport { Icons, type ImageOptions, type Pixels, readPixels } from './icons.ts';\nimport { Interaction } from './interaction.ts';\nimport {\n CustomLayer,\n type CustomLayerInterface,\n GroundLayer,\n type GroundOptions,\n type Layer,\n ModelLayer,\n type ModelOptions,\n NetworkLayer,\n RasterLayer,\n Tiles3dLayer,\n} from './layers.ts';\nimport type { TileLoader } from './loader.ts';\nimport type { Positioned } from './overlay.ts';\nimport { PointCloudLayer, type PointCloudOptions } from './pointclouds.ts';\nimport {\n atmosphereSettings,\n bodySettings,\n haloSettings,\n rgb,\n type Settings,\n type TerrainLoader,\n terrainSettings,\n} from './settings.ts';\nimport { injectStyle } from './style.ts';\nimport { SymbolLayer, type SymbolOptions, symbolStyle } from './symbols.ts';\nimport { encodedTerrainLoader, type PngEncoding, type RemoteHeights } from './terrain.ts';\nimport type {\n AnimationOptions,\n AtmosphereOptions,\n Basemap,\n BasemapName,\n CelestialBody,\n FeatureHit,\n FlyToOptions,\n GeoMapOptions,\n LoadingMode,\n LonLat,\n MapEvents,\n NetworkOptions,\n Point,\n Projection,\n RasterOptions,\n TerrainModel,\n TerrainOptions,\n Tiles3dOptions,\n ViewshedOptions,\n} from './types.ts';\nimport {\n BasemapWorkers,\n defaultWorkerCount,\n defaultWorkerUrl,\n type PmtilesOptions,\n pmtilesLayer,\n pmtilesRasterLoader,\n VECTOR_BASEMAPS,\n VectorTiles,\n type VectorTilesOptions,\n} from './vectortiles.ts';\nimport type { Camera, Engine, PickHit, PickResult, RasterLayerStats } from './wasm/isard.js';\n\n/** Reports an error without throwing it here: the console shows it, as an uncaught one */\nfunction report(error: unknown): void {\n if (typeof reportError === 'function') reportError(error);\n else\n queueMicrotask(() => {\n throw error;\n });\n}\n\ntype Listeners = { [K in keyof MapEvents]: Set<(event: MapEvents[K]) => void> };\n\n/** Checks a network's arrays before the engine reads them: node index pairs, indices of existing nodes */\nfunction validateNetwork(nodes: Float64Array, edges: Uint32Array): void {\n if (nodes.length % 2 !== 0) throw new Error(`isard: network nodes must be lon, lat pairs (length ${nodes.length})`);\n if (edges.length % 2 !== 0) throw new Error(`isard: network edges must be node index pairs (length ${edges.length})`);\n const count = nodes.length / 2;\n for (let i = 0; i < edges.length; i += 1) {\n const node = edges[i] as number;\n if (node >= count) throw new Error(`isard: network edge ${i >> 1} refers to node ${node}, of ${count} nodes`);\n }\n}\n\nconst CORNERS: readonly ControlPosition[] = ['top-left', 'top-right', 'bottom-left', 'bottom-right'];\n\n/** Frames the hover picking waits for its answer at most (usually one) */\nconst MAX_POLLS = 30;\n\n/** The name of a basemap, checked: an unknown one throws */\nfunction checkBasemap(basemap: Basemap): BasemapName {\n const name = basemapName(basemap);\n if (name !== 'none' && !(name in VECTOR_BASEMAPS) && !(name in BASEMAPS)) {\n throw new Error(`isard: unknown basemap '${basemap}'`);\n }\n return name;\n}\n\n/** A map (see `GeoMap.create`); layers take it as their host */\nexport class GeoMap {\n readonly canvas: HTMLCanvasElement;\n #glyphs: Glyphs | undefined;\n #icons: Icons | undefined;\n /** Layers new layers go under */\n private readonly onTop = new Set<Layer>();\n /** The vector basemap, if any: its tiles' workers and its labels */\n private vector: { tiles: VectorTiles; labels: SymbolLayer<unknown> } | undefined;\n private readonly glyphsUrl: string | undefined;\n private readonly basemapWorkerUrl: string | URL | undefined;\n /** Texture size of the vector basemap's tiles */\n private readonly basemapTileSize: number | undefined;\n private readonly container: HTMLElement;\n /** Markers and popups, over the canvas */\n private readonly overlay: HTMLDivElement;\n private readonly corners: Record<ControlPosition, HTMLDivElement>;\n private readonly controls = new Map<Control, HTMLElement>();\n private readonly positioned = new Set<Positioned>();\n /** Canvas size in CSS pixels, kept on resize so placing overlays never reads the layout */\n private size: Point = [0, 0];\n #engine: Engine;\n /** Layers in drawing order (bottom first), to recreate them after a context loss */\n private readonly layers: Layer[] = [];\n private readonly settings: Settings;\n /** The WebGL context is lost: nothing is drawn until it is restored */\n private lost = false;\n private readonly listeners: Listeners = {\n movestart: new Set(),\n move: new Set(),\n moveend: new Set(),\n resize: new Set(),\n hover: new Set(),\n hoverfeature: new Set(),\n click: new Set(),\n render: new Set(),\n idle: new Set(),\n leave: new Set(),\n };\n private readonly resizeObserver: ResizeObserver;\n private readonly interaction: Interaction | undefined;\n private loader: TileLoader | undefined;\n /** The class of the engine: without 3D Tiles until a 3D Tiles layer is added, unless asked for from the start */\n private engineClass: EngineClass;\n /** The module of the engine with 3D Tiles once it runs this map (the decoding workers run it too) */\n private tiles3dModule: WebAssembly.Module | undefined;\n /** The engine with 3D Tiles is loading, for the 3D Tiles layers added on the core engine */\n private upgrading: Promise<void> | undefined;\n /** What loading the engine with 3D Tiles and its workers needs */\n private readonly tiles3dOptions: Pick<\n GeoMapOptions,\n 'wasmUrl' | 'workers' | 'workerUrl' | 'decoders' | 'pointsWasmUrl'\n >;\n private gone = false;\n /** The map is of the Earth: a basemap by default */\n private readonly earth: boolean;\n /** The body, as the option named it */\n private readonly body: CelestialBody | undefined;\n private basemap: RasterLayer | undefined;\n private hillshade: RasterLayer | undefined;\n /** Called when the credits of the layers or relief change (the attribution controls) */\n private readonly attributionListeners = new Set<() => void>();\n /** Credits of the raster layers that have some (basemaps, hillshade, the Géoplateforme's rasters…) */\n private readonly rasterCredits = new Map<object, string>();\n private animation: Step | undefined;\n private hoverPoint: Point | undefined;\n /** Frame polling the engine for the answer of the hover picking, 0 if none */\n private hoverPoll = 0;\n /** Polls of the hover picking under way: given up after `MAX_POLLS` (an answer that never comes) */\n private hoverPolls = 0;\n /** What 'hoverfeature' looks for: within `radius` CSS pixels, in `layers` only if given */\n hoverPicking: { radius?: number; layers?: readonly Layer[] } = {};\n private frameRequest = 0;\n private lastCamera = '';\n /** The camera moved since the last 'moveend' */\n private moving = false;\n /** The last frame found everything loaded ('idle' sent) */\n private settled = false;\n private inFrame = false;\n /** The camera of the frame being drawn: what `getCamera` gives the custom layers while the engine is busy */\n private frameCamera: Camera | undefined;\n /** Vector tiles made by `vectorTiles()`, destroyed with the map */\n private readonly vectorSets = new Set<VectorTiles>();\n /** The workers drawing vector tiles, shared by every `VectorTiles` of the map; created on first use */\n private basemapPool: BasemapWorkers | undefined;\n /** Stops watching the device pixel ratio */\n private unwatchRatio: (() => void) | undefined;\n /** Stops listening to the canvas's context loss and restoration */\n private readonly unwatchContext: () => void;\n\n /** The loaders of the relief by encoding, URL and floor: the same loader for the same tiles (the engine keeps its\n * tiles when only the exaggeration changes) */\n private readonly terrainLoaders = new Map<string, TerrainLoader>();\n\n /** Loads the engine (once per page) and creates a map filling `container` */\n static async create(container: HTMLElement, options: GeoMapOptions = {}): Promise<GeoMap> {\n // With 3D Tiles from the start when asked, or when only that engine's URL is given (as before the core engine)\n const full = options.tiles3d === true || (options.wasmUrl !== undefined && options.coreWasmUrl === undefined);\n // Before anything is created\n if (options.basemap !== undefined) checkBasemap(options.basemap);\n const kind = full ? 'full' : 'core';\n const bindings = await loadEngine(kind, engineUrl(kind, options));\n const map = new GeoMap(container, options, bindings.Engine, full ? bindings.module : undefined);\n if (options.tiles3d === 'preload' && !full) map.preloadTiles3d();\n return map;\n }\n\n private constructor(\n container: HTMLElement,\n options: GeoMapOptions,\n engineClass: EngineClass,\n tiles3dModule: WebAssembly.Module | undefined,\n ) {\n this.engineClass = engineClass;\n this.tiles3dModule = tiles3dModule;\n this.tiles3dOptions = { ...options };\n this.glyphsUrl = options.glyphs;\n this.basemapWorkerUrl = options.basemapWorkerUrl;\n this.basemapTileSize = options.basemapTileSize;\n this.container = container;\n this.canvas = document.createElement('canvas');\n Object.assign(this.canvas.style, { display: 'block', width: '100%', height: '100%', touchAction: 'none' });\n // Overlays and controls are positioned against the container\n injectStyle(container.ownerDocument);\n if (getComputedStyle(container).position === 'static') container.style.position = 'relative';\n container.classList.add('isard-map');\n this.overlay = document.createElement('div');\n this.overlay.className = 'isard-overlay';\n const corner = (position: ControlPosition) => {\n const element = document.createElement('div');\n element.className = `isard-ctrl-${position}`;\n return element;\n };\n this.corners = {\n 'top-left': corner('top-left'),\n 'top-right': corner('top-right'),\n 'bottom-left': corner('bottom-left'),\n 'bottom-right': corner('bottom-right'),\n };\n container.append(this.canvas, this.overlay, ...CORNERS.map((position) => this.corners[position]));\n this.earth = (options.body ?? 'earth') === 'earth';\n this.body = options.body;\n const body = bodySettings(options.body);\n this.settings = {\n body,\n zoomRange: [options.minZoom ?? 0, options.maxZoom ?? 22],\n maxPitch: options.maxPitch ?? 70,\n globe: (options.projection ?? 'globe') === 'globe',\n sky: options.sky ?? true,\n atmosphere: atmosphereSettings(options.atmosphere),\n terrain: terrainSettings(options.terrain, options.body, body.radius, this.terrainLoader),\n loading: options.loading ?? 'immediate',\n background: rgb(options.background ?? (this.earth ? '#f2f2f0' : '#000000')),\n globeColor: this.earth ? SEA['osm-positron'] : rgb(body.color),\n };\n this.#engine = this.createEngine();\n // The browser may take the GPU away (driver reset, background tab on mobile): the map waits, then rebuilds\n const lost = (event: Event) => {\n event.preventDefault();\n this.lost = true;\n cancelAnimationFrame(this.frameRequest);\n this.frameRequest = 0;\n };\n const restored = () => this.restore();\n this.canvas.addEventListener('webglcontextlost', lost);\n this.canvas.addEventListener('webglcontextrestored', restored);\n this.unwatchContext = () => {\n this.canvas.removeEventListener('webglcontextlost', lost);\n this.canvas.removeEventListener('webglcontextrestored', restored);\n };\n const start: Camera = this.earth\n ? { center: [2.4246, 48.8457], zoom: 13, pitch: 0, bearing: 0 }\n : { center: [0, 0], zoom: 2, pitch: 0, bearing: 0 };\n this.setCamera({ ...start, ...options });\n this.setBasemap(options.basemap ?? (this.earth ? 'osm-positron' : 'none'), options.hillshade ?? 0);\n this.resizeObserver = new ResizeObserver(() => this.resize());\n this.resizeObserver.observe(container);\n this.watchRatio();\n this.resize();\n const interactive = options.interactive ?? true;\n const keyboard = interactive && (options.keyboard ?? true);\n this.interaction = interactive ? new Interaction(this, { keyboard }) : undefined;\n // Reached with Tab when the keys move it; named for screen readers either way\n this.canvas.classList.add('isard-canvas');\n this.canvas.setAttribute('role', keyboard ? 'application' : 'region');\n this.canvas.setAttribute('aria-roledescription', 'map');\n this.canvas.setAttribute('aria-label', options.ariaLabel ?? 'Map');\n if (keyboard) this.canvas.tabIndex = 0;\n const attribution = options.attributionControl ?? true;\n if (attribution !== false) {\n this.addControl(new AttributionControl(attribution === true ? {} : attribution), 'bottom-right');\n }\n }\n\n /** The element the map was created in */\n getContainer(): HTMLElement {\n return this.container;\n }\n\n getCanvas(): HTMLCanvasElement {\n return this.canvas;\n }\n\n /** @internal The engine (replaced after a context loss) */\n get engine(): Engine {\n return this.#engine;\n }\n\n private createEngine(): Engine {\n const engine = new this.engineClass(this.canvas, () => this.requestRender());\n // The body first: the layers' shaders may take its size\n const { radius, flattening, atmosphere: air, relief } = this.settings.body;\n engine.setBody(radius, flattening, haloSettings(air), ...relief);\n const { zoomRange, maxPitch, globe, sky, atmosphere, terrain, loading, background, globeColor } = this.settings;\n engine.setZoomRange(...zoomRange);\n engine.setMaxPitch(maxPitch);\n engine.setGlobe(globe);\n engine.setSky(sky);\n engine.setAtmosphere(atmosphere);\n engine.setTerrain(terrain?.url, terrain?.exaggeration ?? 1, terrain?.maxZoom, terrain?.geoid, terrain?.loader);\n engine.setImmediateLoading(loading === 'immediate');\n engine.setBackground(...background);\n engine.setGlobeColor(...globeColor);\n this.loader ??= this.startLoader(engine);\n if (this.loader) engine.setTileLoader(this.loader);\n return engine;\n }\n\n /** The decoding workers of 3D Tiles, with the engine that has them (they run its module) and unless turned off */\n private startLoader(engine: Engine): TileLoader | undefined {\n return this.tiles3dModule && startTileLoader(this.tiles3dModule, this.tiles3dOptions, engine);\n }\n\n /** A 3D Tiles layer or a model on the core engine: loads the engine with 3D Tiles, then rebuilds the map on it\n * (camera, settings and layers kept, as after a context loss); the layer is created then */\n private upgrade(): void {\n this.upgrading ??= loadFullEngineLater(engineUrl('full', this.tiles3dOptions)).then(\n ({ module, Engine }) => {\n this.upgrading = undefined;\n if (this.gone) return;\n this.engineClass = Engine;\n this.tiles3dModule = module;\n // A lost context: the engine is rebuilt on it once restored\n if (!this.lost) this.restore();\n },\n (error: unknown) => {\n // The 3D Tiles layers stay empty; the next one added tries again\n this.upgrading = undefined;\n if (this.gone) return;\n report(error);\n this.requestRender();\n },\n );\n }\n\n /** Downloads and compiles the engine with 3D Tiles once the map is idle (`tiles3d: 'preload'`), without running\n * it: the first 3D Tiles layer then only instantiates it */\n private preloadTiles3d(): void {\n const url = engineUrl('full', this.tiles3dOptions);\n const later = () => preloadFullEngine(url, () => !this.gone && !this.tiles3dModule);\n if (this.settled) later();\n else {\n const off = this.on('idle', () => {\n off();\n later();\n });\n }\n }\n\n /** After a context loss: a new engine with the same camera, settings and layers (same handles, same order) */\n private restore(): void {\n if (this.gone) return;\n this.cancelHoverPick();\n const camera = this.getCamera();\n this.#engine.free();\n this.#engine = this.createEngine();\n this.lost = false;\n this.setCamera(camera);\n this.#glyphs?.attach(this.#engine);\n this.#icons?.attach(this.#engine);\n const engine = this.#engine;\n // No layer refers to an id of the old engine while the others are created\n for (const layer of this.layers) layer.forgetEngine();\n for (const layer of this.layers) {\n // Still waiting for the engine with 3D Tiles (loading, or failed): created with it\n if (layer.needsFullEngine && !this.tiles3dModule) continue;\n // A layer that fails is reported and left out; the others are created\n try {\n layer.attach(engine);\n } catch (error) {\n report(error);\n }\n }\n // Links between layers, once every layer has its new id (buildings colored by a network above them)\n for (const layer of this.layers) {\n if (layer.id < 0) continue;\n try {\n layer.relink(engine);\n } catch (error) {\n report(error);\n }\n }\n this.resize();\n }\n\n /** @internal Forgets a removed layer */\n detach(layer: object): void {\n this.unlist(layer);\n this.onTop.delete(layer as Layer);\n if (this.rasterCredits.delete(layer)) this.attributionChanged();\n }\n\n /** @internal The layer is on the map */\n hasLayer(layer: object): boolean {\n return !this.gone && this.layers.includes(layer as Layer);\n }\n\n /** Takes a layer out of the drawing order (to put it back elsewhere, or for good) */\n private unlist(layer: object): void {\n const index = this.layers.indexOf(layer as Layer);\n if (index >= 0) this.layers.splice(index, 1);\n }\n\n private add<L extends Layer>(layer: L): L {\n // On the core engine, a 3D Tiles layer or a model waits for the engine with 3D Tiles: it is created with the\n // others on it\n if (layer.needsFullEngine && !this.tiles3dModule) this.upgrade();\n else layer.attach(this.engine);\n this.layers.push(layer);\n // Under the layers kept on top (the basemap's labels)\n const top = this.layers.find((l) => this.onTop.has(l) && l !== layer);\n if (top) this.moveLayer(layer, top);\n this.requestRender();\n return layer;\n }\n\n /** @internal Keeps a layer above the layers added after it (they go under it), as the labels of a basemap */\n keepOnTop(layer: Layer): void {\n this.onTop.add(layer);\n }\n\n /** @internal Moves a layer under `before`, or on top of all */\n moveLayer(layer: object, before: object | undefined): void {\n const handle = layer as Layer;\n this.unlist(handle);\n const index = before ? this.layers.indexOf(before as Layer) : -1;\n const at = index < 0 ? this.layers.length : index;\n this.layers.splice(at, 0, handle);\n if (handle.id >= 0) this.engine.moveLayer(handle.id, this.engineIndex(at));\n this.requestRender();\n }\n\n /** @internal See `LayerHost.replaceLayer` */\n replaceLayer(layer: object, old: number): void {\n this.engine.removeLayer(old);\n const index = this.layers.indexOf(layer as Layer);\n if (index >= 0) this.engine.moveLayer((layer as Layer).id, this.engineIndex(index));\n }\n\n /** Index in the engine of the layer at `index`: the layers waiting for the engine with 3D Tiles are not in it yet */\n private engineIndex(index: number): number {\n let count = 0;\n for (let i = 0; i < index; i += 1) if ((this.layers[i]?.id ?? -1) >= 0) count += 1;\n return count;\n }\n\n /** Moves a layer under all the others */\n private toBottom(layer: Layer): void {\n this.engine.moveLayer(layer.id, 0);\n this.unlist(layer);\n this.layers.unshift(layer);\n }\n\n // ── Events ──\n\n /** Listens to an event; returns the function that stops listening */\n on<K extends keyof MapEvents>(type: K, listener: (event: MapEvents[K]) => void): () => void {\n const listeners: Set<(event: MapEvents[K]) => void> = this.listeners[type];\n listeners.add(listener);\n return () => listeners.delete(listener);\n }\n\n /** @internal Calls the listeners; one that throws is reported and does not stop the others nor the frame */\n emit<K extends keyof MapEvents>(type: K, event: MapEvents[K]): void {\n const listeners: Set<(event: MapEvents[K]) => void> = this.listeners[type];\n for (const listener of listeners) {\n try {\n listener(event);\n } catch (error) {\n report(error);\n }\n }\n }\n\n // ── Camera ──\n\n getCamera(): Camera {\n return this.frameCamera ?? this.engine.camera();\n }\n\n setCamera(camera: Partial<Camera>): void {\n const c = { ...this.getCamera(), ...camera };\n this.engine.setCamera(c.center[0], c.center[1], c.zoom, c.pitch, c.bearing);\n this.requestRender();\n }\n\n /** Animated move to a camera: over `duration` milliseconds (or the options), ease-out by default */\n easeTo(camera: Partial<Camera>, options: number | AnimationOptions = 600): void {\n const from = this.getCamera();\n const to = { ...from, ...camera };\n this.animate(easeTo(() => this.engine, from, to, options));\n // The destination's tiles load during the flight (as Cesium does)\n this.engine.preload(to.center[0], to.center[1], to.zoom, to.pitch, to.bearing);\n }\n\n /**\n * Flight to a camera that zooms out on its way and back in (van Wijk and Nuij's optimal path, as MapLibre's\n * `flyTo`): long moves stay readable. Pitch and bearing follow the progress.\n */\n flyTo(camera: Partial<Camera>, options: FlyToOptions = {}): void {\n const from = this.getCamera();\n const to = { ...from, ...camera };\n const viewport = Math.max(this.canvas.clientWidth, this.canvas.clientHeight);\n this.animate(flyTo(() => this.engine, from, to, viewport, options));\n this.engine.preload(to.center[0], to.center[1], to.zoom, to.pitch, to.bearing);\n }\n\n /** Longitudes and latitudes the view covers on the ground: `[west, south, east, north]` */\n getBounds(): [west: number, south: number, east: number, north: number] {\n const [west = -180, south = -85, east = 180, north = 85] = this.engine.bounds();\n return [west, south, east, north];\n }\n\n /** Lowest zoom the camera accepts (the widest view) */\n setMinZoom(zoom: number): void {\n this.settings.zoomRange[0] = zoom;\n this.engine.setZoomRange(...this.settings.zoomRange);\n this.requestRender();\n }\n\n setMaxZoom(zoom: number): void {\n this.settings.zoomRange[1] = zoom;\n this.engine.setZoomRange(...this.settings.zoomRange);\n this.requestRender();\n }\n\n /** Highest pitch, degrees, up to 85 */\n setMaxPitch(pitch: number): void {\n this.settings.maxPitch = pitch;\n this.engine.setMaxPitch(pitch);\n this.requestRender();\n }\n\n /** Sky over the plane and the fog of the ground (see `GeoMapOptions.atmosphere`); undefined to remove them */\n setAtmosphere(options: AtmosphereOptions | undefined): void {\n this.settings.atmosphere = atmosphereSettings(options);\n this.engine.setAtmosphere(this.settings.atmosphere);\n this.requestRender();\n }\n\n setProjection(projection: Projection): void {\n this.settings.globe = projection === 'globe';\n this.engine.setGlobe(this.settings.globe);\n this.requestRender();\n }\n\n /** How tiles load and show (see `LoadingMode`) */\n setLoading(mode: LoadingMode): void {\n this.settings.loading = mode;\n this.engine.setImmediateLoading(mode === 'immediate');\n this.requestRender();\n }\n\n /** Space behind the globe (stars, atmosphere halo) */\n setSky(enabled: boolean): void {\n this.settings.sky = enabled;\n this.engine.setSky(enabled);\n this.requestRender();\n }\n\n /** Tints what can be seen from a point and what is hidden from it, within a range, all around or within a cone\n * (`direction`): the relief, extrusions, 3D Tiles and models hide what lies behind them (only what the map has\n * loaded for its view). Several observers (16 at most): what any of them sees is seen, what is hidden from all those\n * that reach it is hidden, in the colors and opacity of the first. Undefined or none removes it */\n setViewshed(options: ViewshedOptions | readonly ViewshedOptions[] | undefined): void {\n let observers: readonly ViewshedOptions[] = [];\n if (options) observers = 'position' in options ? [options] : options;\n const [first] = observers;\n if (!first) {\n this.engine.clearViewshed();\n return;\n }\n this.engine.setViewshed(\n new Float64Array(\n observers.flatMap((o) => [\n o.position[0],\n o.position[1],\n o.height ?? 1.7,\n o.range ?? 1000,\n ...(o.direction === undefined\n ? [Number.NaN, 0, 0, 0]\n : [o.direction, o.tilt ?? 0, o.fov ?? 60, o.verticalFov ?? 40]),\n ]),\n ),\n new Float32Array(rgb(first.visibleColor ?? '#2f9e44')),\n new Float32Array(rgb(first.hiddenColor ?? '#e03131')),\n first.opacity ?? 0.55,\n );\n this.requestRender();\n }\n\n /** Relief under the basemap: true for the body's terrain model (on the Earth the worldwide Terrain Tiles, NASA's\n * on the Moon and Mars), one of the Earth's models by name (`'ign'`), its options, or false; on another body, its\n * options with a `url` */\n setTerrain(terrain: boolean | TerrainModel | TerrainOptions): void {\n this.settings.terrain = terrainSettings(terrain, this.body, this.settings.body.radius, this.terrainLoader);\n const t = this.settings.terrain;\n this.engine.setTerrain(t?.url, t?.exaggeration ?? 1, t?.maxZoom, t?.geoid, t?.loader);\n this.attributionChanged();\n this.requestRender();\n }\n\n /** @internal The credits of the raster layers (the basemap first) and of the relief in use, each once */\n attributions(): string[] {\n const layers = this.layers.map((layer) => this.rasterCredits.get(layer));\n const credits = [...layers, this.settings.terrain?.attribution];\n return [...new Set(credits.filter((c): c is string => c !== undefined))];\n }\n\n /** @internal Calls `listener` when the credits change; returns what stops it */\n onAttributionChange(listener: () => void): () => void {\n this.attributionListeners.add(listener);\n return () => this.attributionListeners.delete(listener);\n }\n\n private attributionChanged(): void {\n for (const listener of this.attributionListeners) listener();\n }\n\n /** Color behind the map, a CSS color (its alpha ignored) */\n setBackground(color: string): void {\n this.settings.background = rgb(color);\n this.engine.setBackground(...this.settings.background);\n this.requestRender();\n }\n\n /** Tile counters of the raster layers, for diagnostics */\n stats(): RasterLayerStats[] {\n return this.engine.stats();\n }\n\n /**\n * The feature under a screen point (CSS pixels), undefined if none: its layer id and index. Reads one pixel of an\n * offscreen picking pass, whatever the number of features, but waits for the GPU to finish the frame (a stall): for\n * clicks and one-off queries. On hover, listen to 'hoverfeature' instead, which picks without waiting.\n */\n pick(point: Point, radius = 0, layers?: readonly Layer[]): PickHit | undefined {\n const only = layers && Uint32Array.from(layers.map((l) => l.id));\n return this.engine.pick(point[0], point[1], radius, only);\n }\n\n /**\n * The feature under a screen point (CSS pixels), or the nearest one within `radius` pixels: its layer handle, its\n * index there and, for line, circle and fill layers, the feature itself; undefined if none. `layers` restricts the\n * search to some layers (the others hide nothing).\n */\n pickFeature(point: Point, options: { radius?: number; layers?: readonly Layer[] } = {}): FeatureHit | undefined {\n const hit = this.pick(point, options.radius ?? 0, options.layers);\n return hit && this.featureHit(hit);\n }\n\n /** A hit with its layer handle and feature; undefined if the layer is gone */\n private featureHit(hit: PickHit): FeatureHit | undefined {\n const layer = this.layers.find((l) => l.id === hit.layer);\n if (!layer) return undefined;\n const feature =\n 'featureAt' in layer && typeof layer.featureAt === 'function'\n ? (layer.featureAt(hit.index) as Feature | undefined)\n : undefined;\n return { layer, index: hit.index, feature };\n }\n\n /** Asks the engine what is under the pointer; its answer, read without waiting for the GPU, comes on a later frame */\n private requestHoverPick(point: Point): void {\n const { radius = 0, layers } = this.hoverPicking;\n const only = layers && Uint32Array.from(layers.map((l) => l.id));\n // The engine cannot pick (no request in flight): the poll under way would wait for nothing\n if (!this.engine.requestPick(point[0], point[1], radius, only)) {\n this.cancelHoverPick();\n return;\n }\n // A new request replaces the one in flight (in the engine too): one poll loop at most\n this.hoverPolls = 0;\n if (!this.hoverPoll) this.hoverPoll = requestAnimationFrame(this.pollHoverPick);\n }\n\n private readonly pollHoverPick = (): void => {\n this.hoverPoll = 0;\n if (this.lost) return;\n const result: PickResult | undefined = this.engine.pollPick();\n if (!result) {\n // The GPU is not done yet (usually a frame): asked again next frame, without drawing; given up at last\n this.hoverPolls += 1;\n if (this.hoverPolls < MAX_POLLS) this.hoverPoll = requestAnimationFrame(this.pollHoverPick);\n return;\n }\n this.emit('hoverfeature', {\n point: [result.x, result.y],\n lonLat: result.lonLat,\n hit: result.hit && this.featureHit(result.hit),\n });\n };\n\n private cancelHoverPick(): void {\n cancelAnimationFrame(this.hoverPoll);\n this.hoverPoll = 0;\n }\n\n /** Screen point (CSS pixels) of a position, undefined behind the camera */\n project(lonLat: LonLat): Point | undefined {\n return this.engine.project(lonLat[0], lonLat[1]);\n }\n\n /** Position under a screen point (CSS pixels), undefined above the horizon */\n unproject(point: Point): LonLat | undefined {\n return this.engine.ground(point[0], point[1]);\n }\n\n // ── Overlays and controls ──\n\n /** Adds a control in a corner of the map; controls stack from the corner inward */\n addControl(control: Control, position: ControlPosition = 'top-right'): this {\n if (this.controls.has(control)) return this;\n const element = control.onAdd(this);\n element.classList.add('isard-ctrl');\n // In the bottom corners the first control added stays lowest, as in MapLibre\n if (position.startsWith('bottom')) this.corners[position].prepend(element);\n else this.corners[position].append(element);\n this.controls.set(control, element);\n return this;\n }\n\n removeControl(control: Control): this {\n const element = this.controls.get(control);\n if (!element) return this;\n this.controls.delete(control);\n control.onRemove(this);\n element.remove();\n return this;\n }\n\n /** @internal Shows a marker or popup, placed after every frame from now on */\n attachOverlay(item: Positioned, element: HTMLElement): void {\n this.overlay.append(element);\n this.positioned.add(item);\n item.position(this.size);\n }\n\n /** @internal */\n detachOverlay(item: Positioned, element: HTMLElement): void {\n this.positioned.delete(item);\n element.remove();\n }\n\n /** @internal Places one overlay now (it moved), without drawing a frame */\n positionOverlay(item: Positioned): void {\n if (this.positioned.has(item)) item.position(this.size);\n }\n\n // ── Layers ──\n\n /** Replaces the basemap and the IGN hillshade, under the other layers (hillshade by default: 0, none). The former\n * names of the Géoplateforme basemaps (`LegacyBasemap`) are taken under their new ones */\n setBasemap(basemap: Basemap, hillshade = 0): void {\n const name = checkBasemap(basemap);\n if (this.basemap && this.hasLayer(this.basemap)) this.basemap.remove();\n if (this.hillshade && this.hasLayer(this.hillshade)) this.hillshade.remove();\n // Its raster and labels go with it\n this.vector?.tiles.destroy();\n this.vector = undefined;\n const vector = VECTOR_BASEMAPS[name as keyof typeof VECTOR_BASEMAPS];\n if (vector) {\n const tiles = new VectorTiles(this, {\n style: vector,\n ...(this.basemapWorkerUrl ? { workerUrl: this.basemapWorkerUrl } : {}),\n });\n this.basemap = tiles.raster(this.basemapTileSize ? { size: this.basemapTileSize } : {});\n this.vector = { tiles, labels: tiles.labels() as SymbolLayer<unknown> };\n } else {\n this.basemap = name === 'none' ? undefined : this.addRaster(BASEMAPS[name as keyof typeof BASEMAPS]);\n }\n // Off the Earth, the body's own color\n if (this.earth) this.settings.globeColor = SEA[name];\n this.engine.setGlobeColor(...this.settings.globeColor);\n this.hillshade = hillshade > 0 ? this.addRaster({ ...HILLSHADE, opacity: hillshade }) : undefined;\n if (this.hillshade) this.toBottom(this.hillshade);\n if (this.basemap) this.toBottom(this.basemap);\n this.attributionChanged();\n }\n\n /** Raster tiles ({z}, {x}, {y} URL; Web Mercator, or reprojected from another `grid`: longitudes and latitudes,\n * Lambert-93, UTM…), over the layers already added */\n addRaster(options: RasterOptions & { before?: Layer }): RasterLayer {\n const { url, grid = 'mercator', opacity = 1, saturation = 1, size, before } = options;\n let { minZoom = 0, maxZoom = 19 } = options;\n // A PMTiles archive (`pmtiles://…`): its tiles read by range requests\n let loader = options.loader ?? pmtilesRasterLoader(url, size ?? 256);\n if (grid !== 'mercator' && !loader) {\n if (grid === 'equirectangular') {\n // `minZoom` and `maxZoom` are levels of the source: its level n has the pixel size of Mercator level n + 1 at\n // the equator\n loader = gridLoader(\n url,\n resolveGrid(equirectangularGrid(minZoom, maxZoom)),\n size ?? 256,\n this.remoteReprojection,\n );\n [minZoom, maxZoom] = [minZoom + 1, maxZoom + 1];\n } else {\n const resolved = resolveGrid(grid);\n const zooms = gridZooms(resolved);\n minZoom = options.minZoom ?? zooms.minZoom;\n maxZoom = options.maxZoom ?? zooms.maxZoom;\n loader = gridLoader(url, resolved, size ?? 256, this.remoteReprojection);\n }\n }\n const layer = new RasterLayer(this, { url, minZoom, maxZoom, opacity, saturation, size, loader });\n this.place(layer, before);\n if (options.attribution) {\n this.rasterCredits.set(layer, options.attribution);\n this.attributionChanged();\n }\n return layer;\n }\n\n /**\n * A PMTiles archive (v3) read by range requests: a raster layer of its images, or vector tiles drawn with `style` (by\n * default a plain style of the archive's layers) with their labels. Its header decides which unless `kind` says;\n * `url` with or without `pmtiles://`, relative to the page, or a `blob:` URL. `addRaster({ url: 'pmtiles://…' })` and\n * a style source `pmtiles://…` in `vectorTiles` read archives too\n */\n addPmtiles(url: string, options: PmtilesOptions = {}): Promise<RasterLayer | VectorTiles> {\n return pmtilesLayer(this, url, options);\n }\n\n /** Line network colored by a value per node; `layer.setValues` recolors it in one texture upload */\n addNetwork(options: NetworkOptions): NetworkLayer {\n const { nodes, edges, lines, costs, edgeWidths, width = 2, max = 1800, contour = 0, opacity = 1 } = options;\n const { halo = 0, haloOpacity = 0.11, ramp, unreachedColor = 'rgba(140, 140, 140, 0.25)', fade = 0 } = options;\n const style = { width, max, contour, opacity, halo, haloOpacity, ramp, unreachedColor, fade };\n validateNetwork(nodes, edges);\n return this.add(new NetworkLayer(this, { nodes, edges, lines }, costs, style, edgeWidths));\n }\n\n /** Lines from GeoJSON (line strings, and polygon outlines), styled per feature */\n addLines<P = Record<string, unknown>>(options: LineOptions<P>): LineLayer<P> {\n return this.place(new LineLayer<P>(this, options.data, lineStyle(options)), options.before);\n }\n\n /** Discs from GeoJSON points, styled per feature */\n addCircles<P = Record<string, unknown>>(options: CircleOptions<P>): CircleLayer<P> {\n return this.place(new CircleLayer<P>(this, options.data, circleStyle(options)), options.before);\n }\n\n /** Filled polygons from GeoJSON (holes included), styled per feature; over the relief they lie on the ground */\n addFills<P = Record<string, unknown>>(options: FillOptions<P>): FillLayer<P> {\n return this.place(new FillLayer<P>(this, options.data, fillStyle(options)), options.before);\n }\n\n /** The application's fragment shader over the ground (see `GroundOptions`); under `before` if given */\n addGround(options: GroundOptions & { before?: Layer }): GroundLayer {\n return this.place(new GroundLayer(this, options), options.before);\n }\n\n /** Polygons raised into blocks with depth (buildings), styled per feature; tiles of them come with `setTile` */\n addExtrusions<P = Record<string, unknown>>(options: ExtrusionOptions<P> = {}): ExtrusionLayer<P> {\n return this.place(new ExtrusionLayer<P>(this, options.data, extrusionStyle(options)), options.before);\n }\n\n /** Text labels from GeoJSON (points, the middle of lines, the center of polygons), placed without overlaps */\n addSymbols<P = Record<string, unknown>>(options: SymbolOptions<P>): SymbolLayer<P> {\n return this.place(new SymbolLayer<P>(this, options.data, symbolStyle(options)), options.before);\n }\n\n /** @internal The glyphs of the symbol layers, loaded on first use */\n get glyphs(): Glyphs {\n if (!this.#glyphs) {\n // The engine's context: the atlas stays within its texture size limit\n const gl = this.canvas.getContext('webgl2');\n const max = gl?.getParameter(gl.MAX_TEXTURE_SIZE);\n this.#glyphs = new Glyphs(this.glyphsUrl, typeof max === 'number' ? max : undefined);\n this.#glyphs.attach(this.engine);\n }\n return this.#glyphs;\n }\n\n /** @internal The icons of the symbol layers: the application's images and the vector basemaps' sprites */\n get icons(): Icons {\n if (!this.#icons) {\n const gl = this.canvas.getContext('webgl2');\n const max = gl?.getParameter(gl.MAX_TEXTURE_SIZE);\n this.#icons = new Icons(typeof max === 'number' ? max : undefined);\n this.#icons.attach(this.engine);\n }\n return this.#icons;\n }\n\n /**\n * An image for the symbol layers' icons (`icon: name`), as MapLibre's `addImage`: its pixels (an image, a canvas,\n * `ImageData`, or RGBA bytes with their size), `pixelRatio` 2 for an image drawn at twice its CSS size; `sdf` for a\n * signed distance field drawn in the `iconColor`; `stretchX`, `stretchY` and `content` for an icon stretched around its\n * text. An image of the same name is replaced\n */\n addImage(\n name: string,\n image: Pixels | (CanvasImageSource & { width: number; height: number }),\n options: ImageOptions = {},\n ): void {\n const pixels = 'data' in image ? image : readPixels(image);\n if (!pixels) throw new Error(`isard: the image ${name} has no pixels`);\n this.icons.add(name, pixels, options);\n }\n\n hasImage(name: string): boolean {\n return this.#icons?.has(name) ?? false;\n }\n\n removeImage(name: string): void {\n this.#icons?.remove(name);\n }\n\n /**\n * Vector tiles with a MapLibre style (OpenFreeMap's Positron by default): `tiles.raster(…)` draws its fills and lines\n * (or a subset) as a raster layer, `tiles.labels(…)` its labels. `setBasemap('osm-positron')` does both for the\n * basemap.\n */\n vectorTiles(options: VectorTilesOptions = {}): VectorTiles {\n const tiles = new VectorTiles(this, {\n ...(this.basemapWorkerUrl ? { workerUrl: this.basemapWorkerUrl } : {}),\n ...options,\n });\n // Its workers stop with the map\n this.vectorSets.add(tiles);\n return tiles;\n }\n\n /** @internal Forgets a destroyed `VectorTiles` */\n dropVectorTiles(tiles: VectorTiles): void {\n this.vectorSets.delete(tiles);\n }\n\n /**\n * @internal The workers for a `VectorTiles`: the map's shared pool, or a pool of its own (`own`, to stop with it)\n * when it asks for another count or URL\n */\n basemapWorkers(count?: number, url?: string | URL): { pool: BasemapWorkers; own: boolean } {\n const sharedUrl = this.basemapWorkerUrl ?? defaultWorkerUrl();\n const shared = defaultWorkerCount();\n const workers = Math.max(1, count ?? shared);\n const workerUrl = url ?? sharedUrl;\n if (workers === shared && String(workerUrl) === String(sharedUrl)) {\n this.basemapPool ??= new BasemapWorkers(shared, sharedUrl);\n return { pool: this.basemapPool, own: false };\n }\n return { pool: new BasemapWorkers(workers, workerUrl), own: true };\n }\n\n /**\n * The workers decoding the relief and reprojecting rasters: the map's pool, unless the map has no workers\n * (`workers: false` or 0, or none in this browser): that is done in the page then\n */\n private decodingPool(): BasemapWorkers | undefined {\n const { workers } = this.tiles3dOptions;\n if (this.gone || workers === false || (workers !== undefined && workers <= 0)) return undefined;\n if (typeof Worker === 'undefined' || typeof OffscreenCanvas === 'undefined') return undefined;\n return this.basemapWorkers().pool;\n }\n\n private readonly remoteHeights: RemoteHeights = (url, encoding, floor, tile, signal) =>\n this.decodingPool()?.heights(url, encoding, floor, tile, signal, this);\n\n private readonly remoteReprojection: RemoteReprojection = (job, tile, signal) =>\n this.decodingPool()?.reproject(job, tile, signal, this);\n\n /** The loader of the relief tiles of `url` in a PNG encoding (one per URL, encoding and floor) */\n private readonly terrainLoader = (url: string, encoding: PngEncoding, floor?: number): TerrainLoader => {\n const key = `${encoding} ${floor ?? ''} ${url}`;\n let loader = this.terrainLoaders.get(key);\n if (!loader) {\n loader = encodedTerrainLoader(url, encoding, floor, this.remoteHeights);\n this.terrainLoaders.set(key, loader);\n }\n return loader;\n };\n\n /** Adds a layer, under `before` if given */\n private place<L extends Layer>(layer: L, before: Layer | undefined): L {\n this.add(layer);\n if (before) this.moveLayer(layer, before);\n return layer;\n }\n\n /** Textured meshes in 3D Tiles (photogrammetry, buildings), drawn with depth over the basemap */\n addTiles3d(options: Tiles3dOptions): Tiles3dLayer {\n const { url, maxScreenSpaceError = 16, opacity = 1, pointSize } = options;\n return this.add(\n new Tiles3dLayer(this, url, { maxScreenSpaceError, opacity, ...(pointSize !== undefined ? { pointSize } : {}) }),\n );\n }\n\n /**\n * A point cloud (see `PointCloudOptions`): a COPC file read by range requests (IGN's LiDAR HD…), or 3D Tiles\n * points; with depth, on the engine with 3D Tiles; under `before` if given\n */\n addPointCloud(options: PointCloudOptions & { before?: Layer }): PointCloudLayer {\n return this.place(new PointCloudLayer(this, options), options.before);\n }\n\n /** A glTF model drawn at positions (see `ModelOptions`), with depth; on the engine with 3D Tiles, as they are */\n addModels(options: ModelOptions & { before?: Layer }): ModelLayer {\n return this.place(new ModelLayer(this, options), options.before);\n }\n\n /**\n * The page's own WebGL drawing at its place among the layers, in every frame (see `CustomLayerInterface`): raw\n * WebGL, three.js… with the matrices of the frame (`frame.matrixAt`); under `before` if given\n */\n addCustomLayer(layer: CustomLayerInterface, options: { before?: Layer } = {}): CustomLayer {\n const custom = new CustomLayer(\n this,\n layer,\n this.canvas,\n this,\n (lon, lat, altitude) => this.engineClass.customMatrix(lon, lat, altitude),\n () => this.getCamera(),\n );\n return this.place(custom, options.before);\n }\n\n // ── Frames ──\n\n /** Asks for a frame; several calls before the next frame draw it once */\n requestRender(): void {\n // Changes made by listeners during a frame are drawn by that frame; nothing is drawn without a context\n if (this.inFrame || this.lost) return;\n this.frameRequest ||= requestAnimationFrame((now) => this.frame(now));\n }\n\n /** @internal Runs `step` every frame until it returns false; replaces the running animation */\n animate(step: Step | undefined): void {\n // A flight cut short no longer needs its destination\n if (this.animation) this.engine.clearPreload();\n this.animation = step;\n this.requestRender();\n }\n\n /** @internal The pointer moved over the map (undefined: it left). Without 'hover' and 'hoverfeature' listeners,\n * nothing is drawn: a still map stays idle under a moving mouse */\n hover(point: Point | undefined): void {\n if (!point) {\n this.hoverPoint = undefined;\n this.cancelHoverPick();\n return;\n }\n if (this.listeners.hover.size === 0 && this.listeners.hoverfeature.size === 0) return;\n this.hoverPoint = point;\n this.requestRender();\n }\n\n private frame(now: number): void {\n this.frameRequest = 0;\n try {\n this.inFrame = true;\n this.drawFrame(now);\n } finally {\n // Whatever throws in a frame, the next ones are still drawn\n this.inFrame = false;\n }\n }\n\n private drawFrame(now: number): void {\n if (this.animation && !this.animation(now)) this.animation = undefined;\n const camera = this.getCamera();\n const key = `${camera.center}|${camera.zoom}|${camera.pitch}|${camera.bearing}`;\n const moved = key !== this.lastCamera;\n if (moved) {\n // The first frame is no move\n if (!this.moving && this.lastCamera !== '') {\n this.moving = true;\n this.emit('movestart', camera);\n }\n this.lastCamera = key;\n this.emit('move', camera);\n } else if (this.moving && !this.animation && !this.interaction?.active) {\n this.moving = false;\n this.emit('moveend', camera);\n }\n // Values for the pointer position are computed before drawing, in the same frame\n let hovered: Point | undefined;\n if (this.hoverPoint) {\n const point = this.hoverPoint;\n hovered = point;\n this.hoverPoint = undefined;\n // The position under the pointer for its listeners only (a 'hoverfeature' alone does not need it)\n if (this.listeners.hover.size > 0) this.emit('hover', { point, lonLat: this.unproject(point) });\n }\n const t0 = performance.now();\n // The engine asks for the next frame while it draws (uploads past the frame budget, fades): not ignored\n this.inFrame = false;\n // As the engine has it now (a listener may have moved it), for the custom layers drawn in the frame\n this.frameCamera = this.layers.some((layer) => layer instanceof CustomLayer) ? this.engine.camera() : undefined;\n let loading: boolean;\n try {\n loading = this.engine.render();\n } finally {\n this.frameCamera = undefined;\n }\n this.inFrame = true;\n // The picking pass sees the frame just drawn; its answer comes on a later frame\n if (hovered && this.listeners.hoverfeature.size > 0) this.requestHoverPick(hovered);\n // Overlays follow the frame just drawn (camera, relief altitudes): all in one pass, transforms only\n for (const item of this.positioned) item.position(this.size);\n this.emit('render', { ms: performance.now() - t0 });\n this.inFrame = false;\n // A move goes on until a frame finds the camera still: that frame sends 'moveend'\n if (this.animation || (moved && this.moving)) this.requestRender();\n // Idle: nothing loading (the engine with 3D Tiles neither), no animation, no frame asked for (uploads waiting,\n // fades, listeners)\n if (loading || this.upgrading || this.animation || this.frameRequest !== 0) {\n this.settled = false;\n } else if (!this.settled) {\n this.settled = true;\n this.emit('idle', {});\n }\n }\n\n /** Resizes when the device pixel ratio changes (browser zoom, a window moved to another screen) */\n private watchRatio(): void {\n if (typeof matchMedia !== 'function') return;\n const query = matchMedia(`(resolution: ${window.devicePixelRatio || 1}dppx)`);\n const changed = () => {\n // A query for the new ratio\n this.unwatchRatio?.();\n this.watchRatio();\n this.resize();\n };\n query.addEventListener('change', changed, { once: true });\n this.unwatchRatio = () => query.removeEventListener('change', changed);\n }\n\n private resize(): void {\n if (this.lost) return;\n const { clientWidth: width, clientHeight: height } = this.canvas;\n const ratio = window.devicePixelRatio || 1;\n this.canvas.width = Math.round(width * ratio);\n this.canvas.height = Math.round(height * ratio);\n this.engine.resize(width, height, ratio);\n this.size = [width, height];\n this.emit('resize', { width, height });\n // Draw at once: a resized canvas is cleared, waiting one frame would flash\n cancelAnimationFrame(this.frameRequest);\n this.frame(performance.now());\n }\n\n destroy(): void {\n if (this.gone) return;\n this.gone = true;\n // A context restored later rebuilds nothing\n this.unwatchContext();\n const camera = this.getCamera();\n cancelAnimationFrame(this.frameRequest);\n this.cancelHoverPick();\n this.vector?.tiles.destroy();\n for (const tiles of [...this.vectorSets]) tiles.destroy();\n this.vectorSets.clear();\n this.basemapPool?.terminate();\n this.basemapPool = undefined;\n this.unwatchRatio?.();\n this.unwatchRatio = undefined;\n this.resizeObserver.disconnect();\n this.interaction?.destroy();\n this.loader?.destroy();\n // Custom layers free their WebGL objects, models their data, while the context is there\n for (const layer of this.layers) layer.dispose();\n this.engine.free();\n // Work still under way (labels being shaped, tiles arriving, timers) may call the engine after this: it finds one\n // that does nothing, and nothing is drawn again\n this.#engine = destroyedEngine(camera);\n // Glyph ranges still arriving upload to it, not to the freed engine\n this.#glyphs?.attach(this.#engine);\n this.#icons?.attach(this.#engine);\n this.lost = true;\n for (const control of [...this.controls.keys()]) this.removeControl(control);\n this.positioned.clear();\n this.canvas.remove();\n this.overlay.remove();\n for (const position of CORNERS) this.corners[position].remove();\n this.container.classList.remove('isard-map');\n for (const listeners of Object.values(this.listeners)) listeners.clear();\n }\n}\n"]}
@@ -0,0 +1,68 @@
1
+ /** What a PMTiles archive's tiles are */
2
+ export type PmtilesTileType = 'unknown' | 'mvt' | 'png' | 'jpeg' | 'webp' | 'avif';
3
+ /** The header of a PMTiles archive (v3) */
4
+ export interface PmtilesHeader {
5
+ rootDirectoryOffset: number;
6
+ rootDirectoryLength: number;
7
+ metadataOffset: number;
8
+ metadataLength: number;
9
+ leafDirectoryOffset: number;
10
+ leafDirectoryLength: number;
11
+ tileDataOffset: number;
12
+ tileDataLength: number;
13
+ /** 1 none, 2 gzip, 3 brotli, 4 zstd (only none and gzip are read) */
14
+ internalCompression: number;
15
+ tileCompression: number;
16
+ tileType: PmtilesTileType;
17
+ minZoom: number;
18
+ maxZoom: number;
19
+ /** `[west, south, east, north]`, degrees */
20
+ bounds: [number, number, number, number];
21
+ center: [lon: number, lat: number, zoom: number];
22
+ }
23
+ /** An entry of a directory: a run of tiles (`runLength` > 0) or a leaf directory (0) */
24
+ export interface PmtilesEntry {
25
+ tileId: number;
26
+ offset: number;
27
+ length: number;
28
+ runLength: number;
29
+ }
30
+ /** The tile id of z/x/y: the tiles of the lower levels, then the position along the level's Hilbert curve */
31
+ export declare function zxyToTileId(z: number, x: number, y: number): number;
32
+ /** The z/x/y of a tile id (the inverse of `zxyToTileId`) */
33
+ export declare function tileIdToZxy(id: number): [z: number, x: number, y: number];
34
+ /** The entries of a directory (decompressed) */
35
+ export declare function parseDirectory(bytes: Uint8Array): PmtilesEntry[];
36
+ /** The entry holding a tile id: its run of tiles, or the leaf directory it falls in; undefined if none */
37
+ export declare function findEntry(entries: readonly PmtilesEntry[], id: number): PmtilesEntry | undefined;
38
+ /** The header of an archive from its first bytes */
39
+ export declare function parseHeader(bytes: Uint8Array): PmtilesHeader;
40
+ /** Bytes as they are stored, decompressed (1: none, 2: gzip; 0, unknown, is read as none) */
41
+ export declare function decompress(bytes: Uint8Array, compression: number): Promise<Uint8Array>;
42
+ /** A PMTiles archive at a URL (range requests) or in a `Blob` (a dropped file) */
43
+ export declare class PMTiles {
44
+ readonly source: string | Blob;
45
+ private head;
46
+ /** The leaf directories read, by offset */
47
+ private readonly leaves;
48
+ /** The whole file, when the server answered a range request with it (small files, `blob:` URLs) */
49
+ private whole;
50
+ constructor(source: string | Blob);
51
+ /** `length` bytes from `offset` */
52
+ private range;
53
+ private load;
54
+ /** The archive's header */
55
+ header(): Promise<PmtilesHeader>;
56
+ /** The archive's JSON metadata (`vector_layers`, `attribution`, `name`…); `{}` if it has none */
57
+ metadata(): Promise<Record<string, unknown>>;
58
+ private leaf;
59
+ /** The bytes of tile z/x/y, decompressed (a vector tile ungzipped); undefined where the archive has none */
60
+ tile(z: number, x: number, y: number, signal?: AbortSignal): Promise<Uint8Array | undefined>;
61
+ }
62
+ /** The reader of an archive URL (without `pmtiles://`), shared */
63
+ export declare function pmtiles(url: string): PMTiles;
64
+ /** The archive URL of a `pmtiles://` URL, absolute (relative to the page), or undefined for another URL */
65
+ export declare function pmtilesUrl(url: string, base?: string): string | undefined;
66
+ /** A tile URL `pmtiles://<archive>/{z}/{x}/{y}` (with its numbers in) read from its archive: its bytes, undefined
67
+ * where there is none; undefined too (`false`) for a URL that is not one */
68
+ export declare function pmtilesTile(url: string, signal?: AbortSignal): Promise<Uint8Array | undefined> | false;