isard 1.2.0 → 1.3.0

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.
Files changed (94) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/README.md +44 -39
  3. package/dist/basemap/pmtileslayer.d.ts +33 -0
  4. package/dist/basemap/pmtileslayer.js +97 -0
  5. package/dist/basemap/pmtileslayer.js.map +1 -0
  6. package/dist/basemap/trees.d.ts +26 -0
  7. package/dist/basemap/trees.js +141 -0
  8. package/dist/basemap/trees.js.map +1 -0
  9. package/dist/basemap/vectorstyle.d.ts +10 -0
  10. package/dist/basemap/vectorstyle.js +35 -0
  11. package/dist/basemap/vectorstyle.js.map +1 -1
  12. package/dist/basemap/vectortiles.d.ts +67 -44
  13. package/dist/basemap/vectortiles.js +386 -302
  14. package/dist/basemap/vectortiles.js.map +1 -1
  15. package/dist/basemap/workerpool.d.ts +17 -0
  16. package/dist/basemap/workerpool.js +194 -0
  17. package/dist/basemap/workerpool.js.map +1 -0
  18. package/dist/basemap.worker.js +2 -2
  19. package/dist/basemap.worker.js.map +15 -8
  20. package/dist/decoder.worker.js +4 -4
  21. package/dist/decoder.worker.js.map +3 -3
  22. package/dist/engine-loader.d.ts +5 -1
  23. package/dist/engine-loader.js +11 -1
  24. package/dist/engine-loader.js.map +1 -1
  25. package/dist/geoplateforme.d.ts +16 -0
  26. package/dist/geoplateforme.js +23 -0
  27. package/dist/geoplateforme.js.map +1 -1
  28. package/dist/index.d.ts +11 -4
  29. package/dist/index.js +9 -2
  30. package/dist/index.js.map +1 -1
  31. package/dist/isard_bg.wasm +0 -0
  32. package/dist/isard_core_bg.wasm +0 -0
  33. package/dist/isard_tess_bg.wasm +0 -0
  34. package/dist/layers/layers.js +9 -0
  35. package/dist/layers/layers.js.map +1 -1
  36. package/dist/layers/vectors.d.ts +60 -0
  37. package/dist/layers/vectors.js +130 -0
  38. package/dist/layers/vectors.js.map +1 -0
  39. package/dist/map/frame-loop.d.ts +3 -0
  40. package/dist/map/frame-loop.js +6 -0
  41. package/dist/map/frame-loop.js.map +1 -1
  42. package/dist/map/raster-source.js +1 -1
  43. package/dist/map/raster-source.js.map +1 -1
  44. package/dist/map/workers.d.ts +1 -1
  45. package/dist/map/workers.js +1 -1
  46. package/dist/map/workers.js.map +1 -1
  47. package/dist/map.d.ts +21 -6
  48. package/dist/map.js +65 -11
  49. package/dist/map.js.map +1 -1
  50. package/dist/react/IsardMap.js +1 -0
  51. package/dist/react/IsardMap.js.map +1 -1
  52. package/dist/react/Swipe.d.ts +11 -4
  53. package/dist/react/Swipe.js +26 -15
  54. package/dist/react/Swipe.js.map +1 -1
  55. package/dist/react/VectorGeometry.d.ts +35 -0
  56. package/dist/react/VectorGeometry.js +82 -0
  57. package/dist/react/VectorGeometry.js.map +1 -0
  58. package/dist/react/context.d.ts +2 -1
  59. package/dist/react/context.js.map +1 -1
  60. package/dist/react/index.d.ts +2 -1
  61. package/dist/react/index.js +2 -1
  62. package/dist/react/index.js.map +1 -1
  63. package/dist/types.d.ts +24 -1
  64. package/dist/types.js.map +1 -1
  65. package/dist/ui/minimap.d.ts +25 -0
  66. package/dist/ui/minimap.js +90 -0
  67. package/dist/ui/minimap.js.map +1 -0
  68. package/dist/ui/scale.d.ts +19 -0
  69. package/dist/ui/scale.js +44 -0
  70. package/dist/ui/scale.js.map +1 -0
  71. package/dist/ui/search.d.ts +25 -0
  72. package/dist/ui/search.js +119 -0
  73. package/dist/ui/search.js.map +1 -0
  74. package/dist/ui/style.js +17 -0
  75. package/dist/ui/style.js.map +1 -1
  76. package/dist/util/sun.d.ts +11 -0
  77. package/dist/util/sun.js +26 -0
  78. package/dist/util/sun.js.map +1 -0
  79. package/dist/wasm/isard.d.ts +82 -7
  80. package/dist/wasm/isard.js +229 -8
  81. package/dist/wasm/isard_core.d.ts +82 -7
  82. package/dist/wasm/isard_core.js +229 -8
  83. package/dist/wasm/isard_tess.d.ts +109 -0
  84. package/dist/wasm/isard_tess.js +398 -0
  85. package/dist/workers/basemap/geometry.d.ts +72 -0
  86. package/dist/workers/basemap/labels.d.ts +8 -0
  87. package/dist/workers/basemap/raster.d.ts +10 -0
  88. package/dist/workers/basemap/tiles.d.ts +65 -0
  89. package/dist/workers/basemap/trees.d.ts +19 -0
  90. package/dist/workers/basemap.worker.d.ts +126 -22
  91. package/dist/workers/basemap.worker.js +72 -551
  92. package/dist/workers/basemap.worker.js.map +1 -1
  93. package/package.json +5 -4
  94. package/vite.js +10 -2
@@ -1 +1 @@
1
- {"version":3,"file":"basemap.worker.js","sourceRoot":"","sources":["../../src/workers/basemap.worker.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Worker of the vector basemaps: fetches and decodes vector tiles (kept for the tiles that share them), draws their\n * fills, lines and circles with a MapLibre style into images (Canvas 2D, off the main thread) for the raster pool,\n * with the style's raster layers under them, and lists the label candidates of the style's symbol layers (their texts\n * and icons) for the page to shape and place. Extrusions are drawn flat, as fills. It also decodes the altitudes of PNG relief tiles and\n * draws the rasters reprojected from other grids (planned by the page), for the map's other layers.\n *\n * A raster tile of level z covers 256 CSS pixels at map zoom z - 1 (MapLibre's 512 px convention): it is drawn from\n * the vector tile of level z - 1 (or the deepest one the source has), with the style at that zoom.\n */\n\nimport { decode, type TileFeature, type TileLayer } from '../basemap/mvt.ts';\nimport { pmtilesTile } from '../basemap/pmtiles.ts';\nimport { type Job, resampler } from '../basemap/resample.ts';\nimport { fetchHeights, type PngEncoding, type Surface } from '../basemap/terrain.ts';\nimport {\n type CandidateIcon,\n type CandidateOverlap,\n type Context,\n color,\n context,\n css,\n evaluate,\n filter,\n isExpression,\n isFeatureDependent,\n type Json,\n type LabelCandidate,\n labelFont,\n type RasterSource,\n type StyleLayer,\n text,\n zoomStops,\n} from '../basemap/vectorstyle.ts';\nimport { type HeaderRules, setHeaderRules, withHeaders } from '../engine/requests.ts';\nimport { latitude, longitude } from '../util/geo.ts';\nimport { Lru } from '../util/lru.ts';\n\nexport type { LabelCandidate, RasterSource };\n\n/** Fetch priority of a request (`fetch`'s `priority`, a hint to the browser) */\nexport type Priority = 'high' | 'low' | 'auto';\n\n/** A tile's image or labels, asked of a worker; or a tile of another layer decoded: the altitudes of a PNG relief\n * tile, a Mercator tile reprojected from the source images of its plan (keeping `cached` of them) */\nexport type BasemapWork =\n | { type: 'render'; key: string; z: number; x: number; y: number; size: number; priority?: Priority }\n /** `zoom`: the zoom the style is evaluated at, past the source's deepest level (`z` by default) */\n | { type: 'labels'; key: string; z: number; x: number; y: number; zoom?: number; priority?: Priority }\n | { type: 'heights'; url: string; encoding: PngEncoding; floor?: number }\n | { type: 'reproject'; job: Job; cached: number };\n\nexport type BasemapRequest =\n /** The page's request headers (`setRequestHeaders`) */\n | { type: 'headers'; rules: HeaderRules }\n | {\n type: 'init';\n /** Renderers by key: each draws its own layers of the same source */\n key: string;\n tiles: string;\n maxzoom: number;\n layers: StyleLayer[];\n /** The style's raster sources, by name, for its raster layers */\n rasters?: Record<string, RasterSource>;\n /** The style's sprites, for the fill patterns (loaded once by the page) */\n sprites?: Sprite[];\n /** Workers of the pool: each keeps its share of the decoded tiles */\n workers?: number;\n }\n | (BasemapWork & { id: number })\n | { type: 'abort'; id: number }\n /** A renderer no longer used: forgotten */\n | { type: 'drop'; key: string };\n\nexport type BasemapResponse =\n | { id: number; image: ImageBitmap }\n | { id: number; missing: true }\n | { id: number; error: string }\n | { id: number; labels: LabelCandidate[] }\n | { id: number; heights: Float32Array };\n\ninterface Renderer {\n tiles: string;\n maxzoom: number;\n layers: StyleLayer[];\n rasters: Record<string, RasterSource>;\n sprites: Sprite[];\n /** Fill patterns by icon name, cut from the sprites once */\n patterns: Map<string, OffscreenCanvas | undefined>;\n}\n\n/** A sprite of the style: its images by name (`id:name` but in the default sprite) and its sheet */\nexport interface Sprite {\n image: ImageBitmap;\n icons: Record<string, { x: number; y: number; width: number; height: number; pixelRatio?: number }>;\n}\n\n/** An image of the sprites and its sheet */\nconst spriteIcon = (r: Renderer, name: string) => {\n const sprite = r.sprites.find((sp) => Boolean(sp.icons[name]));\n const icon = sprite?.icons[name];\n\n return sprite && icon ? { icon, image: sprite.image } : undefined;\n};\n\nconst renderers = new Map<string, Renderer>();\n/** Decoded tiles kept by the pool, shared among its workers (a vector tile always goes to the same worker): some\n * 2 MB each */\nconst CACHE = 96;\n/** Decoded tiles by URL; this worker's share of them, set by the renderers */\nconst cache = new Lru<string, Promise<Map<string, TileLayer> | undefined>>(CACHE);\n\n/** The decoded tiles one worker of `workers` keeps */\nexport const cacheShare = (workers: number): number => {\n return Math.max(16, Math.ceil(CACHE / Math.max(1, workers)));\n};\n/** Requests in progress, and those of them aborted (both forgotten once answered) */\nconst active = new Set<number>();\nconst aborted = new Set<number>();\n/** The signals of the relief and reprojection requests in progress, aborted with them */\nconst controllers = new Map<number, AbortController>();\n\n/** Where this worker reads the colors of the relief tiles back */\nconst heightsSurface: Surface = {};\n\n/** The reprojected rasters' source images this worker keeps, shared by every source */\nconst reprojection = resampler();\n\n/** Images of the raster sources by URL. An image dropped is freed once settled, after the renders that awaited it have\n * drawn it (they draw without awaiting again) */\nconst images = new Lru<string, Promise<ImageBitmap | undefined>>(64, (evicted) =>\n evicted.then(\n (bitmap) => setTimeout(() => bitmap?.close(), 0),\n () => undefined,\n ),\n);\n\n/** An image of a raster source (shared by every renderer); undefined where the source has none */\nconst image = (url: string, priority: Priority = 'auto'): Promise<ImageBitmap | undefined> => {\n const hit = images.get(url);\n\n if (hit) return hit;\n\n const pending = (async () => {\n // A tile of a PMTiles archive (`pmtiles://…/{z}/{x}/{y}`)\n const archived = pmtilesTile(url);\n\n if (archived) {\n const bytes = await archived;\n\n return bytes && createImageBitmap(new Blob([bytes]));\n }\n\n const init: PriorityInit = { priority };\n const response = await fetch(url, withHeaders(url, init));\n\n if (response.status === 404 || response.status === 204) return undefined;\n if (!response.ok) throw new Error(`${url}: ${response.status}`);\n\n return createImageBitmap(await response.blob());\n })();\n\n pending.catch(() => images.delete(url));\n images.set(url, pending);\n\n return pending;\n};\n\n/** `RequestInit` with the fetch priority, which the TypeScript DOM library may not know yet */\ntype PriorityInit = RequestInit & { priority?: Priority };\n\n/** A vector tile, decoded (shared by every renderer of its URL); the first request's priority fetches it */\nconst tile = (url: string, priority: Priority = 'auto'): Promise<Map<string, TileLayer> | undefined> => {\n const hit = cache.get(url);\n\n if (hit) return hit;\n\n const pending = (async () => {\n // A tile of a PMTiles archive, ungzipped by the reader\n const archived = pmtilesTile(url);\n\n if (archived) {\n const bytes = await archived;\n\n return bytes && decode(bytes);\n }\n for (let attempt = 0; ; attempt += 1) {\n const init: PriorityInit = { priority };\n const response = await fetch(url, withHeaders(url, init));\n\n if (response.status === 404 || response.status === 204) return undefined;\n if (response.ok) {\n // Every layer: renderers of other subsets share the tile\n return decode(new Uint8Array(await response.arrayBuffer()));\n }\n if (attempt >= 2) throw new Error(`${url}: ${response.status}`);\n await new Promise((r) => setTimeout(r, 400 * (attempt + 1)));\n }\n })();\n\n pending.catch(() => cache.delete(url));\n cache.set(url, pending);\n\n return pending;\n};\n\n/** The vector tile to draw a raster tile from, and where the raster tile lies in it (tile units) */\nconst source = (r: Renderer, z: number, x: number, y: number) => {\n const vz = Math.max(0, Math.min(z - 1, r.maxzoom));\n const d = z - vz;\n const n = 2 ** Math.max(0, d);\n const [vx, vy] = d >= 0 ? [Math.floor(x / n), Math.floor(y / n)] : [x, y];\n const url = r.tiles.replace('{z}', String(vz)).replace('{x}', String(vx)).replace('{y}', String(vy));\n // Fraction of the vector tile covered, and the offset in it\n const part = 1 / n;\n\n return { url, vz, vx, vy, part, ox: (x % n) * part, oy: (y % n) * part };\n};\n\nconst value = (layer: StyleLayer, group: 'paint' | 'layout', key: string, ctx: Context, fallback: unknown) => {\n const v = layer[group]?.[key];\n\n if (v === undefined) return fallback;\n\n // An array that is not an expression is a literal value (`text-font`, `text-offset`, `line-dasharray`)\n const out = Array.isArray(v) && !isExpression(v) ? v : evaluate(v, ctx);\n\n return out === undefined || out === null ? fallback : out;\n};\n\n/** A color with an opacity, for the canvas */\nconst paint = (c: unknown, opacity: number): string => {\n const rgba = color(c) ?? [0, 0, 0, 1];\n\n return css([rgba[0], rgba[1], rgba[2], rgba[3] * opacity]);\n};\n\nconst shown = (layer: StyleLayer, zoom: number): boolean => {\n if (layer.layout?.visibility === 'none') return false;\n\n return zoom >= (layer.minzoom ?? 0) && zoom < (layer.maxzoom ?? 24);\n};\n\nconst LINE_CAPS: ReadonlySet<unknown> = new Set<CanvasLineCap>(['butt', 'round', 'square']);\nconst LINE_JOINS: ReadonlySet<unknown> = new Set<CanvasLineJoin>(['bevel', 'miter', 'round']);\n\nconst isLineCap = (value: unknown): value is CanvasLineCap => LINE_CAPS.has(value);\nconst isLineJoin = (value: unknown): value is CanvasLineJoin => LINE_JOINS.has(value);\n\n/** A style's `line-cap` for the canvas: `butt` if it is none */\nconst lineCap = (value: unknown): CanvasLineCap => (isLineCap(value) ? value : 'butt');\n\n/** A style's `line-join` for the canvas: `miter` if it is none */\nconst lineJoin = (value: unknown): CanvasLineJoin => (isLineJoin(value) ? value : 'miter');\n\n/** The image of a fill pattern, cut from the sprite on first use */\nconst patternImage = (r: Renderer, name: string): OffscreenCanvas | undefined => {\n if (r.patterns.has(name)) return r.patterns.get(name);\n\n const cut = (): OffscreenCanvas | undefined => {\n const found = spriteIcon(r, name);\n\n if (!found || !(found.icon.width > 0) || !(found.icon.height > 0)) return undefined;\n\n const { icon } = found;\n const canvas = new OffscreenCanvas(icon.width, icon.height);\n\n canvas\n .getContext('2d')\n ?.drawImage(found.image, icon.x, icon.y, icon.width, icon.height, 0, 0, icon.width, icon.height);\n\n return canvas;\n };\n const image = cut();\n\n r.patterns.set(name, image);\n\n return image;\n};\n\n/** Canvases free for the next tiles, by size: one per tile being drawn at most */\nconst canvases = new Map<number, OffscreenCanvas[]>();\n\n/** A blank canvas of `size` pixels and its context, from the free ones if any */\nconst takeCanvas = (size: number): { canvas: OffscreenCanvas; g: OffscreenCanvasRenderingContext2D } => {\n const canvas = canvases.get(size)?.pop() ?? new OffscreenCanvas(size, size);\n // A canvas on the CPU: its pixels are read back here, in the worker, not on the main thread at the upload\n const g = canvas.getContext('2d', { willReadFrequently: true });\n\n if (!g) throw new Error('no 2D context');\n // The state a former tile left\n g.setTransform(1, 0, 0, 1, 0, 0);\n g.globalAlpha = 1;\n g.setLineDash([]);\n g.clearRect(0, 0, size, size);\n\n return { canvas, g };\n};\n\nconst giveCanvas = (canvas: OffscreenCanvas): void => {\n const free = canvases.get(canvas.width) ?? [];\n\n canvases.set(canvas.width, free);\n if (free.length < 4) free.push(canvas);\n};\n\n/**\n * The image of a drawn canvas, its alpha straight (the engine blends straight alpha). An opaque tile (a background\n * of full opacity, as a basemap's) is moved out of the canvas as it is, premultiplied and straight being the same\n * there; another one is read back unpremultiplied, copied\n */\nexport const tileImage = (\n canvas: OffscreenCanvas,\n g: OffscreenCanvasRenderingContext2D,\n opaque: boolean,\n): Promise<ImageBitmap> => {\n if (opaque) return Promise.resolve(canvas.transferToImageBitmap());\n\n return createImageBitmap(g.getImageData(0, 0, canvas.width, canvas.height), { premultiplyAlpha: 'none' });\n};\n\nconst render = async (r: Renderer, z: number, x: number, y: number, size: number, id: number, priority?: Priority) => {\n const s = source(r, z, x, y);\n const layers = await tile(s.url, priority);\n\n if (aborted.has(id)) return undefined;\n\n const { canvas, g } = takeCanvas(size);\n\n try {\n return await draw(r, s, layers, canvas, g, z, x, y, size, id, priority);\n } finally {\n giveCanvas(canvas);\n }\n};\n\nconst draw = async (\n r: Renderer,\n s: ReturnType<typeof source>,\n layers: Map<string, TileLayer> | undefined,\n canvas: OffscreenCanvas,\n g: OffscreenCanvasRenderingContext2D,\n z: number,\n x: number,\n y: number,\n size: number,\n id: number,\n priority?: Priority,\n) => {\n const zoom = Math.max(0, z - 1);\n // CSS pixels to canvas pixels: the tile is 256 CSS pixels across at its zoom\n const px = size / 256;\n let drawn = false;\n /** A background of full opacity covers the tile: every pixel stays opaque */\n let opaque = false;\n\n for (const layer of r.layers) {\n if (!shown(layer, zoom)) continue;\n\n const zctx: Context = { zoom, properties: {}, type: 'Unknown' };\n\n if (layer.type === 'background') {\n const fill = value(layer, 'paint', 'background-color', zctx, '#000');\n const opacity = Number(value(layer, 'paint', 'background-opacity', zctx, 1));\n\n g.fillStyle = paint(fill, opacity);\n g.fillRect(0, 0, size, size);\n if ((color(fill) ?? [0, 0, 0, 1])[3] * opacity >= 1) opaque = true;\n drawn = true;\n continue;\n }\n if (layer.type === 'raster') {\n const source = layer.source === undefined ? undefined : r.rasters[layer.source];\n\n if (!source) continue;\n\n // The canvas covers the Web Mercator tile (z, x, y): a source tile of 512 px covers it from a level coarser\n const rz = Math.max(0, Math.min(z - (source.tileSize >= 512 ? 1 : 0), source.maxzoom));\n const n = 2 ** (z - rz);\n const url = source.tiles\n .replace('{z}', String(rz))\n .replace('{x}', String(Math.floor(x / n)))\n .replace('{y}', String(Math.floor(y / n)));\n const picture = await image(url, priority).catch(() => undefined);\n\n if (aborted.has(id)) return undefined;\n if (!picture) continue;\n\n const [w, h] = [picture.width / n, picture.height / n];\n\n g.globalAlpha = Number(value(layer, 'paint', 'raster-opacity', zctx, 1));\n g.drawImage(picture, (x % n) * w, (y % n) * h, w, h, 0, 0, size, size);\n g.globalAlpha = 1;\n drawn = true;\n continue;\n }\n\n const data = layers?.get(layer['source-layer'] ?? '');\n\n if (!data) continue;\n\n // Tile units to canvas pixels\n const k = size / (data.extent * s.part);\n const [ox, oy] = [s.ox * data.extent, s.oy * data.extent];\n const path = (f: TileFeature, close: boolean) => {\n g.beginPath();\n for (const line of f.geometry) {\n for (let i = 0; i + 1 < line.length; i += 2) {\n const [lx, ly] = [((line[i] ?? 0) - ox) * k, ((line[i + 1] ?? 0) - oy) * k];\n\n if (i === 0) g.moveTo(lx, ly);\n else g.lineTo(lx, ly);\n }\n if (close) g.closePath();\n }\n };\n // Values that only depend on the zoom are evaluated once for the layer\n const dependent = new Map<string, boolean>();\n const get = (group: 'paint' | 'layout', key: string, ctx: Context, fallback: unknown) => {\n const known = dependent.get(key);\n const d = known ?? isFeatureDependent(layer[group]?.[key]);\n\n if (known === undefined) dependent.set(key, d);\n\n return value(layer, group, key, d ? ctx : zctx, fallback);\n };\n\n for (const f of data.features) {\n const ctx = context(f, zoom);\n\n if (!filter(layer.filter, ctx)) continue;\n if (layer.type === 'fill-extrusion' && f.type === 3) {\n // Flat, seen from above: its color\n path(f, true);\n g.fillStyle = paint(\n get('paint', 'fill-extrusion-color', ctx, '#000'),\n Number(get('paint', 'fill-extrusion-opacity', ctx, 1)),\n );\n g.fill('evenodd');\n drawn = true;\n } else if (layer.type === 'fill' && f.type === 3) {\n const opacity = Number(get('paint', 'fill-opacity', ctx, 1));\n const pattern = get('paint', 'fill-pattern', ctx, undefined);\n\n path(f, true);\n\n const icon = typeof pattern === 'string' ? spriteIcon(r, pattern)?.icon : undefined;\n const image = icon && typeof pattern === 'string' && patternImage(r, pattern);\n\n if (icon && image) {\n const p = g.createPattern(image, 'repeat');\n\n if (p) {\n p.setTransform(new DOMMatrix().scale(px / (icon.pixelRatio ?? 1)));\n g.globalAlpha = opacity;\n g.fillStyle = p;\n g.fill('evenodd');\n g.globalAlpha = 1;\n }\n } else {\n g.fillStyle = paint(get('paint', 'fill-color', ctx, '#000'), opacity);\n g.fill('evenodd');\n\n const outline = get('paint', 'fill-outline-color', ctx, undefined);\n\n if (outline !== undefined) {\n g.strokeStyle = paint(outline, opacity);\n g.lineWidth = px;\n g.setLineDash([]);\n g.stroke();\n }\n }\n drawn = true;\n } else if (layer.type === 'line' && f.type !== 1) {\n const width = Number(get('paint', 'line-width', ctx, 1));\n\n if (width <= 0) continue;\n\n // A gap: two lines on either side of it, drawn as one wide line (the casing of a road, its inside drawn over)\n const gap = Number(get('paint', 'line-gap-width', ctx, 0));\n\n g.strokeStyle = paint(get('paint', 'line-color', ctx, '#000'), Number(get('paint', 'line-opacity', ctx, 1)));\n g.lineWidth = (gap > 0 ? gap + 2 * width : width) * px;\n g.lineCap = lineCap(get('layout', 'line-cap', ctx, 'butt'));\n g.lineJoin = lineJoin(get('layout', 'line-join', ctx, 'miter'));\n\n const dash = get('paint', 'line-dasharray', ctx, undefined);\n\n g.setLineDash(Array.isArray(dash) ? dash.map((d) => Number(d) * width * px) : []);\n path(f, f.type === 3);\n g.stroke();\n drawn = true;\n } else if (layer.type === 'circle' && f.type === 1) {\n const radius = Number(get('paint', 'circle-radius', ctx, 5)) * px;\n\n g.fillStyle = paint(get('paint', 'circle-color', ctx, '#000'), Number(get('paint', 'circle-opacity', ctx, 1)));\n\n const stroke = Number(get('paint', 'circle-stroke-width', ctx, 0)) * px;\n\n g.strokeStyle = paint(\n get('paint', 'circle-stroke-color', ctx, '#000'),\n Number(get('paint', 'circle-stroke-opacity', ctx, 1)),\n );\n g.lineWidth = stroke;\n for (const point of f.geometry) {\n for (let i = 0; i + 1 < point.length; i += 2) {\n g.beginPath();\n g.arc(((point[i] ?? 0) - ox) * k, ((point[i + 1] ?? 0) - oy) * k, radius, 0, 2 * Math.PI);\n g.fill();\n if (stroke > 0) g.stroke();\n }\n }\n drawn = true;\n }\n }\n }\n if (!drawn && !layers) return null;\n\n return tileImage(canvas, g, opaque);\n};\n\n/** How a layer's text or icon (`prefix`) meets the others: allowed to overlap, ignored by the placement */\nconst overlapOf = (layer: StyleLayer, prefix: 'text' | 'icon', ctx: Context): CandidateOverlap => {\n const allow = Boolean(value(layer, 'layout', `${prefix}-allow-overlap`, ctx, false));\n const ignore = Boolean(value(layer, 'layout', `${prefix}-ignore-placement`, ctx, false));\n\n if (allow && ignore) return true;\n if (allow) return 'allow';\n\n return ignore ? 'ignore' : false;\n};\n\n/** A pair of numbers of a style value, `fallback` if it is not one */\nconst pair = (v: unknown, fallback: [number, number]): [number, number] => {\n return Array.isArray(v) ? [Number(v[0] ?? fallback[0]), Number(v[1] ?? fallback[1])] : fallback;\n};\n\n/** Top, right, bottom, left of one to four numbers, as CSS's sides */\nconst sides = (v: unknown): [number, number, number, number] => {\n const n = (Array.isArray(v) ? v : [v]).map((x) => Number(x) || 0);\n const [top = 0, right = top, bottom = top, left = right] = n;\n\n return [top, right, bottom, left];\n};\n\n/** A label's text in the case of its `text-transform` */\nconst cased = (t: string, transform: unknown): string => {\n if (transform === 'uppercase') return t.toUpperCase();\n if (transform === 'lowercase') return t.toLowerCase();\n\n return t;\n};\n\n/** Points every `spacing` along a line (tile units, x and y interleaved), the first half a spacing in (the middle of a\n * shorter line): each point and the segment it lies on (x, y, x0, y0, x1, y1) */\nexport const lineAnchors = (line: readonly number[], spacing: number): number[][] => {\n let length = 0;\n\n for (let i = 2; i + 1 < line.length; i += 2) {\n length += Math.hypot((line[i] ?? 0) - (line[i - 2] ?? 0), (line[i + 1] ?? 0) - (line[i - 1] ?? 0));\n }\n\n const out: number[][] = [];\n\n if (!(length > 0) || !(spacing > 0)) return out;\n\n let next = Math.min(spacing / 2, length / 2);\n let walked = 0;\n\n for (let i = 2; i + 1 < line.length; i += 2) {\n const [ax, ay, bx, by] = [line[i - 2] ?? 0, line[i - 1] ?? 0, line[i] ?? 0, line[i + 1] ?? 0];\n const d = Math.hypot(bx - ax, by - ay);\n\n while (d > 0 && next <= walked + d) {\n const t = (next - walked) / d;\n\n out.push([ax + (bx - ax) * t, ay + (by - ay) * t, ax, ay, bx, by]);\n next += spacing;\n }\n walked += d;\n }\n\n return out;\n};\n\n/** Longitude and latitude of a point of tile (z, x, y) in tile units */\nconst lonLat = (z: number, x: number, y: number, extent: number, px: number, py: number): [number, number] => {\n const n = 2 ** z;\n\n return [longitude((x + px / extent) / n), latitude((y + py / extent) / n)];\n};\n\n/** The icon of a label: its layer's icon properties for the feature */\nconst iconOf = (\n layer: StyleLayer,\n image: string,\n ctx: Context,\n placement: 'point' | 'line',\n sizeOf: (layer: StyleLayer) => Json,\n): CandidateIcon => {\n const alignment = value(layer, 'layout', 'icon-rotation-alignment', ctx, 'auto');\n const fit = String(value(layer, 'layout', 'icon-text-fit', ctx, 'none'));\n const padding = value(layer, 'layout', 'icon-text-fit-padding', ctx, [0, 0, 0, 0]);\n\n return {\n image,\n size: isFeatureDependent(layer.layout?.['icon-size'])\n ? Number(value(layer, 'layout', 'icon-size', ctx, 1))\n : sizeOf(layer),\n anchor: String(value(layer, 'layout', 'icon-anchor', ctx, 'center')),\n offset: pair(value(layer, 'layout', 'icon-offset', ctx, [0, 0]), [0, 0]),\n rotate: Number(value(layer, 'layout', 'icon-rotate', ctx, 0)) || 0,\n alignment: alignment === 'map' || (alignment === 'auto' && placement === 'line') ? 'map' : 'viewport',\n overlap: overlapOf(layer, 'icon', ctx),\n optional: Boolean(value(layer, 'layout', 'icon-optional', ctx, false)),\n fit: fit === 'width' || fit === 'height' || fit === 'both' ? fit : 'none',\n padding: sides(padding),\n color: String(value(layer, 'paint', 'icon-color', ctx, '#000')),\n opacity: Number(value(layer, 'paint', 'icon-opacity', ctx, 1)),\n };\n};\n\nconst labels = async (\n r: Renderer,\n z: number,\n x: number,\n y: number,\n id: number,\n priority?: Priority,\n zoom = z,\n): Promise<LabelCandidate[]> => {\n const url = r.tiles.replace('{z}', String(z)).replace('{x}', String(x)).replace('{y}', String(y));\n const layers = await tile(url, priority);\n\n if (!layers || aborted.has(id)) return [];\n\n const out: LabelCandidate[] = [];\n // The text size of a layer when it depends on the zoom only: legacy stops as they are, an expression as stops\n const sizes = new Map<StyleLayer, Json>();\n const sizeOf = (layer: StyleLayer): Json => {\n const known = sizes.get(layer);\n\n if (known !== undefined) return known;\n\n const v = layer.layout?.['text-size'] ?? 16;\n const s = isExpression(v) ? zoomStops(v) : v;\n\n sizes.set(layer, s);\n\n return s;\n };\n // The icon size of a layer when it depends on the zoom only, as the text size\n const iconSizes = new Map<StyleLayer, Json>();\n const iconSizeOf = (layer: StyleLayer): Json => {\n const known = iconSizes.get(layer);\n\n if (known !== undefined) return known;\n\n const v = layer.layout?.['icon-size'] ?? 1;\n const s = isExpression(v) ? zoomStops(v) : v;\n\n iconSizes.set(layer, s);\n\n return s;\n };\n\n r.layers.forEach((layer, index) => {\n const layout = layer.layout ?? {};\n\n if (layer.type !== 'symbol' || !shown(layer, zoom)) return;\n if (layout['text-field'] === undefined && layout['icon-image'] === undefined) return;\n\n const data = layers.get(layer['source-layer'] ?? '');\n\n if (!data) return;\n\n const zctx: Context = { zoom, properties: {}, type: 'Unknown' };\n const placement = value(layer, 'layout', 'symbol-placement', zctx, 'point') === 'line' ? 'line' : 'point';\n const textAlong =\n placement === 'line' && value(layer, 'layout', 'text-rotation-alignment', zctx, 'auto') !== 'viewport';\n\n for (const f of data.features) {\n const ctx = context(f, zoom);\n\n if (!filter(layer.filter, ctx)) continue;\n\n const field = text(layout['text-field'], ctx).trim();\n const image = text(layout['icon-image'], ctx).trim();\n\n if (!field && !image) continue;\n\n const t = cased(field, value(layer, 'layout', 'text-transform', ctx, 'none'));\n const fonts = value(layer, 'layout', 'text-font', ctx, ['Noto Sans Regular']);\n const font = labelFont(Array.isArray(fonts) && typeof fonts[0] === 'string' ? fonts[0] : 'Noto Sans Regular');\n const base = {\n layer: index,\n text: t,\n font,\n // Zoom stops are kept for the engine; a value of the feature evaluated here\n size: isFeatureDependent(layer.layout?.['text-size'])\n ? Number(value(layer, 'layout', 'text-size', ctx, 16))\n : sizeOf(layer),\n color: String(value(layer, 'paint', 'text-color', ctx, '#000')),\n haloColor: String(value(layer, 'paint', 'text-halo-color', ctx, 'rgba(0,0,0,0)')),\n haloWidth: Number(value(layer, 'paint', 'text-halo-width', ctx, 0)),\n anchor: String(value(layer, 'layout', 'text-anchor', ctx, 'center')),\n offset: pair(value(layer, 'layout', 'text-offset', ctx, [0, 0]), [0, 0]),\n maxWidth: Number(value(layer, 'layout', 'text-max-width', ctx, 10)),\n lineHeight: Number(value(layer, 'layout', 'text-line-height', ctx, 1.2)),\n overlap: overlapOf(layer, 'text', ctx),\n ...(textAlong ? { textAlong } : {}),\n ...(value(layer, 'layout', 'text-optional', ctx, false) ? { textOptional: true } : {}),\n ...(image ? { icon: iconOf(layer, image, ctx, placement, iconSizeOf) } : {}),\n };\n\n if (f.type === 1) {\n for (const point of f.geometry) {\n for (let i = 0; i + 1 < point.length; i += 2) {\n const [px, py] = [point[i] ?? 0, point[i + 1] ?? 0];\n\n // Points in the buffer belong to the neighbouring tile\n if (px < 0 || py < 0 || px >= data.extent || py >= data.extent) continue;\n\n const [lon, lat] = lonLat(z, x, y, data.extent, px, py);\n\n out.push({ ...base, lon, lat });\n }\n }\n } else if (!t && placement === 'line') {\n // Icons alone along lines (one-way arrows): every `symbol-spacing` CSS pixels (a tile is 512 across at its\n // level, twice as many at each zoom past it)\n const spacing =\n (Number(value(layer, 'layout', 'symbol-spacing', ctx, 250)) * data.extent) / (512 * 2 ** (zoom - z));\n\n for (const line of f.geometry) {\n for (const [px = 0, py = 0, ax = 0, ay = 0, bx = 0, by = 0] of lineAnchors(line, Math.max(spacing, 1))) {\n if (px < 0 || py < 0 || px >= data.extent || py >= data.extent) continue;\n\n const [lon, lat] = lonLat(z, x, y, data.extent, px, py);\n const [lon1, lat1] = lonLat(z, x, y, data.extent, bx, by);\n const [lon0, lat0] = lonLat(z, x, y, data.extent, ax, ay);\n\n out.push({ ...base, lon, lat, along: [lon1 - lon0, lat1 - lat0] });\n }\n }\n } else {\n // The middle of the longest line inside the tile, along it\n let best: number[] | undefined;\n let bestLength = 0;\n\n for (const line of f.geometry) {\n let length = 0;\n\n for (let i = 2; i + 1 < line.length; i += 2) {\n length += Math.hypot((line[i] ?? 0) - (line[i - 2] ?? 0), (line[i + 1] ?? 0) - (line[i - 1] ?? 0));\n }\n if (length > bestLength) {\n bestLength = length;\n best = line;\n }\n }\n if (!best || bestLength < data.extent / 32) continue;\n\n let rest = bestLength / 2;\n\n for (let i = 2; i + 1 < best.length; i += 2) {\n const [ax, ay, bx, by] = [best[i - 2] ?? 0, best[i - 1] ?? 0, best[i] ?? 0, best[i + 1] ?? 0];\n const d = Math.hypot(bx - ax, by - ay);\n\n if (d >= rest && d > 0) {\n const [px, py] = [ax + ((bx - ax) * rest) / d, ay + ((by - ay) * rest) / d];\n\n if (px < 0 || py < 0 || px >= data.extent || py >= data.extent) break;\n\n const [lon, lat] = lonLat(z, x, y, data.extent, px, py);\n const [lon1, lat1] = lonLat(z, x, y, data.extent, bx, by);\n const [lon0, lat0] = lonLat(z, x, y, data.extent, ax, ay);\n\n out.push({ ...base, lon, lat, ...(placement === 'line' ? { along: [lon1 - lon0, lat1 - lat0] } : {}) });\n break;\n }\n rest -= d;\n }\n }\n }\n });\n\n return out;\n};\n\nconst post = (message: BasemapResponse, transfer: Transferable[] = []) =>\n (self as unknown as Worker).postMessage(message, transfer);\n\nself.onmessage = async ({ data }: MessageEvent<BasemapRequest>) => {\n if (data.type === 'headers') {\n setHeaderRules(data.rules);\n\n return;\n }\n if (data.type === 'init') {\n if (data.workers !== undefined) cache.capacity = cacheShare(data.workers);\n renderers.set(data.key, {\n tiles: data.tiles,\n maxzoom: data.maxzoom,\n layers: data.layers,\n rasters: data.rasters ?? {},\n sprites: data.sprites ?? [],\n patterns: new Map(),\n });\n\n return;\n }\n if (data.type === 'drop') {\n // Its copy of the sprites\n renderers.get(data.key)?.sprites.forEach((sprite) => {\n sprite.image.close();\n });\n renderers.delete(data.key);\n\n return;\n }\n if (data.type === 'abort') {\n // An abort that arrives after the answer is ignored\n if (active.has(data.id)) aborted.add(data.id);\n controllers.get(data.id)?.abort();\n\n return;\n }\n if (data.type === 'heights' || data.type === 'reproject') {\n await decodeTile(data);\n\n return;\n }\n active.add(data.id);\n\n const r = renderers.get(data.key);\n\n try {\n if (!r) throw new Error(`no renderer ${data.key}`);\n if (data.type === 'render') {\n const image = await render(r, data.z, data.x, data.y, data.size, data.id, data.priority);\n\n if (image) post({ id: data.id, image }, [image]);\n else post({ id: data.id, missing: true });\n } else {\n post({ id: data.id, labels: await labels(r, data.z, data.x, data.y, data.id, data.priority, data.zoom) });\n }\n } catch (error) {\n post({ id: data.id, error: String(error) });\n } finally {\n active.delete(data.id);\n aborted.delete(data.id);\n }\n};\n\n/** A tile of another layer: the altitudes of a relief tile, or a reprojected raster tile */\nconst decodeTile = async (data: Extract<BasemapWork, { type: 'heights' | 'reproject' }> & { id: number }) => {\n const controller = new AbortController();\n\n controllers.set(data.id, controller);\n try {\n if (data.type === 'heights') {\n const heights = await fetchHeights(data.url, data.encoding, data.floor, controller.signal, heightsSurface);\n\n if (heights) post({ id: data.id, heights }, [heights.buffer]);\n else post({ id: data.id, missing: true });\n } else {\n reprojection.cache.capacity = data.cached;\n\n const image = await reprojection.draw(data.job, controller.signal);\n\n if (image) post({ id: data.id, image }, [image]);\n else post({ id: data.id, missing: true });\n }\n } catch (error) {\n post({ id: data.id, error: String(error) });\n } finally {\n controllers.delete(data.id);\n }\n};\n"]}
1
+ {"version":3,"file":"basemap.worker.js","sourceRoot":"","sources":["../../src/workers/basemap.worker.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Worker of the vector basemaps: fetches and decodes vector tiles (kept for the tiles that share them), draws their\n * fills, lines and circles with a MapLibre style into images (Canvas 2D, off the main thread) for the raster pool,\n * with the style's raster layers under them, and lists the label candidates of the style's symbol layers (their texts\n * and icons) for the page to shape and place. Extrusions are drawn flat, as fills. Or it cuts the fills, lines and\n * buildings of a tile into geometry for the engine to draw as such (`vectors`), with their style per feature (a\n * building's color, height and base height). It also decodes the\n * altitudes of PNG relief tiles and draws the rasters reprojected from other grids (planned by the page), for the\n * map's other layers.\n *\n * A raster tile of level z covers 256 CSS pixels at map zoom z - 1 (MapLibre's 512 px convention): it is drawn from\n * the vector tile of level z - 1 (or the deepest one the source has), with the style at that zoom.\n *\n * This module answers the page's messages; the jobs are in `./basemap/`: the state they share (`tiles.ts`), the\n * images (`raster.ts`), the labels (`labels.ts`), the geometry (`geometry.ts`), the trees (`trees.ts`).\n */\n\nimport type { Value } from '../basemap/mvt.ts';\nimport { type Job, resampler } from '../basemap/resample.ts';\nimport { fetchHeights, type PngEncoding, type Surface } from '../basemap/terrain.ts';\nimport { type LabelCandidate, type RasterSource, type StyleLayer, vectorKind } from '../basemap/vectorstyle.ts';\nimport { type HeaderRules, setHeaderRules } from '../engine/requests.ts';\nimport { polygons, tess, tessellate, tessellator, vectors } from './basemap/geometry.ts';\nimport { labels } from './basemap/labels.ts';\nimport { render } from './basemap/raster.ts';\nimport { aborted, active, cache, cacheShare, renderers, type Sprite } from './basemap/tiles.ts';\nimport { trees } from './basemap/trees.ts';\n\nexport type { LabelCandidate, RasterSource, Sprite };\n\n/** Fetch priority of a request (`fetch`'s `priority`, a hint to the browser) */\nexport type Priority = 'high' | 'low' | 'auto';\n\n/** A tile's image or labels, asked of a worker; or a tile of another layer decoded: the altitudes of a PNG relief\n * tile, a Mercator tile reprojected from the source images of its plan (keeping `cached` of them) */\nexport type BasemapWork =\n | { type: 'render'; key: string; z: number; x: number; y: number; size: number; priority?: Priority }\n /** `zoom`: the zoom the style is evaluated at, past the source's deepest level (`z` by default) */\n | { type: 'labels'; key: string; z: number; x: number; y: number; zoom?: number; priority?: Priority }\n /** The polygons of the renderer's layers (buildings), for extrusions */\n | { type: 'polygons'; key: string; z: number; x: number; y: number; priority?: Priority }\n /** Trees scattered over the polygons of the renderer's layers, `spacing[s]` metres apart in layer `s` (0: none), at\n * most `maxTrees` */\n | {\n type: 'trees';\n key: string;\n z: number;\n x: number;\n y: number;\n spacing: number[];\n maxTrees: number;\n priority?: Priority;\n }\n /** The fills and lines of the renderer's layers cut to the tile, for the engine to draw as geometry; `styles`: their\n * style only, the layers' paint changed (the same features, in the same order). A tile past the source's deepest\n * level is cut from its tile of that level (overzoom); `deepest`, the deepest level asked for (default the\n * source's), is styled past itself, as the map stretches it */\n | {\n type: 'vectors';\n key: string;\n z: number;\n x: number;\n y: number;\n deepest?: number;\n styles?: boolean;\n /** With the prisms of the fills (a relief under them) */\n prism?: boolean;\n priority?: Priority;\n }\n | { type: 'heights'; url: string; encoding: PngEncoding; floor?: number }\n | { type: 'reproject'; job: Job; cached: number };\n\nexport type BasemapRequest =\n /** The page's request headers (`setRequestHeaders`) */\n | { type: 'headers'; rules: HeaderRules }\n /** Where the tessellation module is (`isard_tess_bg.wasm`), loaded with the first `vectors` job */\n | { type: 'tess'; url: string }\n | {\n type: 'init';\n /** Renderers by key: each draws its own layers of the same source */\n key: string;\n tiles: string;\n maxzoom: number;\n layers: StyleLayer[];\n /** The style's raster sources, by name, for its raster layers */\n rasters?: Record<string, RasterSource>;\n /** The style's sprites, for the fill patterns (loaded once by the page) */\n sprites?: Sprite[];\n /** Workers of the pool: each keeps its share of the decoded tiles */\n workers?: number;\n }\n | (BasemapWork & { id: number })\n | { type: 'abort'; id: number }\n /** A renderer no longer used: forgotten */\n | { type: 'drop'; key: string };\n\nexport type BasemapResponse =\n | { id: number; image: ImageBitmap }\n | { id: number; missing: true }\n | { id: number; error: string }\n | { id: number; labels: LabelCandidate[] }\n | { id: number; polygons: TilePolygons }\n | { id: number; trees: Float64Array }\n | { id: number; vectors: TileVectors }\n | { id: number; styles: Float32Array }\n | { id: number; heights: Float32Array };\n\n/** The polygons of a tile in Mercator [0, 1], as the extrusions take them (`PolygonArrays`), and their properties */\nexport interface TilePolygons {\n arrays: {\n points: Float64Array;\n ringStart: Uint32Array;\n polygonStart: Uint32Array;\n feature: Uint32Array;\n };\n properties: Record<string, Value>[];\n}\n\n/**\n * The geometry of a vector tile for the engine (`setVectorTile`), in Mercator [0, 1], cut to the tile: a styled\n * feature is a feature of the tile in one of the renderer's layers (the sublayers, in their order), numbered layer\n * after layer. The polygons and lines of sublayer `s` are `fillStart[s] .. fillStart[s + 1]` and `lineStart[s] ..\n * lineStart[s + 1]` (one more entry than the renderer's layers)\n */\nexport interface TileVectors {\n fills: {\n points: Float64Array;\n ringStart: Uint32Array;\n polygonStart: Uint32Array;\n feature: Uint32Array;\n fillStart: Uint32Array;\n };\n lines: { points: Float64Array; start: Uint32Array; feature: Uint32Array; lineStart: Uint32Array };\n /** The style of each styled feature, `FLOATS` (32) each, as the engine's line layers take it */\n styles: Float32Array;\n /** The tile's corners (west, north, east, south, Mercator): no wall of a building along its edges, where one cut\n * there goes on in the next tile */\n tile?: Float64Array;\n /** Its feature's properties (shared by the styled features of one feature) and its sublayer */\n properties: Record<string, Value>[];\n sublayer: Uint16Array;\n /** The geometry made ready for the GPU by the tessellation module (the engine's `setVectorTileMesh`); without it,\n * the engine does that on the main thread */\n mesh?: TileMesh;\n}\n\n/** A vector tile ready for the GPU, as the tessellation module makes it (`TessellatedTile`) */\nexport interface TileMesh {\n /** Fill vertices, as bytes */\n vertices: Uint8Array;\n indices: Uint32Array;\n /** Per sublayer: its top cap and the rest of its prism, first and end of each */\n fillRanges: Uint32Array;\n prism: boolean;\n /** Line pieces, as bytes */\n pieces: Uint8Array;\n /** Feature and length of each line */\n lineTable: Float32Array;\n /** Per sublayer: its pieces, first and end */\n lineRanges: Uint32Array;\n /** Blocks of the extrusion sublayers (buildings), as bytes */\n blocks: Uint8Array;\n blockIndices: Uint32Array;\n /** Per sublayer: its blocks' triangles, first and end */\n blockRanges: Uint32Array;\n /** Min x, min y, max x, max y of the tile's points */\n bounds: Float64Array;\n}\n\n/** The signals of the relief and reprojection requests in progress, aborted with them */\nconst controllers = new Map<number, AbortController>();\n\n/** Where this worker reads the colors of the relief tiles back */\nconst heightsSurface: Surface = {};\n\n/** The reprojected rasters' source images this worker keeps, shared by every source */\nconst reprojection = resampler();\n\nconst post = (message: BasemapResponse, transfer: Transferable[] = []) =>\n (self as unknown as Worker).postMessage(message, transfer);\n\nself.onmessage = async ({ data }: MessageEvent<BasemapRequest>) => {\n if (data.type === 'headers') {\n setHeaderRules(data.rules);\n\n return;\n }\n if (data.type === 'tess') {\n tess.url = data.url;\n\n return;\n }\n if (data.type === 'init') {\n if (data.workers !== undefined) cache.capacity = cacheShare(data.workers);\n renderers.set(data.key, {\n tiles: data.tiles,\n maxzoom: data.maxzoom,\n layers: data.layers,\n rasters: data.rasters ?? {},\n sprites: data.sprites ?? [],\n patterns: new Map(),\n });\n\n return;\n }\n if (data.type === 'drop') {\n // Its copy of the sprites\n renderers.get(data.key)?.sprites.forEach((sprite) => {\n sprite.image.close();\n });\n renderers.delete(data.key);\n\n return;\n }\n if (data.type === 'abort') {\n // An abort that arrives after the answer is ignored\n if (active.has(data.id)) aborted.add(data.id);\n controllers.get(data.id)?.abort();\n\n return;\n }\n if (data.type === 'heights' || data.type === 'reproject') {\n await decodeTile(data);\n\n return;\n }\n active.add(data.id);\n\n const r = renderers.get(data.key);\n\n try {\n if (!r) throw new Error(`no renderer ${data.key}`);\n if (data.type === 'render') {\n const image = await render(r, data.z, data.x, data.y, data.size, data.id, data.priority);\n\n if (image) post({ id: data.id, image }, [image]);\n else post({ id: data.id, missing: true });\n } else if (data.type === 'trees') {\n const out = await trees(r, data.z, data.x, data.y, data.id, data.spacing, data.maxTrees, data.priority);\n\n if (!out) post({ id: data.id, missing: true });\n else post({ id: data.id, trees: out }, [out.buffer]);\n } else if (data.type === 'polygons') {\n const tilePolygons = await polygons(r, data.z, data.x, data.y, data.id, data.priority);\n\n if (!tilePolygons) post({ id: data.id, missing: true });\n else {\n const { points, ringStart, polygonStart, feature } = tilePolygons.arrays;\n\n post({ id: data.id, polygons: tilePolygons }, [\n points.buffer,\n ringStart.buffer,\n polygonStart.buffer,\n feature.buffer,\n ]);\n }\n } else if (data.type === 'vectors') {\n const out = await vectors(r, data, data.id, data.styles === true, data.priority);\n\n if (!out) post({ id: data.id, missing: true });\n else if (out instanceof Float32Array) post({ id: data.id, styles: out }, [out.buffer]);\n else {\n const raised = Uint8Array.from(r.layers, (l) => (vectorKind(l) === 'extrusion' ? 1 : 0));\n const mesh = (await tessellator()) ? tessellate(out, raised, data.prism === true) : undefined;\n const { fills, lines } = out;\n\n post({ id: data.id, vectors: mesh ? { ...out, mesh } : out }, [\n ...[fills.points, fills.ringStart, fills.polygonStart, fills.feature, fills.fillStart].map((a) => a.buffer),\n ...[lines.points, lines.start, lines.feature, lines.lineStart].map((a) => a.buffer),\n out.styles.buffer,\n out.sublayer.buffer,\n ...(mesh\n ? [\n mesh.vertices,\n mesh.indices,\n mesh.fillRanges,\n mesh.pieces,\n mesh.lineTable,\n mesh.lineRanges,\n mesh.blocks,\n mesh.blockIndices,\n mesh.blockRanges,\n mesh.bounds,\n ]\n : []\n ).map((a) => a.buffer),\n ]);\n }\n } else {\n post({ id: data.id, labels: await labels(r, data.z, data.x, data.y, data.id, data.priority, data.zoom) });\n }\n } catch (error) {\n post({ id: data.id, error: String(error) });\n } finally {\n active.delete(data.id);\n aborted.delete(data.id);\n }\n};\n\n/** A tile of another layer: the altitudes of a relief tile, or a reprojected raster tile */\nconst decodeTile = async (data: Extract<BasemapWork, { type: 'heights' | 'reproject' }> & { id: number }) => {\n const controller = new AbortController();\n\n controllers.set(data.id, controller);\n try {\n if (data.type === 'heights') {\n const heights = await fetchHeights(data.url, data.encoding, data.floor, controller.signal, heightsSurface);\n\n if (heights) post({ id: data.id, heights }, [heights.buffer]);\n else post({ id: data.id, missing: true });\n } else {\n reprojection.cache.capacity = data.cached;\n\n const image = await reprojection.draw(data.job, controller.signal);\n\n if (image) post({ id: data.id, image }, [image]);\n else post({ id: data.id, missing: true });\n }\n } catch (error) {\n post({ id: data.id, error: String(error) });\n } finally {\n controllers.delete(data.id);\n }\n};\n"]}
package/package.json CHANGED
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "isard",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "A WebGL2 map engine for large, interactive data layers, labels and 3D Tiles over raster or vector basemaps (Rust core in WebAssembly)",
5
5
  "license": "MIT",
6
6
  "author": "Kevin Graff",
7
- "homepage": "https://graffkevin.github.io/isard/",
7
+ "homepage": "https://ideal-adventure-zqn6y6p.pages.github.io/",
8
8
  "repository": {
9
9
  "type": "git",
10
- "url": "git+https://github.com/graffkevin/isard.git",
10
+ "url": "git+https://github.com/IGNF/isard.git",
11
11
  "directory": "packages/isard"
12
12
  },
13
- "bugs": "https://github.com/graffkevin/isard/issues",
13
+ "bugs": "https://github.com/IGNF/isard/issues",
14
14
  "keywords": [
15
15
  "map",
16
16
  "webgl2",
@@ -61,6 +61,7 @@
61
61
  "./isard_bg.wasm": "./dist/isard_bg.wasm",
62
62
  "./isard_core_bg.wasm": "./dist/isard_core_bg.wasm",
63
63
  "./isard_points_bg.wasm": "./dist/isard_points_bg.wasm",
64
+ "./isard_tess_bg.wasm": "./dist/isard_tess_bg.wasm",
64
65
  "./package.json": "./package.json"
65
66
  },
66
67
  "files": [
package/vite.js CHANGED
@@ -8,14 +8,22 @@
8
8
  * ```
9
9
  *
10
10
  * In development the package is left out of Vite's dependency pre-bundling, so that its files are found next to it.
11
- * In a build its five files (the engines `isard_bg.wasm`, `isard_core_bg.wasm`, `isard_points_bg.wasm`, the workers
11
+ * In a build its six files (the engines `isard_bg.wasm`, `isard_core_bg.wasm`, the modules `isard_points_bg.wasm`,
12
+ * `isard_tess_bg.wasm`, the workers
12
13
  * `decoder.worker.js`, `basemap.worker.js`) are copied to `<outDir>/<folder>/`, and the page tells the maps where they
13
14
  * are (`globalThis.isardAssetsUrl`, read as `GeoMapOptions.assetsUrl`).
14
15
  */
15
16
  import { readFileSync } from 'node:fs';
16
17
  import { fileURLToPath } from 'node:url';
17
18
 
18
- const FILES = ['isard_bg.wasm', 'isard_core_bg.wasm', 'isard_points_bg.wasm', 'decoder.worker.js', 'basemap.worker.js'];
19
+ const FILES = [
20
+ 'isard_bg.wasm',
21
+ 'isard_core_bg.wasm',
22
+ 'isard_points_bg.wasm',
23
+ 'isard_tess_bg.wasm',
24
+ 'decoder.worker.js',
25
+ 'basemap.worker.js',
26
+ ];
19
27
 
20
28
  /** @param {{ folder?: string }} [options] */
21
29
  export default function isard(options = {}) {