isard 1.8.0 → 1.9.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 (217) hide show
  1. package/CHANGELOG.md +32 -1
  2. package/dist/basemap/grid.js +2 -5
  3. package/dist/basemap/grid.js.map +1 -1
  4. package/dist/basemap/models/furniture.d.ts +12 -0
  5. package/dist/basemap/{furniture.js → models/furniture.js} +6 -8
  6. package/dist/basemap/models/furniture.js.map +1 -0
  7. package/dist/basemap/{meshes.js → models/meshes.js} +1 -1
  8. package/dist/basemap/models/meshes.js.map +1 -0
  9. package/dist/basemap/models/trees.d.ts +21 -0
  10. package/dist/basemap/{trees.js → models/trees.js} +4 -36
  11. package/dist/basemap/models/trees.js.map +1 -0
  12. package/dist/basemap/placed.d.ts +2 -0
  13. package/dist/basemap/placed.js +2 -0
  14. package/dist/basemap/placed.js.map +1 -1
  15. package/dist/basemap/pmtiles.js +4 -3
  16. package/dist/basemap/pmtiles.js.map +1 -1
  17. package/dist/basemap/pmtileslayer.d.ts +4 -4
  18. package/dist/basemap/pmtileslayer.js +2 -1
  19. package/dist/basemap/pmtileslayer.js.map +1 -1
  20. package/dist/basemap/resample.js +3 -2
  21. package/dist/basemap/resample.js.map +1 -1
  22. package/dist/basemap/terrain.d.ts +5 -0
  23. package/dist/basemap/terrain.js +6 -4
  24. package/dist/basemap/terrain.js.map +1 -1
  25. package/dist/basemap/vectortiles/context.d.ts +3 -2
  26. package/dist/basemap/vectortiles/context.js.map +1 -1
  27. package/dist/basemap/vectortiles/extrusions.js.map +1 -1
  28. package/dist/basemap/vectortiles/furniture.d.ts +3 -3
  29. package/dist/basemap/vectortiles/furniture.js +2 -1
  30. package/dist/basemap/vectortiles/furniture.js.map +1 -1
  31. package/dist/basemap/vectortiles/labels.js +2 -1
  32. package/dist/basemap/vectortiles/labels.js.map +1 -1
  33. package/dist/basemap/vectortiles/lamps.d.ts +3 -3
  34. package/dist/basemap/vectortiles/lamps.js +1 -1
  35. package/dist/basemap/vectortiles/lamps.js.map +1 -1
  36. package/dist/basemap/vectortiles/placed.d.ts +3 -2
  37. package/dist/basemap/vectortiles/placed.js +5 -10
  38. package/dist/basemap/vectortiles/placed.js.map +1 -1
  39. package/dist/basemap/vectortiles/street-wind.js +2 -2
  40. package/dist/basemap/vectortiles/street-wind.js.map +1 -1
  41. package/dist/basemap/vectortiles/style.js +7 -8
  42. package/dist/basemap/vectortiles/style.js.map +1 -1
  43. package/dist/basemap/vectortiles/tiles.d.ts +1 -3
  44. package/dist/basemap/vectortiles/tiles.js +1 -1
  45. package/dist/basemap/vectortiles/tiles.js.map +1 -1
  46. package/dist/basemap/vectortiles/trees.d.ts +4 -4
  47. package/dist/basemap/vectortiles/trees.js +2 -1
  48. package/dist/basemap/vectortiles/trees.js.map +1 -1
  49. package/dist/basemap/vectortiles/vectors.d.ts +2 -3
  50. package/dist/basemap/vectortiles/vectors.js.map +1 -1
  51. package/dist/basemap/vectortiles.d.ts +6 -5
  52. package/dist/basemap/vectortiles.js +4 -3
  53. package/dist/basemap/vectortiles.js.map +1 -1
  54. package/dist/basemap/wmts.js +3 -4
  55. package/dist/basemap/wmts.js.map +1 -1
  56. package/dist/basemap/{trees.d.ts → woods.d.ts} +2 -19
  57. package/dist/basemap/woods.js +38 -0
  58. package/dist/basemap/woods.js.map +1 -0
  59. package/dist/basemap/workerpool.d.ts +1 -1
  60. package/dist/basemap/workerpool.js +3 -3
  61. package/dist/basemap/workerpool.js.map +1 -1
  62. package/dist/basemap.worker.js +2 -2
  63. package/dist/basemap.worker.js.map +23 -22
  64. package/dist/data/collada.js +4 -4
  65. package/dist/data/collada.js.map +1 -1
  66. package/dist/data/ifc.js +6 -11
  67. package/dist/data/ifc.js.map +1 -1
  68. package/dist/decoder.worker.js +5 -5
  69. package/dist/decoder.worker.js.map +7 -6
  70. package/dist/decoding/decoders.js.map +1 -0
  71. package/dist/{engine → decoding}/loader.js +2 -2
  72. package/dist/decoding/loader.js.map +1 -0
  73. package/dist/{engine → decoding}/protocol.d.ts +1 -1
  74. package/dist/decoding/protocol.js.map +1 -0
  75. package/dist/engine-loader.d.ts +1 -1
  76. package/dist/engine-loader.js +3 -2
  77. package/dist/engine-loader.js.map +1 -1
  78. package/dist/geoplateforme.d.ts +2 -1
  79. package/dist/geoplateforme.js +6 -8
  80. package/dist/geoplateforme.js.map +1 -1
  81. package/dist/index.d.ts +15 -7
  82. package/dist/index.js +9 -3
  83. package/dist/index.js.map +1 -1
  84. package/dist/isard_bg.wasm +0 -0
  85. package/dist/isard_core_bg.wasm +0 -0
  86. package/dist/isard_tess_bg.wasm +0 -0
  87. package/dist/layers/custom.d.ts +56 -0
  88. package/dist/layers/custom.js +93 -0
  89. package/dist/layers/custom.js.map +1 -0
  90. package/dist/layers/extrusions.d.ts +4 -2
  91. package/dist/layers/extrusions.js +2 -1
  92. package/dist/layers/extrusions.js.map +1 -1
  93. package/dist/layers/features.d.ts +3 -14
  94. package/dist/layers/features.js +4 -25
  95. package/dist/layers/features.js.map +1 -1
  96. package/dist/layers/flow.d.ts +3 -3
  97. package/dist/layers/flow.js +3 -4
  98. package/dist/layers/flow.js.map +1 -1
  99. package/dist/layers/glyphs.js +5 -3
  100. package/dist/layers/glyphs.js.map +1 -1
  101. package/dist/layers/ground.d.ts +57 -0
  102. package/dist/layers/ground.js +78 -0
  103. package/dist/layers/ground.js.map +1 -0
  104. package/dist/layers/icons.js +8 -6
  105. package/dist/layers/icons.js.map +1 -1
  106. package/dist/layers/layers.d.ts +2 -199
  107. package/dist/layers/layers.js +2 -469
  108. package/dist/layers/layers.js.map +1 -1
  109. package/dist/layers/models.d.ts +48 -0
  110. package/dist/layers/models.js +111 -0
  111. package/dist/layers/models.js.map +1 -0
  112. package/dist/layers/network.d.ts +26 -0
  113. package/dist/layers/network.js +127 -0
  114. package/dist/layers/network.js.map +1 -0
  115. package/dist/layers/panoramas.d.ts +2 -11
  116. package/dist/layers/panoramas.js +19 -9
  117. package/dist/layers/panoramas.js.map +1 -1
  118. package/dist/layers/photos.d.ts +4 -7
  119. package/dist/layers/photos.js +3 -4
  120. package/dist/layers/photos.js.map +1 -1
  121. package/dist/layers/pointclouds.d.ts +3 -2
  122. package/dist/layers/pointclouds.js +3 -3
  123. package/dist/layers/pointclouds.js.map +1 -1
  124. package/dist/layers/raster.d.ts +9 -0
  125. package/dist/layers/raster.js +24 -0
  126. package/dist/layers/raster.js.map +1 -0
  127. package/dist/layers/symbols.d.ts +2 -2
  128. package/dist/layers/symbols.js +2 -1
  129. package/dist/layers/symbols.js.map +1 -1
  130. package/dist/layers/tiles3d.d.ts +15 -0
  131. package/dist/layers/tiles3d.js +55 -0
  132. package/dist/layers/tiles3d.js.map +1 -0
  133. package/dist/layers/trees.d.ts +5 -7
  134. package/dist/layers/trees.js +2 -1
  135. package/dist/layers/trees.js.map +1 -1
  136. package/dist/layers/vectors.js.map +1 -1
  137. package/dist/map/basemap-layers.js +1 -1
  138. package/dist/map/basemap-layers.js.map +1 -1
  139. package/dist/map/engine-settings.d.ts +1 -1
  140. package/dist/map/engine-settings.js +1 -1
  141. package/dist/map/engine-settings.js.map +1 -1
  142. package/dist/map/engines.js.map +1 -1
  143. package/dist/map/layer-spec.d.ts +7 -13
  144. package/dist/map/layer-spec.js.map +1 -1
  145. package/dist/map/workers.js +3 -4
  146. package/dist/map/workers.js.map +1 -1
  147. package/dist/map.d.ts +15 -58
  148. package/dist/map.js +39 -52
  149. package/dist/map.js.map +1 -1
  150. package/dist/panoramax.js +6 -8
  151. package/dist/panoramax.js.map +1 -1
  152. package/dist/react/CustomLayer.d.ts +1 -1
  153. package/dist/react/CustomLayer.js.map +1 -1
  154. package/dist/react/Layer.d.ts +5 -1
  155. package/dist/react/Layer.js.map +1 -1
  156. package/dist/react/VectorTiles.d.ts +2 -2
  157. package/dist/react/VectorTiles.js +1 -1
  158. package/dist/react/VectorTiles.js.map +1 -1
  159. package/dist/types.d.ts +14 -4
  160. package/dist/types.js.map +1 -1
  161. package/dist/ui/controls.js +2 -1
  162. package/dist/ui/controls.js.map +1 -1
  163. package/dist/ui/interaction.js +6 -5
  164. package/dist/ui/interaction.js.map +1 -1
  165. package/dist/ui/minimap.js +1 -1
  166. package/dist/ui/minimap.js.map +1 -1
  167. package/dist/ui/overlay.js +3 -3
  168. package/dist/ui/overlay.js.map +1 -1
  169. package/dist/ui/search.js +1 -1
  170. package/dist/ui/search.js.map +1 -1
  171. package/dist/util/animation.js +3 -2
  172. package/dist/util/animation.js.map +1 -1
  173. package/dist/util/color.d.ts +10 -0
  174. package/dist/util/color.js +29 -9
  175. package/dist/util/color.js.map +1 -1
  176. package/dist/util/fetch.d.ts +5 -0
  177. package/dist/util/fetch.js +11 -0
  178. package/dist/util/fetch.js.map +1 -0
  179. package/dist/util/geo.d.ts +5 -0
  180. package/dist/util/geo.js +8 -2
  181. package/dist/util/geo.js.map +1 -1
  182. package/dist/util/math.d.ts +3 -0
  183. package/dist/util/math.js +4 -0
  184. package/dist/util/math.js.map +1 -0
  185. package/dist/util/requests.js.map +1 -0
  186. package/dist/util/roofs.d.ts +0 -2
  187. package/dist/util/roofs.js +0 -3
  188. package/dist/util/roofs.js.map +1 -1
  189. package/dist/wasm/isard.js +1 -1
  190. package/dist/wasm/isard_core.js +1 -1
  191. package/dist/workers/basemap/geometry.d.ts +9 -19
  192. package/dist/workers/{basemap.worker.d.ts → basemap/protocol.d.ts} +29 -23
  193. package/dist/workers/basemap/street.d.ts +4 -2
  194. package/dist/workers/basemap/tiles.d.ts +1 -3
  195. package/dist/workers/basemap/trees.d.ts +2 -2
  196. package/package.json +1 -1
  197. package/dist/basemap/furniture.d.ts +0 -26
  198. package/dist/basemap/furniture.js.map +0 -1
  199. package/dist/basemap/meshes.js.map +0 -1
  200. package/dist/basemap/trees.js.map +0 -1
  201. package/dist/engine/decoders.js.map +0 -1
  202. package/dist/engine/loader.js.map +0 -1
  203. package/dist/engine/protocol.js.map +0 -1
  204. package/dist/engine/requests.js.map +0 -1
  205. package/dist/workers/basemap/furniture.d.ts +0 -13
  206. package/dist/workers/basemap/labels.d.ts +0 -24
  207. package/dist/workers/basemap/lamps.d.ts +0 -10
  208. package/dist/workers/basemap/raster.d.ts +0 -10
  209. package/dist/workers/basemap.worker.js +0 -221
  210. package/dist/workers/basemap.worker.js.map +0 -1
  211. /package/dist/basemap/{meshes.d.ts → models/meshes.d.ts} +0 -0
  212. /package/dist/{engine → decoding}/decoders.d.ts +0 -0
  213. /package/dist/{engine → decoding}/decoders.js +0 -0
  214. /package/dist/{engine → decoding}/loader.d.ts +0 -0
  215. /package/dist/{engine → decoding}/protocol.js +0 -0
  216. /package/dist/{engine → util}/requests.d.ts +0 -0
  217. /package/dist/{engine → util}/requests.js +0 -0
@@ -1,8 +1,8 @@
1
1
  /** The pool of basemap workers the vector tiles share: a vector tile always goes to the same worker (its decoded copy
2
2
  * kept there), the requests of an owner cancelled together, the renderers broadcast to every worker */
3
- import { headerRules, onHeaderRules } from "../engine/requests.js";
4
3
  import { assetUrl } from "../engine-loader.js";
5
4
  import { mercatorX, mercatorY } from "../util/geo.js";
5
+ import { headerRules, onHeaderRules } from "../util/requests.js";
6
6
  import { SOURCE_CACHE } from "./resample.js";
7
7
  /** Default size of a basemap worker pool: cores - 1, 1 to 4 */
8
8
  export const defaultWorkerCount = () => {
@@ -144,7 +144,7 @@ export class BasemapWorkers {
144
144
  if (this.terminated)
145
145
  return reject(new DOMException('isard: vector tiles destroyed', 'AbortError'));
146
146
  if (signal?.aborted)
147
- return reject(new DOMException('aborted', 'AbortError'));
147
+ return reject(new DOMException('isard: aborted', 'AbortError'));
148
148
  const dead = this.dead.get(worker);
149
149
  if (dead)
150
150
  return reject(dead);
@@ -153,7 +153,7 @@ export class BasemapWorkers {
153
153
  if (!this.pending.delete(id))
154
154
  return;
155
155
  worker.postMessage({ type: 'abort', id });
156
- reject(new DOMException('aborted', 'AbortError'));
156
+ reject(new DOMException('isard: aborted', 'AbortError'));
157
157
  };
158
158
  // The listener goes once the request is settled
159
159
  const settle = () => signal?.removeEventListener('abort', abort);
@@ -1 +1 @@
1
- {"version":3,"file":"workerpool.js","sourceRoot":"","sources":["../../src/basemap/workerpool.ts"],"names":[],"mappings":"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","sourcesContent":["/** The pool of basemap workers the vector tiles share: a vector tile always goes to the same worker (its decoded copy\n * kept there), the requests of an owner cancelled together, the renderers broadcast to every worker */\n\nimport { headerRules, onHeaderRules } from '../engine/requests.ts';\nimport { assetUrl } from '../engine-loader.ts';\nimport type { GridDescription } from '../grid-module.ts';\nimport { mercatorX, mercatorY } from '../util/geo.ts';\nimport type { Camera } from '../wasm/isard.js';\nimport type { BasemapRequest, BasemapResponse, BasemapWork, Priority } from '../workers/basemap.worker.ts';\nimport { type Job, SOURCE_CACHE } from './resample.ts';\nimport type { PngEncoding } from './terrain.ts';\n\n/** Default size of a basemap worker pool: cores - 1, 1 to 4 */\nexport const defaultWorkerCount = (): number => {\n return Math.min(4, Math.max(1, (typeof navigator !== 'undefined' ? navigator.hardwareConcurrency || 2 : 2) - 1));\n};\n\n/** Default URL of the basemap worker: in the page's assets folder (`isard/vite`), else next to the module */\nexport const defaultWorkerUrl = (assetsUrl?: string | URL): string | URL => {\n return assetUrl('basemap.worker.js', undefined, assetsUrl);\n};\n\n/** Fetch priority of a raster tile drawn by the workers: 'high' near the center of the view, at the current zoom or\n * coarser; 'low' far from it or finer (prefetch); 'auto' between */\nexport const tilePriority = (z: number, x: number, y: number, camera: Pick<Camera, 'center' | 'zoom'>): Priority => {\n // A raster tile of level z covers the map at zoom z - 1\n if (z - 1 > camera.zoom + 1) return 'low';\n\n const n = 2 ** z;\n const [lon, lat] = camera.center;\n const cx = mercatorX(lon) * n;\n const cy = mercatorY(lat) * n;\n // Across the antimeridian, the short way\n const along = Math.abs(x + 0.5 - cx) % n;\n const dx = Math.min(along, n - along);\n const d = Math.hypot(dx, y + 0.5 - cy);\n\n if (d <= 1.5) return 'high';\n\n return d >= 4 ? 'low' : 'auto';\n};\n\n/** The worker of a vector tile among `count`: always the same one */\nexport const workerIndex = (vz: number, vx: number, vy: number, count: number): number => {\n // Unsigned: every worker gets its share\n return ((Math.imul(vx, 73856093) ^ Math.imul(vy, 19349663) ^ vz) >>> 0) % Math.max(1, count);\n};\n\n/** The worker-side key of a renderer: unique across the `VectorTiles` sharing a pool */\nexport const rendererKey = (namespace: string, n: number): string => {\n return `${namespace}:r${n}`;\n};\n\n/** What the pool needs of a worker (a `Worker`, or a stand-in in tests) */\nexport type PoolWorker = Pick<Worker, 'postMessage' | 'terminate' | 'onmessage' | 'onerror' | 'onmessageerror'>;\n\n/**\n * @internal Workers drawing vector tiles, shared by the `VectorTiles` of a map: each vector tile always goes to the\n * same worker, which keeps it decoded for every style drawn from it. Requests are tracked one by one, with their\n * owner, so that one `VectorTiles` going away cancels its own requests only.\n */\nexport class BasemapWorkers {\n private readonly workers: [PoolWorker, ...PoolWorker[]];\n private readonly pending = new Map<\n number,\n { resolve: (r: BasemapResponse) => void; reject: (e: Error) => void; worker: PoolWorker; owner: object }\n >();\n private next = 1;\n /** The workers that answered once (they loaded), and those that failed before: dead, their error given at once to\n * any request still sent their way */\n private readonly answered = new WeakSet<PoolWorker>();\n private readonly dead = new Map<PoolWorker, Error>();\n /** The worker the next file of grids goes to, in turn */\n private turn = 0;\n private namespaces = 0;\n private terminated = false;\n /** Stops following the page's request headers */\n private readonly unfollow: () => void;\n\n constructor(\n readonly count: number,\n readonly url: string | URL,\n create: (url: string | URL) => PoolWorker = (u) => new Worker(u, { type: 'module' }),\n ) {\n const start = (): PoolWorker => {\n const worker = create(url);\n\n worker.onmessage = ({ data }: MessageEvent<BasemapResponse>) => {\n this.answered.add(worker);\n\n const p = this.pending.get(data.id);\n\n if (!p) return;\n this.pending.delete(data.id);\n if ('error' in data) p.reject(new Error(data.error));\n else p.resolve(data);\n };\n // A worker that fails to load (a bundler serving it from elsewhere) or to read a message fails its requests; one\n // that never answered is dead: its tiles go to the others, and with none left every request fails at once\n worker.onerror = (event) => {\n event.preventDefault();\n\n const error = this.fail(\n worker,\n `the vector basemap worker ${url} failed${event.message ? `: ${event.message}` : ''}`,\n );\n\n if (!this.answered.has(worker)) this.dead.set(worker, error);\n };\n worker.onmessageerror = () => this.fail(worker, `the vector basemap worker ${url} sent an unreadable message`);\n\n const rules = headerRules();\n\n if (rules.length > 0) worker.postMessage({ type: 'headers', rules } satisfies BasemapRequest);\n\n return worker;\n };\n\n this.workers = [start(), ...Array.from({ length: Math.max(1, count) - 1 }, start)];\n this.unfollow = onHeaderRules((rules) => {\n this.workers.forEach((w) => {\n w.postMessage({ type: 'headers', rules } satisfies BasemapRequest);\n });\n });\n }\n\n /** A prefix for the renderer keys of one `VectorTiles` */\n namespace(): string {\n return `v${this.namespaces++}`;\n }\n\n /** Requests in progress */\n get size(): number {\n return this.pending.size;\n }\n\n /** Rejects the requests of a failed worker, with the error returned */\n private fail(worker: PoolWorker, message: string): Error {\n const error = new Error(\n `isard: ${message}. If a bundler moves the worker, give its URL in the \\`basemapWorkerUrl\\` option (see \"With a bundler\" in the guide)`,\n );\n\n this.pending.forEach((p, id) => {\n if (p.worker !== worker) return;\n this.pending.delete(id);\n p.reject(error);\n });\n\n return error;\n }\n\n /** The worker of a vector tile: always the same one, or the next living one if it died */\n worker(vz: number, vx: number, vy: number): PoolWorker {\n return this.living(workerIndex(vz, vx, vy, this.workers.length));\n }\n\n /** The worker at `index`, or the next one that has not died (the first one when all have) */\n private living(index: number): PoolWorker {\n const { workers } = this;\n const at = (k: number) => workers[(index + k) % workers.length] ?? workers[0];\n const k = workers.findIndex((_, k) => !this.dead.has(at(k)));\n\n return at(Math.max(0, k));\n }\n\n /** Sends a message to every worker (a renderer, or its removal, or where the tessellation module is) */\n broadcast(message: Extract<BasemapRequest, { type: 'init' } | { type: 'drop' } | { type: 'tess' }>): void {\n if (this.terminated) return;\n\n // A renderer tells the workers how many they are: they share the decoded tiles' budget\n const sent = message.type === 'init' ? { ...message, workers: this.workers.length } : message;\n\n // A sprite image is copied to each worker (structured clone)\n this.workers.forEach((w) => {\n w.postMessage(sent);\n });\n }\n\n /** Asks a worker for a tile's image or labels, on behalf of `owner` */\n request(worker: PoolWorker, work: BasemapWork, owner: object, signal?: AbortSignal): Promise<BasemapResponse> {\n return new Promise<BasemapResponse>((resolve, reject) => {\n if (this.terminated) return reject(new DOMException('isard: vector tiles destroyed', 'AbortError'));\n if (signal?.aborted) return reject(new DOMException('aborted', 'AbortError'));\n\n const dead = this.dead.get(worker);\n\n if (dead) return reject(dead);\n\n const id = this.next++;\n const abort = () => {\n if (!this.pending.delete(id)) return;\n worker.postMessage({ type: 'abort', id } satisfies BasemapRequest);\n reject(new DOMException('aborted', 'AbortError'));\n };\n // The listener goes once the request is settled\n const settle = () => signal?.removeEventListener('abort', abort);\n\n this.pending.set(id, {\n resolve: (r) => {\n settle();\n resolve(r);\n },\n reject: (e) => {\n settle();\n reject(e);\n },\n worker,\n owner,\n });\n signal?.addEventListener('abort', abort, { once: true });\n worker.postMessage({ ...work, id } satisfies BasemapRequest);\n });\n }\n\n /** The altitudes of a PNG relief tile `z`/`x`/`y` at `url`, decoded by a worker (see `fetchHeights`) */\n heights(\n url: string,\n encoding: PngEncoding,\n floor: number | undefined,\n [z, x, y]: [number, number, number],\n signal: AbortSignal,\n owner: object,\n ): Promise<Float32Array | null> {\n const work: BasemapWork = { type: 'heights', url, encoding, ...(floor === undefined ? {} : { floor }) };\n\n return this.request(this.worker(z, x, y), work, owner, signal).then((r) => ('heights' in r ? r.heights : null));\n }\n\n /** Mercator tile `z`/`x`/`y` reprojected by a worker from the source images of its plan (see `resampler`) */\n reproject(\n job: Job,\n [z, x, y]: [number, number, number],\n signal: AbortSignal,\n owner: object,\n ): Promise<ImageBitmap | null> {\n // Blocks of 4 × 4 Mercator tiles go to the same worker: neighbours share source tiles, each worker keeps its share\n const worker = this.worker(Math.max(0, z - 2), x >> 2, y >> 2);\n const cached = Math.max(16, Math.ceil(SOURCE_CACHE / this.workers.length));\n const work: BasemapWork = { type: 'reproject', job, cached };\n\n return this.request(worker, work, owner, signal).then((r) => ('image' in r ? r.image : null));\n }\n\n /** A GRIB2 or NetCDF file (its URL, fetched by the worker, or its bytes, transferred) read into grids by the grid\n * module (`module`), in the next worker */\n grids(\n source: { url: string } | { bytes: ArrayBuffer },\n module: string,\n signal: AbortSignal | undefined,\n owner: object,\n ): Promise<{ grids: GridDescription[]; values: Float32Array[] }> {\n const work: BasemapWork = { type: 'grids', module, ...source };\n\n this.turn = (this.turn + 1) % this.workers.length;\n\n return this.request(this.living(this.turn), work, owner, signal).then((r) =>\n 'grids' in r ? { grids: r.grids, values: r.values } : { grids: [], values: [] },\n );\n }\n\n /** Cancels the requests of an owner (the workers stop them) */\n cancel(owner: object): void {\n this.pending.forEach((p, id) => {\n if (p.owner !== owner) return;\n this.pending.delete(id);\n p.worker.postMessage({ type: 'abort', id } satisfies BasemapRequest);\n p.reject(new DOMException('isard: vector tiles destroyed', 'AbortError'));\n });\n }\n\n /** Stops the workers; their requests fail */\n terminate(): void {\n if (this.terminated) return;\n this.terminated = true;\n this.unfollow();\n this.workers.forEach((w) => {\n w.terminate();\n });\n\n const pending = [...this.pending.values()];\n\n this.pending.clear();\n pending.forEach((p) => {\n p.reject(new DOMException('isard: vector tiles destroyed', 'AbortError'));\n });\n }\n}\n"]}
1
+ {"version":3,"file":"workerpool.js","sourceRoot":"","sources":["../../src/basemap/workerpool.ts"],"names":[],"mappings":"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","sourcesContent":["/** The pool of basemap workers the vector tiles share: a vector tile always goes to the same worker (its decoded copy\n * kept there), the requests of an owner cancelled together, the renderers broadcast to every worker */\n\nimport { assetUrl } from '../engine-loader.ts';\nimport type { GridDescription } from '../grid-module.ts';\nimport { mercatorX, mercatorY } from '../util/geo.ts';\nimport { headerRules, onHeaderRules } from '../util/requests.ts';\nimport type { Camera } from '../wasm/isard.js';\nimport type { BasemapRequest, BasemapResponse, BasemapWork, Priority } from '../workers/basemap/protocol.ts';\nimport { type Job, SOURCE_CACHE } from './resample.ts';\nimport type { PngEncoding } from './terrain.ts';\n\n/** Default size of a basemap worker pool: cores - 1, 1 to 4 */\nexport const defaultWorkerCount = (): number => {\n return Math.min(4, Math.max(1, (typeof navigator !== 'undefined' ? navigator.hardwareConcurrency || 2 : 2) - 1));\n};\n\n/** Default URL of the basemap worker: in the page's assets folder (`isard/vite`), else next to the module */\nexport const defaultWorkerUrl = (assetsUrl?: string | URL): string | URL => {\n return assetUrl('basemap.worker.js', undefined, assetsUrl);\n};\n\n/** Fetch priority of a raster tile drawn by the workers: 'high' near the center of the view, at the current zoom or\n * coarser; 'low' far from it or finer (prefetch); 'auto' between */\nexport const tilePriority = (z: number, x: number, y: number, camera: Pick<Camera, 'center' | 'zoom'>): Priority => {\n // A raster tile of level z covers the map at zoom z - 1\n if (z - 1 > camera.zoom + 1) return 'low';\n\n const n = 2 ** z;\n const [lon, lat] = camera.center;\n const cx = mercatorX(lon) * n;\n const cy = mercatorY(lat) * n;\n // Across the antimeridian, the short way\n const along = Math.abs(x + 0.5 - cx) % n;\n const dx = Math.min(along, n - along);\n const d = Math.hypot(dx, y + 0.5 - cy);\n\n if (d <= 1.5) return 'high';\n\n return d >= 4 ? 'low' : 'auto';\n};\n\n/** The worker of a vector tile among `count`: always the same one */\nexport const workerIndex = (vz: number, vx: number, vy: number, count: number): number => {\n // Unsigned: every worker gets its share\n return ((Math.imul(vx, 73856093) ^ Math.imul(vy, 19349663) ^ vz) >>> 0) % Math.max(1, count);\n};\n\n/** The worker-side key of a renderer: unique across the `VectorTiles` sharing a pool */\nexport const rendererKey = (namespace: string, n: number): string => {\n return `${namespace}:r${n}`;\n};\n\n/** What the pool needs of a worker (a `Worker`, or a stand-in in tests) */\nexport type PoolWorker = Pick<Worker, 'postMessage' | 'terminate' | 'onmessage' | 'onerror' | 'onmessageerror'>;\n\n/**\n * @internal Workers drawing vector tiles, shared by the `VectorTiles` of a map: each vector tile always goes to the\n * same worker, which keeps it decoded for every style drawn from it. Requests are tracked one by one, with their\n * owner, so that one `VectorTiles` going away cancels its own requests only.\n */\nexport class BasemapWorkers {\n private readonly workers: [PoolWorker, ...PoolWorker[]];\n private readonly pending = new Map<\n number,\n { resolve: (r: BasemapResponse) => void; reject: (e: Error) => void; worker: PoolWorker; owner: object }\n >();\n private next = 1;\n /** The workers that answered once (they loaded), and those that failed before: dead, their error given at once to\n * any request still sent their way */\n private readonly answered = new WeakSet<PoolWorker>();\n private readonly dead = new Map<PoolWorker, Error>();\n /** The worker the next file of grids goes to, in turn */\n private turn = 0;\n private namespaces = 0;\n private terminated = false;\n /** Stops following the page's request headers */\n private readonly unfollow: () => void;\n\n constructor(\n readonly count: number,\n readonly url: string | URL,\n create: (url: string | URL) => PoolWorker = (u) => new Worker(u, { type: 'module' }),\n ) {\n const start = (): PoolWorker => {\n const worker = create(url);\n\n worker.onmessage = ({ data }: MessageEvent<BasemapResponse>) => {\n this.answered.add(worker);\n\n const p = this.pending.get(data.id);\n\n if (!p) return;\n this.pending.delete(data.id);\n if ('error' in data) p.reject(new Error(data.error));\n else p.resolve(data);\n };\n // A worker that fails to load (a bundler serving it from elsewhere) or to read a message fails its requests; one\n // that never answered is dead: its tiles go to the others, and with none left every request fails at once\n worker.onerror = (event) => {\n event.preventDefault();\n\n const error = this.fail(\n worker,\n `the vector basemap worker ${url} failed${event.message ? `: ${event.message}` : ''}`,\n );\n\n if (!this.answered.has(worker)) this.dead.set(worker, error);\n };\n worker.onmessageerror = () => this.fail(worker, `the vector basemap worker ${url} sent an unreadable message`);\n\n const rules = headerRules();\n\n if (rules.length > 0) worker.postMessage({ type: 'headers', rules } satisfies BasemapRequest);\n\n return worker;\n };\n\n this.workers = [start(), ...Array.from({ length: Math.max(1, count) - 1 }, start)];\n this.unfollow = onHeaderRules((rules) => {\n this.workers.forEach((w) => {\n w.postMessage({ type: 'headers', rules } satisfies BasemapRequest);\n });\n });\n }\n\n /** A prefix for the renderer keys of one `VectorTiles` */\n namespace(): string {\n return `v${this.namespaces++}`;\n }\n\n /** Requests in progress */\n get size(): number {\n return this.pending.size;\n }\n\n /** Rejects the requests of a failed worker, with the error returned */\n private fail(worker: PoolWorker, message: string): Error {\n const error = new Error(\n `isard: ${message}. If a bundler moves the worker, give its URL in the \\`basemapWorkerUrl\\` option (see \"With a bundler\" in the guide)`,\n );\n\n this.pending.forEach((p, id) => {\n if (p.worker !== worker) return;\n this.pending.delete(id);\n p.reject(error);\n });\n\n return error;\n }\n\n /** The worker of a vector tile: always the same one, or the next living one if it died */\n worker(vz: number, vx: number, vy: number): PoolWorker {\n return this.living(workerIndex(vz, vx, vy, this.workers.length));\n }\n\n /** The worker at `index`, or the next one that has not died (the first one when all have) */\n private living(index: number): PoolWorker {\n const { workers } = this;\n const at = (k: number) => workers[(index + k) % workers.length] ?? workers[0];\n const k = workers.findIndex((_, k) => !this.dead.has(at(k)));\n\n return at(Math.max(0, k));\n }\n\n /** Sends a message to every worker (a renderer, or its removal, or where the tessellation module is) */\n broadcast(message: Extract<BasemapRequest, { type: 'init' } | { type: 'drop' } | { type: 'tess' }>): void {\n if (this.terminated) return;\n\n // A renderer tells the workers how many they are: they share the decoded tiles' budget\n const sent = message.type === 'init' ? { ...message, workers: this.workers.length } : message;\n\n // A sprite image is copied to each worker (structured clone)\n this.workers.forEach((w) => {\n w.postMessage(sent);\n });\n }\n\n /** Asks a worker for a tile's image or labels, on behalf of `owner` */\n request(worker: PoolWorker, work: BasemapWork, owner: object, signal?: AbortSignal): Promise<BasemapResponse> {\n return new Promise<BasemapResponse>((resolve, reject) => {\n if (this.terminated) return reject(new DOMException('isard: vector tiles destroyed', 'AbortError'));\n if (signal?.aborted) return reject(new DOMException('isard: aborted', 'AbortError'));\n\n const dead = this.dead.get(worker);\n\n if (dead) return reject(dead);\n\n const id = this.next++;\n const abort = () => {\n if (!this.pending.delete(id)) return;\n worker.postMessage({ type: 'abort', id } satisfies BasemapRequest);\n reject(new DOMException('isard: aborted', 'AbortError'));\n };\n // The listener goes once the request is settled\n const settle = () => signal?.removeEventListener('abort', abort);\n\n this.pending.set(id, {\n resolve: (r) => {\n settle();\n resolve(r);\n },\n reject: (e) => {\n settle();\n reject(e);\n },\n worker,\n owner,\n });\n signal?.addEventListener('abort', abort, { once: true });\n worker.postMessage({ ...work, id } satisfies BasemapRequest);\n });\n }\n\n /** The altitudes of a PNG relief tile `z`/`x`/`y` at `url`, decoded by a worker (see `fetchHeights`) */\n heights(\n url: string,\n encoding: PngEncoding,\n floor: number | undefined,\n [z, x, y]: [number, number, number],\n signal: AbortSignal,\n owner: object,\n ): Promise<Float32Array | null> {\n const work: BasemapWork = { type: 'heights', url, encoding, ...(floor === undefined ? {} : { floor }) };\n\n return this.request(this.worker(z, x, y), work, owner, signal).then((r) => ('heights' in r ? r.heights : null));\n }\n\n /** Mercator tile `z`/`x`/`y` reprojected by a worker from the source images of its plan (see `resampler`) */\n reproject(\n job: Job,\n [z, x, y]: [number, number, number],\n signal: AbortSignal,\n owner: object,\n ): Promise<ImageBitmap | null> {\n // Blocks of 4 × 4 Mercator tiles go to the same worker: neighbours share source tiles, each worker keeps its share\n const worker = this.worker(Math.max(0, z - 2), x >> 2, y >> 2);\n const cached = Math.max(16, Math.ceil(SOURCE_CACHE / this.workers.length));\n const work: BasemapWork = { type: 'reproject', job, cached };\n\n return this.request(worker, work, owner, signal).then((r) => ('image' in r ? r.image : null));\n }\n\n /** A GRIB2 or NetCDF file (its URL, fetched by the worker, or its bytes, transferred) read into grids by the grid\n * module (`module`), in the next worker */\n grids(\n source: { url: string } | { bytes: ArrayBuffer },\n module: string,\n signal: AbortSignal | undefined,\n owner: object,\n ): Promise<{ grids: GridDescription[]; values: Float32Array[] }> {\n const work: BasemapWork = { type: 'grids', module, ...source };\n\n this.turn = (this.turn + 1) % this.workers.length;\n\n return this.request(this.living(this.turn), work, owner, signal).then((r) =>\n 'grids' in r ? { grids: r.grids, values: r.values } : { grids: [], values: [] },\n );\n }\n\n /** Cancels the requests of an owner (the workers stop them) */\n cancel(owner: object): void {\n this.pending.forEach((p, id) => {\n if (p.owner !== owner) return;\n this.pending.delete(id);\n p.worker.postMessage({ type: 'abort', id } satisfies BasemapRequest);\n p.reject(new DOMException('isard: vector tiles destroyed', 'AbortError'));\n });\n }\n\n /** Stops the workers; their requests fail */\n terminate(): void {\n if (this.terminated) return;\n this.terminated = true;\n this.unfollow();\n this.workers.forEach((w) => {\n w.terminate();\n });\n\n const pending = [...this.pending.values()];\n\n this.pending.clear();\n pending.forEach((p) => {\n p.reject(new DOMException('isard: vector tiles destroyed', 'AbortError'));\n });\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- var Tt=[];var Ft=(e)=>{Tt=e};var pe=(e,t={})=>{let r=String(e),n=Tt.filter(([s])=>r.startsWith(s));if(n.length===0)return t;let o=new Headers(t.headers);return n.forEach(([,s])=>{Object.entries(s).forEach(([a,i])=>{o.set(a,i)})}),{...t,headers:o}};class ge{capacity;evict;entries=new Map;constructor(e,t){this.capacity=e;this.evict=t}get size(){return this.entries.size}get(e){let t=this.entries.get(e);if(t!==void 0)this.entries.delete(e),this.entries.set(e,t);return t}has(e){return this.entries.has(e)}set(e,t){this.entries.delete(e),this.entries.set(e,t);for(let[r,n]of this.entries){if(this.entries.size<=this.capacity)break;this.entries.delete(r),this.evict?.(n,r)}}delete(e){return this.entries.delete(e)}values(){return this.entries.values()}clear(){this.entries.clear()}}var Br=96,Wr=(e,t,r,n,o,s)=>{let a=new Uint8ClampedArray(s*s*4),i=s/o,u=o+1;for(let l=0;l<s;l+=1){let c=(l+0.5)/i,p=Math.min(o-1,Math.floor(c)),m=c-p;for(let y=0;y<s;y+=1){let x=(y+0.5)/i,h=Math.min(o-1,Math.floor(x)),b=x-h,g=2*(p*u+h),_=g+2*u,S=(1-b)*(1-m),W=b*(1-m),v=(1-b)*m,A=b*m,f=S*n[g]+W*n[g+2]+v*n[_]+A*n[_+2],d=S*n[g+1]+W*n[g+3]+v*n[_+1]+A*n[_+3],w=f-0.5,M=d-0.5;if(!(w>-1&&M>-1&&w<t&&M<r))continue;let k=Math.floor(w),E=Math.floor(M),L=w-k,V=M-E,O=0,C=0,F=0,R=0;for(let N=0;N<4;N+=1){let T=k+(N&1),P=E+(N>>1);if(T<0||P<0||T>=t||P>=r)continue;let H=4*(P*t+T),K=(N&1?L:1-L)*(N>>1?V:1-V)*e[H+3];O+=K*e[H],C+=K*e[H+1],F+=K*e[H+2],R+=K}if(R<=0)continue;let I=4*(l*s+y);a[I]=O/R,a[I+1]=C/R,a[I+2]=F/R,a[I+3]=R}}return a},It=(e=Br)=>{let t=new Map,r=new Set,n=(l)=>{r.delete(l),l.then((c)=>c?.close(),()=>{return})},o=(l)=>{if(t.has(l))r.add(l);else n(l)},s=new ge(e,o),a=(l)=>{let c=(t.get(l)??1)-1;if(c>0)t.set(l,c);else if(t.delete(l),r.has(l))n(l)},i=(l)=>{let c=()=>{let m=(async()=>{let y=await fetch(l,pe(l));if(y.status===404||y.status===204||y.status===410)return null;if(!y.ok)throw Error(`isard: ${y.status} for a raster to reproject`);return createImageBitmap(await y.blob())})();return m.catch(()=>s.delete(l)),s.set(l,m),m},p=s.get(l)??c();return t.set(p,(t.get(p)??0)+1),p};return{draw:async(l,c)=>{let p=l.sources.map((m)=>[m,i(m.url)]);try{let m=await Promise.all(p.map(async([g,_])=>[g,await _]));if(c.throwIfAborted(),!m.some(([,g])=>g))return null;let x=new OffscreenCanvas(l.width,l.height).getContext("2d",{willReadFrequently:!0});if(!x)throw Error("isard: no 2D canvas to reproject the tiles");m.forEach(([g,_])=>{if(_)x.drawImage(_,g.x,g.y,g.w,g.h)});let h=x.getImageData(0,0,l.width,l.height).data,b=Wr(h,l.width,l.height,l.mesh,l.n,l.size);return createImageBitmap(new ImageData(b,l.size,l.size),{premultiplyAlpha:"none"})}finally{p.forEach(([,m])=>{a(m)})}},cache:s,close:()=>{[...s.values()].forEach(o),s.clear()}}};var we=256,Hr=(e,t,r=Number.NEGATIVE_INFINITY)=>{let n=e.length>>2,o=new Float32Array(n);if(t==="terrarium")for(let s=0,a=0;s<n;s+=1,a+=4){let i=e[a]*256+e[a+1]+e[a+2]/256-32768;o[s]=i>r?i:r}else for(let s=0,a=0;s<n;s+=1,a+=4){let i=-1e4+(e[a]*65536+e[a+1]*256+e[a+2])*0.1;o[s]=i>r?i:r}return o},Pt=async(e,t,r,n,o)=>{let s=await fetch(e,pe(e,{signal:n}));if(s.status===404||s.status===204||s.status===410)return null;if(!s.ok)throw Error(`${s.url}: ${s.status}`);let a=await createImageBitmap(await s.blob(),{premultiplyAlpha:"none",colorSpaceConversion:"none"});try{o.canvas??=new OffscreenCanvas(we,we);let i=o.canvas.getContext("2d",{willReadFrequently:!0});if(!i)throw Error("no 2D context");return i.imageSmoothingEnabled=!1,i.clearRect(0,0,we,we),i.drawImage(a,0,0,we,we),Hr(i.getImageData(0,0,we,we).data,t,r)}finally{a.close()}};var Vr="aliceblue f0f8ff antiquewhite faebd7 aqua 00ffff aquamarine 7fffd4 azure f0ffff beige f5f5dc bisque ffe4c4 black 000000 blanchedalmond ffebcd blue 0000ff blueviolet 8a2be2 brown a52a2a burlywood deb887 cadetblue 5f9ea0 chartreuse 7fff00 chocolate d2691e coral ff7f50 cornflowerblue 6495ed cornsilk fff8dc crimson dc143c cyan 00ffff darkblue 00008b darkcyan 008b8b darkgoldenrod b8860b darkgray a9a9a9 darkgreen 006400 darkgrey a9a9a9 darkkhaki bdb76b darkmagenta 8b008b darkolivegreen 556b2f darkorange ff8c00 darkorchid 9932cc darkred 8b0000 darksalmon e9967a darkseagreen 8fbc8f darkslateblue 483d8b darkslategray 2f4f4f darkslategrey 2f4f4f darkturquoise 00ced1 darkviolet 9400d3 deeppink ff1493 deepskyblue 00bfff dimgray 696969 dimgrey 696969 dodgerblue 1e90ff firebrick b22222 floralwhite fffaf0 forestgreen 228b22 fuchsia ff00ff gainsboro dcdcdc ghostwhite f8f8ff gold ffd700 goldenrod daa520 gray 808080 green 008000 greenyellow adff2f grey 808080 honeydew f0fff0 hotpink ff69b4 indianred cd5c5c indigo 4b0082 ivory fffff0 khaki f0e68c lavender e6e6fa lavenderblush fff0f5 lawngreen 7cfc00 lemonchiffon fffacd lightblue add8e6 lightcoral f08080 lightcyan e0ffff lightgoldenrodyellow fafad2 lightgray d3d3d3 lightgreen 90ee90 lightgrey d3d3d3 lightpink ffb6c1 lightsalmon ffa07a lightseagreen 20b2aa lightskyblue 87cefa lightslategray 778899 lightslategrey 778899 lightsteelblue b0c4de lightyellow ffffe0 lime 00ff00 limegreen 32cd32 linen faf0e6 magenta ff00ff maroon 800000 mediumaquamarine 66cdaa mediumblue 0000cd mediumorchid ba55d3 mediumpurple 9370db mediumseagreen 3cb371 mediumslateblue 7b68ee mediumspringgreen 00fa9a mediumturquoise 48d1cc mediumvioletred c71585 midnightblue 191970 mintcream f5fffa mistyrose ffe4e1 moccasin ffe4b5 navajowhite ffdead navy 000080 oldlace fdf5e6 olive 808000 olivedrab 6b8e23 orange ffa500 orangered ff4500 orchid da70d6 palegoldenrod eee8aa palegreen 98fb98 paleturquoise afeeee palevioletred db7093 papayawhip ffefd5 peachpuff ffdab9 peru cd853f pink ffc0cb plum dda0dd powderblue b0e0e6 purple 800080 rebeccapurple 663399 red ff0000 rosybrown bc8f8f royalblue 4169e1 saddlebrown 8b4513 salmon fa8072 sandybrown f4a460 seagreen 2e8b57 seashell fff5ee sienna a0522d silver c0c0c0 skyblue 87ceeb slateblue 6a5acd slategray 708090 slategrey 708090 snow fffafa springgreen 00ff7f steelblue 4682b4 tan d2b48c teal 008080 thistle d8bfd8 tomato ff6347 turquoise 40e0d0 violet ee82ee wheat f5deb3 white ffffff whitesmoke f5f5f5 yellow ffff00 yellowgreen 9acd32",it,Jr=(e)=>{if(!it){let t=Vr.split(" ");it=new Map(Array.from({length:Math.floor(t.length/2)},(r,n)=>[t[2*n]??"",t[2*n+1]??""]))}return it.get(e)},ze=(e)=>Number.isFinite(e)?Math.max(0,Math.min(1,e)):0,Nt=(e)=>{if(!/^[0-9a-f]+$/.test(e)||![3,4,6,8].includes(e.length))return;let t=e.length<=4?[...e].map((n)=>n+n).join(""):e,r=(n)=>Number.parseInt(t.slice(n,n+2),16)/255;return[r(0),r(2),r(4),t.length===8?r(6):1]},jr=(e)=>{if(e===void 0)return 1;return ze(e.endsWith("%")?Number.parseFloat(e)/100:Number.parseFloat(e))},$r=(e,t,r)=>{let n=r<0.5?r*(1+t):r+t-r*t,o=2*r-n,s=(a)=>{let i=(a%1+1)%1;if(i<0.16666666666666666)return o+(n-o)*6*i;if(i<0.5)return n;if(i<0.6666666666666666)return o+(n-o)*(0.6666666666666666-i)*6;return o};return[s(e+0.3333333333333333),s(e),s(e-0.3333333333333333)]},Ut=(e)=>{if(typeof e!=="string")return;let t=e.trim().toLowerCase();if(t.startsWith("#"))return Nt(t.slice(1));if(t==="transparent")return[0,0,0,0];let r=Jr(t);if(r)return Nt(r);let n=/^(rgba?|hsla?)\(([^)]*)\)$/.exec(t);if(!n?.[1]||n[2]===void 0)return;let o=n[2].split(/[\s,/]+/).filter(Boolean);if(o.length<3||o.slice(0,3).some((c)=>Number.isNaN(Number.parseFloat(c))))return;let s=jr(o[3]);if(n[1].startsWith("rgb")){let c=(p)=>ze(p.endsWith("%")?Number.parseFloat(p)/100:Number.parseFloat(p)/255);return[c(o[0]??""),c(o[1]??""),c(o[2]??""),s]}let a=Number.parseFloat(o[0]??"")/360,[i,u,l]=$r(a,ze(Number.parseFloat(o[1]??"")/100),ze(Number.parseFloat(o[2]??"")/100));return[i,u,l,s]};var Me=(e)=>typeof e==="object"&&e!==null&&!Array.isArray(e);var zr=["Unknown","Point","LineString","Polygon"],ue=(e,t)=>({zoom:t,properties:e.properties,type:zr[e.type]??"Unknown"}),ye=(e)=>Ut(e),Ge=([e,t,r,n])=>`rgba(${Math.round(e*255)},${Math.round(t*255)},${Math.round(r*255)},${n})`,Dt=(e,t,r,n=1)=>{let o=r-t;if(o===0)return 0;let s=e-t;return n===1?s/o:(n**s-1)/(n**o-1)},ut=(e,t,r)=>{if(typeof e==="number"&&typeof t==="number")return e+(t-e)*r;let n=ye(e),o=ye(t);if(n&&o){let s=(a)=>n[a]+(o[a]-n[a])*r;return Ge([s(0),s(1),s(2),s(3)])}if(Array.isArray(e)&&Array.isArray(t))return e.map((s,a)=>ut(s,t[a],r));return r<0.5?e:t},Bt=(e)=>typeof e==="object"&&e!==null&&!Array.isArray(e)&&Array.isArray(e.stops),qr=(e,t)=>{let r=e.property===void 0?t.zoom:t.properties[e.property],n=e.stops,o=e.type??(e.property===void 0||typeof n[0]?.[0]==="number"?"exponential":"categorical");if(o==="identity")return r??e.default;if(o==="categorical")return n.find(([c])=>c===r)?.[1]??e.default;if(typeof r!=="number"||!n.length)return e.default??n[0]?.[1];let s=([c])=>{if(Array.isArray(c))return Number.NaN;return Me(c)?Number(c.zoom):Number(c)},a=n[0];if(!a)return e.default;if(r<=s(a))return a[1];let i=n.findIndex((c,p)=>p>0&&Boolean(n[p-1])&&Boolean(c)&&r<s(c)),[u,l]=[n[i-1],n[i]];if(i<0||!u||!l)return n.at(-1)?.[1];if(o==="interval")return u[1];return ut(u[1],l[1],Dt(r,s(u),s(l),e.base??1))},at=(e)=>e,Lt={"<":(e,t)=>e<t,"<=":(e,t)=>e<=t,">":(e,t)=>e>t,">=":(e,t)=>e>=t},Wt=(e,t,r)=>{let n=(a)=>typeof a==="object"&&a!==null?String(a):a,[o,s]=[n(t),n(r)];return typeof o==="string"&&typeof s==="string"?Lt[e](o,s):Lt[e](Number(o),Number(s))},qe=(e,t)=>{if(t==="$type")return e.type;return typeof t==="string"?e.properties[t]:void 0},Gr=new Set(["literal","zoom","get","has","!has","properties","id","geometry-type","concat","format","image","number-format","to-number","to-string","to-boolean","to-color","number","string","boolean","typeof","length","at","upcase","downcase","coalesce","!","all","any","==","!=","<","<=",">",">=","in","case","match","step","interpolate","interpolate-hcl","interpolate-lab","rgb","rgba","+","-","*","/","%","^","min","max","abs","round","floor","ceil","sqrt","ln","log10","log2","pi","e"]),Ie=(e)=>Array.isArray(e)&&typeof e[0]==="string"&&Gr.has(e[0]),Ot=new Set,Fe=(e)=>e===void 0||e===null?"":String(e),de=(e,t)=>{if(Bt(e))return qr(e,t);if(!Array.isArray(e))return e;let[r,...n]=e;if(typeof r!=="string")return e;let o=(i)=>de(n[i]??null,t),s=(i)=>Number(o(i)),a=()=>n.map((i,u)=>s(u));switch(r){case"literal":return n[0];case"zoom":return t.zoom;case"get":return qe(t,o(0));case"has":return qe(t,o(0))!==void 0;case"!has":return qe(t,o(0))===void 0;case"properties":return t.properties;case"id":return null;case"geometry-type":return t.type;case"concat":return n.map((i,u)=>Fe(o(u))).join("");case"format":return n.map((i,u)=>i!==null&&typeof i==="object"&&!Array.isArray(i)?"":Fe(o(u))).join("");case"image":return o(0);case"number-format":{let i=Me(n[1])?n[1]:{},u=(c)=>{let p=i[c];return typeof p==="number"?p:void 0},l=s(0);if(!Number.isFinite(l))return"";return l.toLocaleString(typeof i.locale==="string"?i.locale:void 0,{minimumFractionDigits:u("min-fraction-digits"),maximumFractionDigits:u("max-fraction-digits")})}case"to-number":{for(let i=0;i<n.length;i+=1){let u=o(i),l=typeof u==="string"&&u.trim()===""?Number.NaN:Number(u);if(u!==null&&u!==void 0&&!Number.isNaN(l))return l}return 0}case"to-string":return Fe(o(0));case"to-boolean":{let i=o(0);return!(i===""||i===0||i===!1||i===null||i===void 0||Number.isNaN(i))}case"to-color":case"number":case"string":case"boolean":{let i={"to-color":(u)=>ye(u)!==void 0,number:(u)=>typeof u==="number",string:(u)=>typeof u==="string",boolean:(u)=>typeof u==="boolean"};for(let u=0;u<n.length;u+=1){let l=o(u);if(i[r]?.(l))return l}return n.length?o(n.length-1):null}case"typeof":{let i=o(0);if(i===null||i===void 0)return"null";return Array.isArray(i)?"array":typeof i}case"length":{let i=o(0);return typeof i==="string"||Array.isArray(i)?i.length:0}case"at":{let i=o(1);return Array.isArray(i)?i[s(0)]??null:null}case"upcase":return Fe(o(0)).toUpperCase();case"downcase":return Fe(o(0)).toLowerCase();case"coalesce":for(let i=0;i<n.length;i+=1){let u=o(i);if(u!==void 0&&u!==null)return u}return null;case"!":return!o(0);case"all":return n.every((i,u)=>Boolean(o(u)));case"any":return n.some((i,u)=>Boolean(o(u)));case"==":return o(0)===o(1);case"!=":return o(0)!==o(1);case"<":case"<=":case">":case">=":return Wt(r,o(0),o(1));case"in":{let i=o(1),u=o(0);if(typeof i==="string")return i.includes(String(u));return Array.isArray(i)&&i.includes(u)}case"case":{let i=n.findIndex((u,l)=>l%2===0&&l+1<n.length&&Boolean(o(l)));return i<0?o(n.length-1):o(i+1)}case"match":{let i=o(0),u=n.findIndex((l,c)=>c%2===1&&c+1<n.length&&(Array.isArray(l)?at(l).includes(i):l===i));return u<0?o(n.length-1):o(u+1)}case"step":{let i=s(0),u=o(1);for(let l=2;l+1<n.length;l+=2)if(i>=Number(n[l]))u=o(l+1);else break;return u}case"interpolate":case"interpolate-hcl":case"interpolate-lab":{let i=n[0],u=s(1),l=Array.isArray(i)&&i[0]==="exponential"?Number(i[1]):1,c=Array.from({length:Math.floor((n.length-2)/2)},(h,b)=>[Number(n[2+2*b]),n[3+2*b]??null]),p=c[0];if(!p)return null;if(u<=p[0])return de(p[1],t);let m=c.findIndex((h,b)=>b>0&&u<h[0]),[y,x]=[c[m-1],c[m]];if(m<0||!y||!x)return de(c.at(-1)?.[1]??null,t);return ut(de(y[1],t),de(x[1],t),Dt(u,y[0],x[0],l))}case"rgb":case"rgba":return Ge([s(0)/255,s(1)/255,s(2)/255,n.length>3?s(3):1]);case"+":return a().reduce((i,u)=>i+u,0);case"*":return a().reduce((i,u)=>i*u,1);case"-":return n.length===1?-s(0):s(0)-s(1);case"/":return s(0)/s(1);case"%":return s(0)%s(1);case"^":return s(0)**s(1);case"min":return Math.min(...a());case"max":return Math.max(...a());case"abs":return Math.abs(s(0));case"round":return Math.sign(s(0))*Math.round(Math.abs(s(0)));case"floor":return Math.floor(s(0));case"ceil":return Math.ceil(s(0));case"sqrt":return Math.sqrt(s(0));case"ln":return Math.log(s(0));case"log10":return Math.log10(s(0));case"log2":return Math.log2(s(0));case"pi":return Math.PI;case"e":return Math.E;default:if(!Ot.has(r))Ot.add(r),console.warn(`isard: the style expression "${r}" is not supported`);return null}},Yr=new Set(["==","!=","<","<=",">",">="]),Ye=(e)=>{if(e.type==="line")return"line";if(e.type==="fill-extrusion")return"extrusion";if(e.type==="circle")return"circle";return e.type==="fill"||e.type==="background"?"fill":void 0},Kr=(e)=>{let[t,r,...n]=e;if(typeof t!=="string"||typeof r!=="string"||n.some(Array.isArray))return!1;if(Yr.has(t))return e.length===3;if(t==="in")return e.length!==3||!Array.isArray(e[2]);return t==="!in"||t==="has"||t==="!has"},Xr=(e,t)=>{let[r,n,...o]=e,s=qe(t,n);switch(r){case"==":return s===o[0];case"!=":return s!==o[0];case"<":case"<=":case">":case">=":return Wt(r,s,o[0]);case"in":return at(o).includes(s);case"!in":return!at(o).includes(s);case"has":return s!==void 0;case"!has":return s===void 0;default:return!0}},Ct=new WeakMap,Ht=(e)=>{if(!Array.isArray(e))return()=>Boolean(e);let t=Ct.get(e);if(t)return t;let n=(()=>{let o=e[0];if(o==="all"||o==="any"||o==="none"){let s=e.slice(1).map(Ht);if(o==="all")return(a)=>s.every((i)=>i(a));if(o==="any")return(a)=>s.some((i)=>i(a));return(a)=>!s.some((i)=>i(a))}if(Kr(e))return(s)=>Xr(e,s);return(s)=>Boolean(de(e,s))})();return Ct.set(e,n),n},fe=(e,t)=>{if(e===void 0||e===null)return!0;return Ht(e)(t)},lt=(e)=>Array.isArray(e)&&(e[0]==="zoom"||e.some(lt)),Zr=new Set(["get","has","!has","geometry-type","properties","id"]),xe=(e)=>{if(e!==void 0&&Bt(e))return e.property!==void 0;if(!Array.isArray(e))return!1;if(Zr.has(e[0]))return!0;return e.some((t)=>xe(t))},ct=(e,t)=>{if(e===void 0||e===null)return"";if(typeof e==="string")return e.replace(/\{([^}]+)\}/g,(n,o)=>{let s=t.properties[o];return s===void 0?"":String(s)});let r=de(e,t);if(Array.isArray(r))return r.filter((n)=>typeof n==="string").join("");return r===void 0||r===null?"":String(r)},Vt=(e)=>/Regular|Bold|Italic|Semibold|Light|Medium|Black/.test(e)?e:`${e} Regular`,ft=(e)=>{let t=new Set,r=(i)=>i.filter((u,l)=>l>=3&&l%2===1).map(Number),n=(i)=>{if(!Array.isArray(i))return;let u=(l)=>Array.isArray(l)&&l[0]==="zoom";if((i[0]==="interpolate"||i[0]==="interpolate-hcl"||i[0]==="interpolate-lab")&&u(i[2]))r(i).forEach((l)=>{t.add(l)});else if(i[0]==="step"&&u(i[1]))r(i).forEach((l)=>{t.add(l),t.add(l-0.01)});i.forEach(n)};n(e);let o=[...t].filter(Number.isFinite);if(o.length===0)o.push(0);let[s,a]=[Math.min(...o),Math.max(...o)];return o.push(...Array.from({length:Math.floor(a)-Math.ceil(s)+1},(i,u)=>Math.ceil(s)+u)),[...new Set(o)].sort((i,u)=>i-u).map((i)=>[i,Number(de(e,{zoom:i,properties:{},type:"Unknown"}))])};class Oe{static __wrap(e){let t=Object.create(Oe.prototype);return t.__wbg_ptr=e,Jt.register(t,t.__wbg_ptr,t),t}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,Jt.unregister(this),e}free(){let e=this.__destroy_into_raw();q.__wbg_gridset_free(e,0)}count(){return q.gridset_count(this.__wbg_ptr)>>>0}meta(e){let t,r;try{let n=q.gridset_meta(this.__wbg_ptr,e);return t=n[0],r=n[1],pt(n[0],n[1])}finally{q.__wbindgen_free(t,r,1)}}values(e){return q.gridset_values(this.__wbg_ptr,e)}}if(Symbol.dispose)Oe.prototype[Symbol.dispose]=Oe.prototype.free;class Ce{static __wrap(e){let t=Object.create(Ce.prototype);return t.__wbg_ptr=e,jt.register(t,t.__wbg_ptr,t),t}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,jt.unregister(this),e}free(){let e=this.__destroy_into_raw();q.__wbg_streetflow_free(e,0)}eastU(){return q.streetflow_eastU(this.__wbg_ptr)}eastV(){return q.streetflow_eastV(this.__wbg_ptr)}northU(){return q.streetflow_northU(this.__wbg_ptr)}northV(){return q.streetflow_northV(this.__wbg_ptr)}}if(Symbol.dispose)Ce.prototype[Symbol.dispose]=Ce.prototype.free;function zt(e){let t=on(e,q.__wbindgen_malloc),r=Se,n=q.readGrids(t,r);if(n[2])throw an(n[1]);return Oe.__wrap(n[0])}function qt(e,t,r,n,o,s){let a=sn(e,q.__wbindgen_malloc),i=Se,u=$t(t,q.__wbindgen_malloc),l=Se,c=$t(r,q.__wbindgen_malloc),p=Se,m=q.streetFlow(a,i,u,l,c,p,n,o,s);return Ce.__wrap(m)}function Qr(){return{__proto__:null,"./isard_grid_bg.js":{__proto__:null,__wbg___wbindgen_throw_41e9ee4f547fc59a:function(t,r){throw Error(pt(t,r))},__wbg_new_from_slice_ca6ad97db1f4779a:function(t,r){return new Float32Array(en(t,r))},__wbindgen_generic_0000000000000001:function(t,r){return pt(t,r)},__wbindgen_init_externref_table:function(){let t=q.__wbindgen_externrefs,r=t.grow(4);t.set(0,void 0),t.set(r+0,void 0),t.set(r+1,null),t.set(r+2,!0),t.set(r+3,!1)}}}}var Jt=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e)=>q.__wbg_gridset_free(e,1)),jt=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e)=>q.__wbg_streetflow_free(e,1));function en(e,t){return e=e>>>0,tn().subarray(e/4,e/4+t)}var Pe=null;function tn(){if(Pe===null||Pe.byteLength===0)Pe=new Float32Array(q.memory.buffer);return Pe}var Ne=null;function rn(){if(Ne===null||Ne.byteLength===0)Ne=new Float64Array(q.memory.buffer);return Ne}function pt(e,t){return ln(e>>>0,t)}var Ue=null;function nn(){if(Ue===null||Ue.byteLength===0)Ue=new Uint32Array(q.memory.buffer);return Ue}var Le=null;function Gt(){if(Le===null||Le.byteLength===0)Le=new Uint8Array(q.memory.buffer);return Le}function $t(e,t){let r=t(e.length*4,4)>>>0;return nn().set(e,r/4),Se=e.length,r}function on(e,t){let r=t(e.length*1,1)>>>0;return Gt().set(e,r/1),Se=e.length,r}function sn(e,t){let r=t(e.length*8,8)>>>0;return rn().set(e,r/8),Se=e.length,r}function an(e){let t=q.__wbindgen_externrefs.get(e);return q.__externref_table_dealloc(e),t}var Ke=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});Ke.decode();var un=2146435072,mt=0;function ln(e,t){if(mt+=t,mt>=un)Ke=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),Ke.decode(),mt=t;return Ke.decode(Gt().subarray(e,e+t))}var Se=0,cn,fn,q;function mn(e,t){return fn=e,q=e.exports,cn=t,Pe=null,Ne=null,Ue=null,Le=null,q.__wbindgen_start(),q}async function pn(e,t){if(typeof Response==="function"&&e instanceof Response){if(!e.ok)throw Error(`failed to fetch Wasm: ${e.status} ${e.statusText} fetching '${e.url}'`);if(typeof WebAssembly.instantiateStreaming==="function")try{return await WebAssembly.instantiateStreaming(e,t)}catch(o){if(r(e.type)&&e.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",o);else throw o}let n=await e.arrayBuffer();return await WebAssembly.instantiate(n,t)}else{let n=await WebAssembly.instantiate(e,t);if(n instanceof WebAssembly.Instance)return{instance:n,module:e};else return n}function r(n){switch(n){case"basic":case"cors":case"default":return!0}return!1}}async function Yt(e){if(q!==void 0)return q;if(e!==void 0)if(Object.getPrototypeOf(e)===Object.prototype)({module_or_path:e}=e);else console.warn("using deprecated parameters for the initialization function; pass a single object instead");if(e===void 0)e=new URL("isard_grid_bg.wasm",import.meta.url);let t=Qr();if(typeof e==="string"||typeof Request==="function"&&e instanceof Request||typeof URL==="function"&&e instanceof URL)e=fetch(e);let{instance:r,module:n}=await pn(await e,t);return mn(r,n)}var bt={},Kt=async(e)=>{let t=bt.ready??Yt({module_or_path:e});bt.ready=t,await t.catch((r)=>{throw bt.ready=void 0,r})},Xt=async(e,t,r,n,o)=>{await Kt(o);let s=qt(e.points,e.ringStart,e.polygonStart,t,r,n);try{return{eastU:s.eastU(),eastV:s.eastV(),northU:s.northU(),northV:s.northV()}}finally{s.free()}},bn=(e)=>typeof e==="object"&&e!==null&&("name"in e)&&("width"in e)&&("height"in e)&&("bounds"in e)&&Array.isArray(e.bounds),Zt=async(e,t)=>{await Kt(t);let r=zt(e);try{let n=[],o=[];for(let s=0;s<r.count();s++){let a=JSON.parse(r.meta(s));if(!bn(a))throw Error("isard: a grid without its description");n.push(a),o.push(r.values(s))}return{grids:n,values:o}}finally{r.free()}};var dt=["shelter","bin","postbox","fountain","rack","bench"];var Jo=Math.PI/180,Qt=40075016.686;var er=(e)=>e*360-180,yt=(e)=>Math.atan(Math.sinh(Math.PI*(1-2*e)))*180/Math.PI;var Ee=(e,t)=>40075016.686*Math.cos(yt((t+0.5)/2**e)*Math.PI/180)/2**e;class ht{buf;end;pos;constructor(e,t=0,r=e.length){this.buf=e;this.end=r;this.pos=t}varint(){let e=0;for(let t=0;t<70;t+=7){let r=this.buf[this.pos++]??0;if(e+=(r&127)*2**t,r<128)break}return e}int64(){let e=0,t=0;for(let r=0;r<10;r+=1){let n=this.buf[this.pos++]??0,o=n&127;if(r<4)e|=o<<7*r;else if(r===4)e|=(o&15)<<28,t|=o>>4;else t|=o<<7*r-32;if(n<128)break}return(t|0)*4294967296+(e>>>0)}sint(){let e=this.varint();return e%2===1?-(e+1)/2:e/2}sub(){let e=this.varint(),t=Math.min(this.pos+e,this.end),r=new ht(this.buf,this.pos,t);return this.pos=t,r}string(){let e=this.varint(),t=Math.min(this.pos+e,this.end),r=dn.decode(this.buf.subarray(this.pos,t));return this.pos=t,r}float(){let e=this.pos+4<=this.end?this.view().getFloat32(this.pos,!0):0;return this.pos+=4,e}double(){let e=this.pos+8<=this.end?this.view().getFloat64(this.pos,!0):0;return this.pos+=8,e}view(){return new DataView(this.buf.buffer,this.buf.byteOffset,this.buf.byteLength)}skip(e){if(e===0)this.varint();else if(e===1)this.pos+=8;else if(e===2)this.pos+=this.varint();else if(e===5)this.pos+=4}get more(){return this.pos<this.end}}var dn=new TextDecoder,yn=(e)=>{let t="";while(e.more){let r=e.varint();switch(r>>3){case 1:t=e.string();break;case 2:t=e.float();break;case 3:t=e.double();break;case 4:t=e.int64();break;case 5:t=e.varint();break;case 6:t=e.sint();break;case 7:t=e.varint()!==0;break;default:e.skip(r&7)}}return t},hn=(e)=>{let t=[],r,[n,o]=[0,0];while(e.more){let s=e.varint(),a=s&7,i=s>>3;if(a===7){if(r&&r.length>=2)r.push(r[0]??0,r[1]??0);continue}for(let u=0;u<i&&e.more;u+=1){if(n+=e.sint(),o+=e.sint(),a===1)r=[],t.push(r);r?.push(n,o)}}return t},gt=(e,t)=>{let r=new Map,n=new ht(e);while(n.more){let o=n.varint();if(o>>3!==3){n.skip(o&7);continue}let s=n.sub(),a="",i=4096,u=[],l=[],c=[];while(s.more){let m=s.varint();switch(m>>3){case 1:a=s.string();break;case 2:c.push(s.sub());break;case 3:u.push(s.string());break;case 4:l.push(yn(s.sub()));break;case 5:i=s.varint();break;default:s.skip(m&7)}}if(t&&!t.has(a))continue;let p=[];for(let m of c){let y=1,x={},h=[];while(m.more){let b=m.varint();switch(b>>3){case 2:{let g=m.sub();while(g.more){let _=u[g.varint()],S=l[g.varint()];if(_!==void 0&&S!==void 0)x[_]=S}break}case 3:y=Math.min(3,Math.max(1,m.varint()));break;case 4:h=hn(m.sub());break;default:m.skip(b&7)}}p.push({type:y,properties:x,geometry:h})}r.set(a,{extent:i,features:p})}return r};var gn=127,wn=16384,xn=["unknown","mvt","png","jpeg","webp","avif"],_n=(e)=>(4**e-1)/3,An=(e,t,r)=>{if(e>26)throw Error(`isard: PMTiles level ${e} past 26`);let n=2**e;if(t<0||r<0||t>=n||r>=n)throw Error(`isard: PMTiles tile ${e}/${t}/${r} out of its level`);let[o,s]=[t,r],a=0;for(let i=n/2;i>=1;i/=2){let u=(o&i)>0?1:0,l=(s&i)>0?1:0;if(a+=i*i*(3*u^l),l===0){if(u===1)[o,s]=[i-1-o,i-1-s];[o,s]=[s,o]}}return _n(e)+a};class nr{bytes;pos=0;constructor(e){this.bytes=e}next(){let e=0,t=1;for(;;){let r=this.bytes[this.pos++];if(r===void 0)throw Error("isard: PMTiles directory truncated");if(e+=(r&127)*t,r<128)return e;if(t*=128,t>9223372036854776000)throw Error("isard: PMTiles varint too long")}}}var tr=(e)=>{let t=new nr(e),r=t.next();if(r>e.length)throw Error("isard: PMTiles directory larger than its bytes");let n=[],o=0;for(let s=0;s<r;s+=1)o+=t.next(),n.push({tileId:o,offset:0,length:0,runLength:1});for(let s of n)s.runLength=t.next();for(let s of n)s.length=t.next();return n.forEach((s,a)=>{let i=t.next(),u=n[a-1];s.offset=i===0&&u?u.offset+u.length:i-1}),n},Mn=(e,t)=>{let[r,n]=[0,e.length-1];while(r<=n){let s=r+n>>1,a=e[s];if(!a)break;if(a.tileId===t)return a;if(a.tileId<t)r=s+1;else n=s-1}let o=e[n];if(!o)return;if(o.runLength===0||t-o.tileId<o.runLength)return o;return},Sn=(e)=>{if(e.length<gn||String.fromCharCode(...e.subarray(0,7))!=="PMTiles")throw Error("isard: not a PMTiles archive");if(e[7]!==3)throw Error(`isard: PMTiles version ${e[7]} (only 3 is read)`);let t=new DataView(e.buffer,e.byteOffset,e.byteLength),r=(o)=>Number(t.getBigUint64(o,!0)),n=(o)=>t.getInt32(o,!0)/1e7;return{rootDirectoryOffset:r(8),rootDirectoryLength:r(16),metadataOffset:r(24),metadataLength:r(32),leafDirectoryOffset:r(40),leafDirectoryLength:r(48),tileDataOffset:r(56),tileDataLength:r(64),internalCompression:t.getUint8(97),tileCompression:t.getUint8(98),tileType:xn[t.getUint8(99)]??"unknown",minZoom:t.getUint8(100),maxZoom:t.getUint8(101),bounds:[n(102),n(106),n(110),n(114)],center:[n(119),n(123),t.getUint8(118)]}},Xe=async(e,t)=>{if(t===0||t===1)return e;if(t!==2)throw Error(`isard: PMTiles compression ${t===3?"brotli":"zstd"} is not read (gzip only)`);let r=new Blob([e]).stream().pipeThrough(new DecompressionStream("gzip"));return new Uint8Array(await new Response(r).arrayBuffer())},kn=67108864;class or{source;head;leaves=new ge(64);whole;constructor(e){this.source=e}async range(e,t,r){if(typeof this.source!=="string")return new Uint8Array(await this.source.slice(e,e+t).arrayBuffer());if(this.whole)return(await this.whole).subarray(e,e+t);let n=await fetch(this.source,pe(this.source,{headers:{Range:`bytes=${e}-${e+Math.max(t,1)-1}`},...r?{signal:r}:{}}));if(!n.ok)throw Error(`${this.source}: HTTP ${n.status}`);if(n.status===206)return new Uint8Array(await n.arrayBuffer());if(Number(n.headers.get("Content-Length"))>kn)throw await n.body?.cancel(),Error(`${this.source}: the server ignores range requests (HTTP 206 expected)`);let s=n.arrayBuffer().then((a)=>new Uint8Array(a));return this.whole=s,s.catch(()=>{this.whole=void 0}),(await s).subarray(e,e+t)}load(){return this.head??=(async()=>{let e=await this.range(0,wn),t=Sn(e),{rootDirectoryOffset:r,rootDirectoryLength:n}=t,o=r+n<=e.length?e.subarray(r,r+n):await this.range(r,n),s=tr(await Xe(o,t.internalCompression));return{header:t,root:s}})(),this.head.catch(()=>{this.head=void 0}),this.head}async header(){return(await this.load()).header}async metadata(){let{header:e}=await this.load();if(e.metadataLength===0)return{};let t=await this.range(e.metadataOffset,e.metadataLength),r=new TextDecoder().decode(await Xe(t,e.internalCompression)),n=JSON.parse(r);return Me(n)?n:{}}leaf(e,t){let r=e.leafDirectoryOffset+t.offset,n=this.leaves.get(r);if(n)return n;let o=this.range(r,t.length).then(async(s)=>tr(await Xe(s,e.internalCompression)));return o.catch(()=>this.leaves.delete(r)),this.leaves.set(r,o),o}async tile(e,t,r,n){let{header:o,root:s}=await this.load();if(e<o.minZoom||e>o.maxZoom)return;let a=An(e,t,r),i=s;for(let u=0;u<4;u+=1){let l=Mn(i,a);if(!l)return;if(l.runLength>0){let c=await this.range(o.tileDataOffset+l.offset,l.length,n);return Xe(c,o.tileCompression)}i=await this.leaf(o,l)}throw Error("isard: PMTiles directories nested too deep")}}var rr=new ge(16),Rn=(e)=>{let t=rr.get(e);if(t)return t;let r=new or(e);return rr.set(e,r),r};var wt=(e,t)=>{let r=/^pmtiles:\/\/(.+)\/(\d+)\/(\d+)\/(\d+)$/.exec(e);if(!r)return!1;let[,n="",o,s,a]=r;return Rn(n).tile(Number(o),Number(s),Number(a),t)};var _t=(e,t)=>{let r=e.sprites.find((o)=>Boolean(o.icons[t])),n=r?.icons[t];return r&&n?{icon:n,image:r.image}:void 0},Be=new Map,sr=96,De=new ge(sr),ir=(e)=>Math.max(16,Math.ceil(sr/Math.max(1,e))),Ze=new Set,te=new Set,xt=new ge(64,(e)=>e.then((t)=>setTimeout(()=>t?.close(),0),()=>{return})),ar=(e,t="auto")=>{let r=xt.get(e);if(r)return r;let n=(async()=>{let o=wt(e);if(o){let i=await o;return i&&createImageBitmap(new Blob([i]))}let a=await fetch(e,pe(e,{priority:t}));if(a.status===404||a.status===204)return;if(!a.ok)throw Error(`${e}: ${a.status}`);return createImageBitmap(await a.blob())})();return n.catch(()=>xt.delete(e)),xt.set(e,n),n},me=(e,t="auto")=>{let r=De.get(e);if(r)return r;let n=(async()=>{let o=wt(e);if(o){let s=await o;return s&&gt(s)}for(let s=0;;s+=1){let i=await fetch(e,pe(e,{priority:t}));if(i.status===404||i.status===204)return;if(i.ok)return gt(new Uint8Array(await i.arrayBuffer()));if(s>=2)throw Error(`${e}: ${i.status}`);await new Promise((u)=>setTimeout(u,400*(s+1)))}})();return n.catch(()=>De.delete(e)),De.set(e,n),n},le=(e,t,r,n)=>e.replace("{z}",String(t)).replace("{x}",String(r)).replace("{y}",String(n)),ur=(e,t,r,n)=>{let o=Math.max(0,Math.min(t-1,e.maxzoom)),s=t-o,a=2**Math.max(0,s),[i,u]=s>=0?[Math.floor(r/a),Math.floor(n/a)]:[r,n],l=le(e.tiles,o,i,u),c=1/a;return{url:l,vz:o,vx:i,vy:u,part:c,ox:r%a*c,oy:n%a*c}},B=(e,t,r,n,o)=>{let s=e[t]?.[r];if(s===void 0)return o;let a=Array.isArray(s)&&!Ie(s)?s:de(s,n);return a===void 0||a===null?o:a},_e=(e,t)=>{let r=ye(e)??[0,0,0,1];return Ge([r[0],r[1],r[2],r[3]*t])},We=(e,t)=>{if(e.layout?.visibility==="none")return!1;return t>=(e.minzoom??0)&&t<(e.maxzoom??24)},se=(e,t,r,n,o,s)=>{let a=2**e;return[er((t+o/n)/a),yt((r+s/n)/a)]};var vn=300,lr=(e,t,r)=>{let n=Boolean(B(e,"layout",`${t}-allow-overlap`,r,!1)),o=Boolean(B(e,"layout",`${t}-ignore-placement`,r,!1));if(n&&o)return!0;if(n)return"allow";return o?"ignore":!1},cr=(e,t)=>Array.isArray(e)?[Number(e[0]??t[0]),Number(e[1]??t[1])]:t,En=(e)=>{let t=(Array.isArray(e)?e:[e]).map((a)=>Number(a)||0),[r=0,n=r,o=r,s=n]=t;return[r,n,o,s]},Tn=(e,t)=>{if(t==="uppercase")return e.toUpperCase();if(t==="lowercase")return e.toLowerCase();return e},Te=(e,t)=>{let r=0;for(let a=2;a+1<e.length;a+=2)r+=Math.hypot((e[a]??0)-(e[a-2]??0),(e[a+1]??0)-(e[a-1]??0));let n=[];if(!(r>0)||!(t>0))return n;let o=Math.min(t/2,r/2),s=0;for(let a=2;a+1<e.length;a+=2){let[i,u,l,c]=[e[a-2]??0,e[a-1]??0,e[a]??0,e[a+1]??0],p=Math.hypot(l-i,c-u);while(p>0&&o<=s+p){let m=(o-s)/p;n.push([i+(l-i)*m,u+(c-u)*m,i,u,l,c,o]),o+=t}s+=p}return n},et=(e,t,r)=>{let[n=0,o=0,s=0,a=0,i=0,u=0]=e,l=Math.hypot(i-s,u-a)||1,c=t%2===0?1:-1,[p,m]=[-(u-a)/l*c,(i-s)/l*c];return[n+p*r,o+m*r,Math.atan2(-p,m)*180/Math.PI]},Fn=(e,t,r)=>{let n=[],o=0;for(let s=2;s+1<e.length;s+=2){let[a,i,u,l]=[e[s-2]??0,e[s-1]??0,e[s]??0,e[s+1]??0],c=Math.hypot(u-a,l-i),[p,m]=[o,o+c];if(o=m,c<=0||m<t||p>r)continue;let y=(x)=>[a+(u-a)*(x-p)/c,i+(l-i)*(x-p)/c];if(n.length===0)n.push(...y(Math.max(t,p)));n.push(...y(Math.min(r,m)))}return n},In=(e,t,r,n,o)=>{let s=B(e,"layout","icon-rotation-alignment",r,"auto"),a=String(B(e,"layout","icon-text-fit",r,"none")),i=B(e,"layout","icon-text-fit-padding",r,[0,0,0,0]);return{image:t,size:xe(e.layout?.["icon-size"])?Number(B(e,"layout","icon-size",r,1)):o(e),anchor:String(B(e,"layout","icon-anchor",r,"center")),offset:cr(B(e,"layout","icon-offset",r,[0,0]),[0,0]),rotate:Number(B(e,"layout","icon-rotate",r,0))||0,alignment:s==="map"||s==="auto"&&n==="line"?"map":"viewport",overlap:lr(e,"icon",r),optional:Boolean(B(e,"layout","icon-optional",r,!1)),fit:a==="width"||a==="height"||a==="both"?a:"none",padding:En(i),color:String(B(e,"paint","icon-color",r,"#000")),opacity:Number(B(e,"paint","icon-opacity",r,1))}},Qe=16,Pn=(e,t,r)=>{let n=[],o=new Map,s=4096;e.layers.forEach((u)=>{if(u.type!=="fill-extrusion"||!We(u,r))return;let l=t.get(u["source-layer"]??"");if(!l)return;s=l.extent;for(let c of l.features){let p=ue(c,r);if(c.type!==3||!fe(u.filter,p))continue;let m=Number(B(u,"paint","fill-extrusion-height",p,0));if(!(m>0))continue;let y=[1/0,1/0,-1/0,-1/0];for(let x of c.geometry)for(let h=0;h+1<x.length;h+=2){let[b,g]=[x[h]??0,x[h+1]??0];y[0]=Math.min(y[0],b),y[1]=Math.min(y[1],g),y[2]=Math.max(y[2],b),y[3]=Math.max(y[3],g)}n.push({rings:c.geometry,height:m,box:y})}});let a=(u)=>Math.max(0,Math.min(Qe-1,Math.floor(u/s*Qe)));n.forEach(({box:u},l)=>{for(let c=a(u[1]);c<=a(u[3]);c++)for(let p=a(u[0]);p<=a(u[2]);p++){let m=c*Qe+p,y=o.get(m);if(y)y.push(l);else o.set(m,[l])}});let i=(u,l,c)=>{let p=!1;for(let m of u)for(let y=0,x=m.length-2;y+1<m.length;x=y,y+=2){let[h,b,g,_]=[m[y]??0,m[y+1]??0,m[x]??0,m[x+1]??0];if(b>c!==_>c&&l<(g-h)*(c-b)/(_-b)+h)p=!p}return p};return(u,l)=>(o.get(a(l)*Qe+a(u))??[]).reduce((c,p)=>{let m=n[p];return m&&i(m.rings,u,l)?Math.max(c??0,m.height):c},void 0)},fr=async(e,t,r,n,o,s,a=t,i=!1)=>{let u=le(e.tiles,t,r,n),l=await me(u,s);if(!l||te.has(o))return[];let c=[],p=i?Pn(e,l,a):()=>{return},m=new Map,y=(b)=>{let g=m.get(b);if(g!==void 0)return g;let _=b.layout?.["text-size"]??16,S=Ie(_)?ft(_):_;return m.set(b,S),S},x=new Map,h=(b)=>{let g=x.get(b);if(g!==void 0)return g;let _=b.layout?.["icon-size"]??1,S=Ie(_)?ft(_):_;return x.set(b,S),S};return e.layers.forEach((b,g)=>{let _=b.layout??{};if(b.type!=="symbol"||!We(b,a))return;if(_["text-field"]===void 0&&_["icon-image"]===void 0)return;let S=l.get(b["source-layer"]??"");if(!S)return;let W={zoom:a,properties:{},type:"Unknown"},v=B(b,"layout","symbol-placement",W,"point")==="line"?"line":"point",A=v==="line"&&B(b,"layout","text-rotation-alignment",W,"auto")!=="viewport";for(let f of S.features){let d=ue(f,a);if(!fe(b.filter,d))continue;let w=ct(_["text-field"],d).trim(),M=ct(_["icon-image"],d).trim();if(!w&&!M)continue;let k=Tn(w,B(b,"layout","text-transform",d,"none")),E=B(b,"layout","text-font",d,["Noto Sans Regular"]),L=Vt(Array.isArray(E)&&typeof E[0]==="string"?E[0]:"Noto Sans Regular"),V={layer:g,text:k,font:L,size:xe(b.layout?.["text-size"])?Number(B(b,"layout","text-size",d,16)):y(b),color:String(B(b,"paint","text-color",d,"#000")),haloColor:String(B(b,"paint","text-halo-color",d,"rgba(0,0,0,0)")),haloWidth:Number(B(b,"paint","text-halo-width",d,0)),anchor:String(B(b,"layout","text-anchor",d,"center")),offset:cr(B(b,"layout","text-offset",d,[0,0]),[0,0]),maxWidth:Number(B(b,"layout","text-max-width",d,10)),lineHeight:Number(B(b,"layout","text-line-height",d,1.2)),overlap:lr(b,"text",d),...A?{textAlong:A}:{},...B(b,"layout","text-optional",d,!1)?{textOptional:!0}:{},...M?{icon:In(b,M,d,v,h)}:{}};if(f.type===1)for(let O of f.geometry)for(let C=0;C+1<O.length;C+=2){let[F,R]=[O[C]??0,O[C+1]??0];if(F<0||R<0||F>=S.extent||R>=S.extent)continue;let[I,N]=se(t,r,n,S.extent,F,R),T=p(F,R);c.push({...V,lon:I,lat:N,...T===void 0?{}:{height:T}})}else if(!k&&v==="line"){let O=Number(B(b,"layout","symbol-spacing",d,250))*S.extent/(512*2**(a-t));for(let C of f.geometry)for(let[F=0,R=0,I=0,N=0,T=0,P=0]of Te(C,Math.max(O,1))){if(F<0||R<0||F>=S.extent||R>=S.extent)continue;let[H,K]=se(t,r,n,S.extent,F,R),[D,j]=se(t,r,n,S.extent,T,P),[J,Z]=se(t,r,n,S.extent,I,N);c.push({...V,lon:H,lat:K,along:[D-J,j-Z]})}}else if(k&&A){let O=S.extent/(512*2**(a-t)),C=Number(B(b,"layout","symbol-spacing",d,250))*O;for(let F of f.geometry){let R=0;for(let I=2;I+1<F.length;I+=2)R+=Math.hypot((F[I]??0)-(F[I-2]??0),(F[I+1]??0)-(F[I-1]??0));if(R<S.extent/32)continue;for(let[I=0,N=0,T=0,P=0,H=0,K=0,D=0]of Te(F,Math.max(C,1))){if(I<0||N<0||I>=S.extent||N>=S.extent)continue;let j=Math.min(D,R-D,vn*O),J=Fn(F,D-j,D+j),Z=[];for(let G=0;G+1<J.length;G+=2)Z.push(...se(t,r,n,S.extent,J[G]??0,J[G+1]??0));let[oe,ae]=se(t,r,n,S.extent,I,N),[Y,he]=se(t,r,n,S.extent,H,K),[z,X]=se(t,r,n,S.extent,T,P);c.push({...V,lon:oe,lat:ae,along:[Y-z,he-X],...Z.length>=4?{path:Z}:{}})}}}else{let O,C=0;for(let R of f.geometry){let I=0;for(let N=2;N+1<R.length;N+=2)I+=Math.hypot((R[N]??0)-(R[N-2]??0),(R[N+1]??0)-(R[N-1]??0));if(I>C)C=I,O=R}if(!O||C<S.extent/32)continue;let F=C/2;for(let R=2;R+1<O.length;R+=2){let[I,N,T,P]=[O[R-2]??0,O[R-1]??0,O[R]??0,O[R+1]??0],H=Math.hypot(T-I,P-N);if(H>=F&&H>0){let[K,D]=[I+(T-I)*F/H,N+(P-N)*F/H];if(K<0||D<0||K>=S.extent||D>=S.extent)break;let[j,J]=se(t,r,n,S.extent,K,D),[Z,oe]=se(t,r,n,S.extent,T,P),[ae,Y]=se(t,r,n,S.extent,I,N);c.push({...V,lon:j,lat:J,...v==="line"?{along:[Z-ae,oe-Y]}:{}});break}F-=H}}}}),c};var ke=6,mr=4;var pr=(e)=>e*7919%360;var br=(e)=>{let t=e.leaf_type,r=typeof e.nature==="string"?e.nature:"";if(t==="needleleaved"||/conif/i.test(r))return 1;if(t==="broadleaved"||/feuillu/i.test(r))return 0;if(t==="mixed"||/mixte/i.test(r))return 0.5;if(e.class==="wood")return e.subclass==="forest"?0.35:0.15;return 0};var tt=(e,t)=>{let r=e.length/ke,n=r>t?t/r:1,o=[];for(let s=0;s<r;s+=1)if(n>=1||(e[s*ke+mr]??0)<n)o.push(...e.slice(s*ke,(s+1)*ke));return Float64Array.from(o)},be=(e,t,r,n)=>{let o=Math.imul(e^2654435769,2246822507)^Math.imul(t^3266489909,668265263);return o=Math.imul(o^o>>>15^Math.imul(r,374761393),739982445),o=Math.imul(o^o>>>13^Math.imul(n,695872825),695872825),((o^o>>>16)>>>0)/4294967296},Re=(e,t,r)=>e.reduce((n,o)=>{let s=o.length/2,a=0;for(let i=0,u=s-1;i<s;u=i,i+=1){let[l,c,p,m]=[o[i*2]??0,o[i*2+1]??0,o[u*2]??0,o[u*2+1]??0];if(c>r!==m>r&&t<(p-l)*(r-c)/(m-c)+l)a+=1}return a%2===1?!n:n},!1),Nn=(e,t,r,n,o=Number.POSITIVE_INFINITY)=>{let s=e[0]??[],a=[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY];for(let v=0;v+1<s.length;v+=2){let[A,f]=[s[v]??0,s[v+1]??0];a[0]=Math.min(a[0]??A,A),a[1]=Math.min(a[1]??f,f),a[2]=Math.max(a[2]??A,A),a[3]=Math.max(a[3]??f,f)}let[i,u]=[Math.max(0,a[0]??0),Math.max(0,a[1]??0)],[l,c]=[Math.min(t,a[2]??0),Math.min(t,a[3]??0)];if(!(r>0)||i>=l||u>=c)return[];let p=(l-i)/r*((c-u)/r),m=p>o?r*Math.sqrt(p/o):r,[y,x,h,b]=[Math.floor(i/m),Math.ceil(l/m),Math.floor(u/m),Math.ceil(c/m)],[g,_,S]=n,W=Math.imul(g+1,16777619)^Math.imul(_,1540483477)^Math.imul(S,461845907);return Array.from({length:Math.max(0,b-h)},(v,A)=>h+A).flatMap((v)=>Array.from({length:Math.max(0,x-y)},(A,f)=>y+f).flatMap((A)=>{let f=(A+be(W,A,v,1))*m,d=(v+be(W,A,v,2))*m;if(f<0||d<0||f>=t||d>=t||!Re(e,f,d))return[];return[[f,d,be(W,A,v,3)]]}))},dr=async(e,t,r,n,o,s,a,i)=>{let u=le(e.tiles,t,r,n),l=await me(u,i);if(!l||te.has(o))return;let c=Ee(t,n),p=[];e.layers.forEach((h,b)=>{let g=s[b]??0,_=l.get(h["source-layer"]??"");if(!_||!(g>0))return;let S=g/c*_.extent;_.features.forEach((W)=>{if(W.type!==3||!fe(h.filter,ue(W,t)))return;let v=br(W.properties);W.geometry.reduce((f,d)=>{let w=0;for(let M=0;M+1<d.length;M+=2){let k=(M+2)%d.length;w+=(d[M]??0)*(d[k+1]??0)-(d[k]??0)*(d[M+1]??0)}if(w>0)f.push([d]);else if(w<0)f.at(-1)?.push(d);return f},[]).forEach((f)=>{Nn(f,_.extent,S,[t,r,n],a*4).forEach(([d,w,M])=>{p.push([d,w,M,_.extent,v])})})})});let m=p.length>a?a/p.length:1,y=p.filter(([,,h])=>m>=1||be(Math.floor(h*2147483648),t,r,n)<m),x=new Float64Array(y.length*ke);return y.forEach(([h,b,g,_,S],W)=>{let[v,A]=se(t,r,n,_,h,b),f=be(Math.floor(g*2147483648),7,11,13),d=be(Math.floor(g*2147483648),3,5,17)<S?1:0;x.set([v,A,0.75+0.5*g,pr(g),f,d],W*ke)}),x};var Un={bus_stop:"shelter",waste_basket:"bin",post_box:"postbox",drinking_water:"fountain",bicycle_parking:"rack"},Ln=new Set(["primary","secondary","tertiary","minor","service","trunk"]),On=25,yr={street:[24,3.2],path:[18,1.3]},Cn=(e)=>e.filter((t)=>t.type===1),hr=async(e,t,r,n,o,s,a)=>{let i=le(e.tiles,t,r,n),u=await me(i,a);if(!u||te.has(o))return;let l=u.get("poi"),c=u.get("transportation"),p=c?.extent??l?.extent??4096,m=p/Ee(t,n),y=(c?.features??[]).filter((A)=>A.type===2&&Ln.has(String(A.properties.class))),x=(u.get("landcover")?.features??[]).filter((A)=>A.type===3&&String(A.properties.class)==="grass").map((A)=>{let f=A.geometry[0]??[],d=f.filter((M,k)=>k%2===0),w=f.filter((M,k)=>k%2===1);return{rings:A.geometry,bounds:[Math.min(...d),Math.min(...w),Math.max(...d),Math.max(...w)]}}),h=(A,f)=>x.some(({rings:d,bounds:[w=0,M=0,k=0,E=0]})=>A>=w&&A<=k&&f>=M&&f<=E&&Re(d,A,f)),b=[],g=(A,f,d,w,M)=>{if(A<0||f<0||A>=p||f>=p)return;let[k,E]=se(t,r,n,p,A,f);b.push(k,E,1,d,w,dt.indexOf(M))},_=On*m,S=new Map,W=(A,f)=>(A+32768)*65536+f+32768;y.forEach((A)=>{A.geometry.forEach((f)=>{for(let d=2;d+1<f.length;d+=2){let[w,M,k,E]=[f[d-2]??0,f[d-1]??0,f[d]??0,f[d+1]??0],[L,V]=[Math.floor(Math.min(w,k)/_),Math.floor(Math.max(w,k)/_)],[O,C]=[Math.floor(Math.min(M,E)/_),Math.floor(Math.max(M,E)/_)];for(let F=L;F<=V;F+=1)for(let R=O;R<=C;R+=1){let I=S.get(W(F,R))??[];I.push(w,M,k,E),S.set(W(F,R),I)}}})});let v=(A,f,d)=>{let[w,M,k]=[_*_,0,0],[E,L]=[Math.floor(A/_),Math.floor(f/_)];for(let V=E-1;V<=E+1;V+=1)for(let O=L-1;O<=L+1;O+=1){let C=S.get(W(V,O))??[];for(let F=0;F+3<C.length;F+=4){let[R,I,N,T]=[C[F]??0,C[F+1]??0,C[F+2]??0,C[F+3]??0],[P,H]=[N-R,T-I],K=P*P+H*H,D=K>0?Math.max(0,Math.min(1,((A-R)*P+(f-I)*H)/K)):0,[j,J]=[R+D*P-A,I+D*H-f],Z=j*j+J*J;if(Z<w)[w,M,k]=[Z,j,J]}}if(M===0&&k===0)return d;return Math.atan2(M,-k)*180/Math.PI};return Cn(l?.features??[]).forEach((A)=>{let f=Un[String(A.properties.subclass)];if(!f)return;A.geometry.forEach(([d=0,w=0])=>{let M=be(Math.floor(d),Math.floor(w),dt.indexOf(f),31);g(d,w,v(d,w,M*360),M,f)})}),(c?.features??[]).forEach((A)=>{let f=String(A.properties.subclass),d=String(A.properties.class)==="path"&&f==="pedestrian",w=String(A.properties.class)==="path"&&(f==="footway"||f==="path");if(A.type!==2||!(d||w))return;let[M,k]=d?yr.street:yr.path;A.geometry.forEach((E)=>{Te(E,M*m).forEach((L,V)=>{let[O=0,C=0,,,,,F=0]=L;if(w&&!h(O,C))return;let R=be(Math.floor(O),Math.floor(C),Math.floor(F),37);g(...et(L,V,k*m),R,"bench")})})}),tt(b,s)};var gr={flat:1,skillion:1,hipped:2,"half-hipped":2,side_hipped:2,dome:2,onion:2,round:2,gabled:3,saltbox:3,pyramidal:4,cone:4,mansard:5,gambrel:5},Dn=255,wr=(e)=>e==="generated"?Dn:gr[e],xr=(e,t)=>Me(e)?t.map((r)=>e[r]).find((r)=>r!==void 0):void 0,_r=(e,t)=>{let r=xr(e,["roof:shape","roof_shape"]);if(t==="flat")return;if(typeof r==="string"&&gr[r]!==void 0)return r;return t==="generated"?"generated":void 0},Ar=(e)=>Number(xr(e,["roof:height","roof_height"])??Number.NaN),Mr=(e)=>Qt*Math.cos(Math.atan(Math.sinh(Math.PI*(1-2*e))));var At=32,re={color:0,second:4,size:8,size2:16,range:24,blur:26,landmark:26,patternRatio:27,fillPattern:28,linePattern:29};class $e{static __wrap(e){let t=Object.create($e.prototype);return t.__wbg_ptr=e,Sr.register(t,t.__wbg_ptr,t),t}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,Sr.unregister(this),e}free(){let e=this.__destroy_into_raw();U.__wbg_tessellatedtile_free(e,0)}blockIndices(){return U.tessellatedtile_blockIndices(this.__wbg_ptr)}blockRanges(){let e=U.tessellatedtile_blockRanges(this.__wbg_ptr);var t=nt(e[0],e[1]).slice();return U.__wbindgen_free(e[0],e[1]*4,4),t}blocks(){return U.tessellatedtile_blocks(this.__wbg_ptr)}bounds(){let e=U.tessellatedtile_bounds(this.__wbg_ptr);var t=Hn(e[0],e[1]).slice();return U.__wbindgen_free(e[0],e[1]*8,8),t}fillRanges(){let e=U.tessellatedtile_fillRanges(this.__wbg_ptr);var t=nt(e[0],e[1]).slice();return U.__wbindgen_free(e[0],e[1]*4,4),t}indices(){return U.tessellatedtile_indices(this.__wbg_ptr)}lineRanges(){let e=U.tessellatedtile_lineRanges(this.__wbg_ptr);var t=nt(e[0],e[1]).slice();return U.__wbindgen_free(e[0],e[1]*4,4),t}lineTable(){return U.tessellatedtile_lineTable(this.__wbg_ptr)}pieces(){return U.tessellatedtile_pieces(this.__wbg_ptr)}prism(){return U.tessellatedtile_prism(this.__wbg_ptr)!==0}vertices(){return U.tessellatedtile_vertices(this.__wbg_ptr)}}if(Symbol.dispose)$e.prototype[Symbol.dispose]=$e.prototype.free;function Rr(e,t,r,n,o,s,a,i,u,l,c,p,m,y,x,h,b){let g=rt(e,U.__wbindgen_malloc),_=ne,S=Ae(t,U.__wbindgen_malloc),W=ne,v=Ae(r,U.__wbindgen_malloc),A=ne,f=Ae(n,U.__wbindgen_malloc),d=ne,w=Ae(o,U.__wbindgen_malloc),M=ne,k=rt(s,U.__wbindgen_malloc),E=ne,L=Ae(a,U.__wbindgen_malloc),V=ne,O=Ae(i,U.__wbindgen_malloc),C=ne,F=Ae(u,U.__wbindgen_malloc),R=ne,I=kr(l,U.__wbindgen_malloc),N=ne,T=kr(c,U.__wbindgen_malloc),P=ne,H=jn(p,U.__wbindgen_malloc),K=ne,D=rt(m,U.__wbindgen_malloc),j=ne,J=Ae(y,U.__wbindgen_malloc),Z=ne,oe=rt(b,U.__wbindgen_malloc),ae=ne,Y=U.tessellateVectorTile(g,_,S,W,v,A,f,d,w,M,k,E,L,V,O,C,F,R,I,N,T,P,H,K,D,j,J,Z,x,h,oe,ae);return $e.__wrap(Y)}function Bn(){return{__proto__:null,"./isard_tess_bg.js":{__proto__:null,__wbg___wbindgen_throw_41e9ee4f547fc59a:function(t,r){throw Error(Jn(t,r))},__wbg_new_from_slice_37a3c3a194266cb8:function(t,r){return new Uint32Array(nt(t,r))},__wbg_new_from_slice_9a868026ffa4208a:function(t,r){return new Uint8Array(Vn(t,r))},__wbg_new_from_slice_ca6ad97db1f4779a:function(t,r){return new Float32Array(Wn(t,r))},__wbindgen_init_externref_table:function(){let t=U.__wbindgen_externrefs,r=t.grow(4);t.set(0,void 0),t.set(r+0,void 0),t.set(r+1,null),t.set(r+2,!0),t.set(r+3,!1)}}}}var Sr=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e)=>U.__wbg_tessellatedtile_free(e,1));function Wn(e,t){return e=e>>>0,vr().subarray(e/4,e/4+t)}function Hn(e,t){return e=e>>>0,Er().subarray(e/8,e/8+t)}function nt(e,t){return e=e>>>0,Tr().subarray(e/4,e/4+t)}function Vn(e,t){return e=e>>>0,St().subarray(e/1,e/1+t)}var He=null;function vr(){if(He===null||He.byteLength===0)He=new Float32Array(U.memory.buffer);return He}var Ve=null;function Er(){if(Ve===null||Ve.byteLength===0)Ve=new Float64Array(U.memory.buffer);return Ve}function Jn(e,t){return zn(e>>>0,t)}var Je=null;function Tr(){if(Je===null||Je.byteLength===0)Je=new Uint32Array(U.memory.buffer);return Je}var je=null;function St(){if(je===null||je.byteLength===0)je=new Uint8Array(U.memory.buffer);return je}function Ae(e,t){let r=t(e.length*4,4)>>>0;return Tr().set(e,r/4),ne=e.length,r}function kr(e,t){let r=t(e.length*1,1)>>>0;return St().set(e,r/1),ne=e.length,r}function jn(e,t){let r=t(e.length*4,4)>>>0;return vr().set(e,r/4),ne=e.length,r}function rt(e,t){let r=t(e.length*8,8)>>>0;return Er().set(e,r/8),ne=e.length,r}var ot=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});ot.decode();var $n=2146435072,Mt=0;function zn(e,t){if(Mt+=t,Mt>=$n)ot=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),ot.decode(),Mt=t;return ot.decode(St().subarray(e,e+t))}var ne=0,qn,Gn,U;function Yn(e,t){return Gn=e,U=e.exports,qn=t,He=null,Ve=null,Je=null,je=null,U.__wbindgen_start(),U}async function Kn(e,t){if(typeof Response==="function"&&e instanceof Response){if(!e.ok)throw Error(`failed to fetch Wasm: ${e.status} ${e.statusText} fetching '${e.url}'`);if(typeof WebAssembly.instantiateStreaming==="function")try{return await WebAssembly.instantiateStreaming(e,t)}catch(o){if(r(e.type)&&e.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",o);else throw o}let n=await e.arrayBuffer();return await WebAssembly.instantiate(n,t)}else{let n=await WebAssembly.instantiate(e,t);if(n instanceof WebAssembly.Instance)return{instance:n,module:e};else return n}function r(n){switch(n){case"basic":case"cors":case"default":return!0}return!1}}async function Fr(e){if(U!==void 0)return U;if(e!==void 0)if(Object.getPrototypeOf(e)===Object.prototype)({module_or_path:e}=e);else console.warn("using deprecated parameters for the initialization function; pass a single object instead");if(e===void 0)e=new URL("isard_tess_bg.wasm",import.meta.url);let t=Bn();if(typeof e==="string"||typeof Request==="function"&&e instanceof Request||typeof URL==="function"&&e instanceof URL)e=fetch(e);let{instance:r,module:n}=await Kn(await e,t);return Yn(r,n)}var st=async(e,t,r,n,o,s)=>{let a=le(e.tiles,t,r,n),i=await me(a,s),u={points:[],ringStart:[],polygonStart:[],feature:[]},l=[];if(!i||te.has(o))return;let c=new Set,p=2**t;return e.layers.forEach((m)=>{let y=i.get(m["source-layer"]??"");if(!y)return;y.features.forEach((x)=>{if(x.type!==3||c.has(x)||!fe(m.filter,ue(x,t)))return;c.add(x);let h=l.length;l.push(x.properties),x.geometry.forEach((b)=>{let g=0;for(let _=0;_+1<b.length;_+=2){let S=(_+2)%b.length;g+=(b[_]??0)*(b[S+1]??0)-(b[S]??0)*(b[_+1]??0)}if(g===0)return;if(g>0||u.polygonStart.length===0||u.feature.at(-1)!==h)u.polygonStart.push(u.ringStart.length),u.feature.push(h);u.ringStart.push(u.points.length/2);for(let _=0;_+1<b.length;_+=2)u.points.push((r+(b[_]??0)/y.extent)/p,(n+(b[_+1]??0)/y.extent)/p)})})}),u.ringStart.push(u.points.length/2),u.polygonStart.push(u.ringStart.length-1),{arrays:{points:Float64Array.from(u.points),ringStart:Uint32Array.from(u.ringStart),polygonStart:Uint32Array.from(u.polygonStart),feature:Uint32Array.from(u.feature)},properties:l}},Xn=new Set(["theatre","museum","place_of_worship","castle","monument","attraction","town_hall"]),Zn=(e)=>(e?.get("poi")?.features??[]).filter((t)=>t.type===1&&Xn.has(String(t.properties.class))).flatMap((t)=>t.geometry.flat()),kt=(e)=>{let[t,r,n,o]=[1/0,1/0,-1/0,-1/0];for(let s=0;s+1<e.length;s+=2)[t,r]=[Math.min(t,e[s]??0),Math.min(r,e[s+1]??0)],[n,o]=[Math.max(n,e[s]??0),Math.max(o,e[s+1]??0)];return[t,r,n,o]},Qn=(e,t)=>{if(t.length===0)return!1;let[r,n,o,s]=kt(e[0]??[]);for(let a=0;a+1<t.length;a+=2){let[i,u]=[t[a]??0,t[a+1]??0];if(i>=r&&i<=o&&u>=n&&u<=s&&Re(e,i,u))return!0}return!1},Ir=(e)=>{let t=e.length>2&&e[0]===e[e.length-2]&&e[1]===e[e.length-1],r=Math.max(1,e.length/2-(t?1:0)),[n,o]=[0,0];for(let s=0;s<r;s+=1)[n,o]=[n+(e[s*2]??0),o+(e[s*2+1]??0)];return[n/r,o/r]},eo=(e,t)=>{let r=e.filter((s)=>s.type===3),n=r.filter((s)=>Qn(s.geometry,t)),o=new Set(n);return n.forEach((s)=>{let[a,i,u,l]=kt(s.geometry[0]??[]),c=Ir(s.geometry[0]??[]);r.forEach((p)=>{if(o.has(p))return;let[m,y,x,h]=kt(p.geometry[0]??[]);if(x<a||m>u||h<i||y>l)return;if(Re(s.geometry,...Ir(p.geometry[0]??[]))||Re(p.geometry,...c))o.add(p)})}),o},to={line:(e)=>e!==1,circle:(e)=>e===1,fill:(e)=>e===3,extrusion:(e)=>e===3},ro=(e,t)=>{let r=_r(e,t);return[r===void 0?0:wr(r)??0,Ar(e)]},no=24,oo=(e,t,r,n)=>{if(!lt(e.filter))return fe(e.filter,ue(t,r))?[0,0]:void 0;let o,s=0;for(let a=r-1;a<=n;a+=1)if(fe(e.filter,ue(t,a)))o??=a,s=a+1;else if(o!==void 0)break;return o===void 0?void 0:[o<=r-1?0:o,s>n?99:s]},so=(e,t)=>{let r=e.slice(),n=[[0,0,(o)=>o>=0],[0,t,(o)=>o<=t],[1,0,(o)=>o>=0],[1,t,(o)=>o<=t]];for(let[o,s,a]of n){let i=[],u=r.length/2;for(let l=0;l<u;l+=1){let[c,p]=[r[l*2]??0,r[l*2+1]??0],m=(l+1)%u,[y,x]=[r[m*2]??0,r[m*2+1]??0],[h,b]=o===0?[c,y]:[p,x];if(a(h))i.push(c,p);if(a(h)!==a(b)){let g=(s-h)/(b-h);i.push(o===0?s:c+(y-c)*g,o===0?p+(x-p)*g:s)}}if(r=i,r.length===0)break}return r},io=0.00048828125,ao=(e,t)=>{let r=e.length/2;if(r<=2)return[...e];let n=new Uint8Array(r),o=[[0,r-1]],s=t*t;n[0]=1,n[r-1]=1;while(o.length>0){let[a,i]=o.pop()??[0,0],[u,l,c,p]=[e[a*2]??0,e[a*2+1]??0,e[i*2]??0,e[i*2+1]??0],[m,y]=[c-u,p-l],x=m*m+y*y,[h,b]=[-1,s];for(let g=a+1;g<i;g+=1){let[_,S]=[(e[g*2]??0)-u,(e[g*2+1]??0)-l],W=x>0?Math.max(0,Math.min(1,(_*m+S*y)/x)):0,v=(_-W*m)**2+(S-W*y)**2;if(v>b)[h,b]=[g,v]}if(h>=0)n[h]=1,o.push([a,h],[h,i])}return e.filter((a,i)=>n[i>>1]===1)},uo=(e,t)=>{let r=[],n=[],o=()=>{if(n.length>=4)r.push(n);n=[]};for(let s=2;s+1<e.length;s+=2){let[a,i,u,l]=[e[s-2]??0,e[s-1]??0,e[s]??0,e[s+1]??0],[c,p]=[u-a,l-i],[m,y]=[0,1];for(let[x,h]of[[-c,a],[c,t-a],[-p,i],[p,t-i]])if(x===0){if(h<0)y=-1}else if(x<0)m=Math.max(m,h/x);else y=Math.min(y,h/x);if(m>y){o();continue}if(n.length===0||m>0)o(),n.push(a+c*m,i+p*m);if(n.push(a+c*y,i+p*y),y<1)o()}return o(),r},lo=(e,t)=>e>=t?[e-0.5,e+1,e+3,e+6]:[e-0.5,e-0.16666666666666666,e+0.16666666666666666,e+0.5],co=(e,t,r,n,o)=>{let s=2**r,[a,i]=[n*t,o*t],u=[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY];e.forEach((y)=>{for(let x=0;x+1<y.length;x+=2){let[h,b]=[(y[x]??0)*s-a,(y[x+1]??0)*s-i];u[0]=Math.min(u[0]??h,h),u[1]=Math.min(u[1]??b,b),u[2]=Math.max(u[2]??h,h),u[3]=Math.max(u[3]??b,b)}});let[l=0,c=0,p=0,m=0]=u;if(p<=0||m<=0||l>=t||c>=t)return;return e.map((y)=>y.map((x,h)=>x*s-(h%2===0?a:i)))},Pr=async(e,{z:t,x:r,y:n,deepest:o=e.maxzoom,roofs:s="data"},a,i,u)=>{let l=Math.max(0,t-e.maxzoom),[c,p,m]=[t-l,Math.floor(r/2**l),Math.floor(n/2**l)],[y,x]=[r-p*2**l,n-m*2**l],h=le(e.tiles,c,p,m),b=await me(h,u);if(te.has(a))return;let g=2**t,_=Zn(b),S=new Map,W=(T)=>{let P=S.get(T)??(_.length>0?eo(T,_):new Set);return S.set(T,P),P},v=lo(t,Math.max(o,e.maxzoom)),A=t>=Math.max(o,e.maxzoom)?no:t,f={points:[],ringStart:[],polygonStart:[],feature:[],roofs:[],roofHeights:[],roofOutlines:[],roofOutlineStart:[]},d={points:[],start:[],feature:[]},w=[],M=[],k={points:[],feature:[]},E=[],L=[],V=[],O=[],C=[],F={},R=(T,P,H,K,D,j=!1)=>{let J=(z,X,G)=>B(P,"paint",z,{...H,zoom:G},X),Z=`${P.type}-opacity`,oe=xe(P.paint?.[Z]),ae=(z)=>{let[X,G,ie,ce]=ye(J(j?"fill-outline-color":`${P.type}-color`,"#000",z))??[0,0,0,1];return[X,G,ie,ce*(oe?Number(J(Z,1,z)):1)]},Y=Array(At).fill(0),he=v[3]-v[0]>1.5?v[1]:v[3];if(Y.splice(re.color,8,...ae(v[0]),...ae(he)),Y.splice(re.range,2,...D),!j&&["fill","background","line","fill-extrusion"].includes(P.type)){let z=J(`${P.type}-pattern`,"",(v[0]+he)/2);if(typeof z==="string"&&z){let X=V.indexOf(z);Y[P.type==="fill"||P.type==="background"?re.fillPattern:re.linePattern]=(X>=0?X:V.push(z)-1)+1}}if(P.type==="circle"){let z=(v[0]+he)/2,[X,G,ie,ce]=ye(J("circle-stroke-color","#000",z))??[0,0,0,1];Y.splice(re.color,8,...ae(z),X,G,ie,ce*Number(J("circle-stroke-opacity",1,z)))}return v.forEach((z,X)=>{if(Y[re.size+X]=z,j){Y[re.size+4+X]=1;return}if(P.type==="circle"){Y[re.size+4+X]=Math.max(0,Number(J("circle-radius",5,z))||0),Y[re.size2+X]=z,Y[re.size2+4+X]=Math.max(0,Number(J("circle-stroke-width",0,z))||0);return}if(P.type==="fill-extrusion"){Y[re.size+4+X]=Math.max(0,Number(J("fill-extrusion-height",0,z))||0),Y[re.size2+X]=z,Y[re.size2+4+X]=Math.max(0,Number(J("fill-extrusion-base",0,z))||0);return}if(P.type!=="line")return;if(X===0)Y[re.blur]=Math.max(0,Number(J("line-blur",0,(v[0]+he)/2))||0);let G=Number(J("line-width",1,z)),ie=Number(J("line-gap-width",0,z));Y[re.size+4+X]=Math.max(0,ie>0?ie+2*G:G),Y[re.size2+X]=z,Y[re.size2+4+X]=Number(J("line-offset",0,z))||0}),L.push(...Y),O.push(K),C.push(T),O.length-1},I=(T,P,H)=>[(r+T/H)/g,(n+P/H)/g],N=(T,P,H,K)=>{T.forEach((D)=>{let j=P&&D.length>=2?[...D,D[0]??0,D[1]??0]:D;uo(j,K).forEach((J)=>{let Z=ao(J,K*io);d.start.push(d.points.length/2),d.feature.push(H);for(let oe=0;oe+1<Z.length;oe+=2)d.points.push(...I(Z[oe]??0,Z[oe+1]??0,K))})})};if(e.layers.forEach((T,P)=>{w.push(f.polygonStart.length),M.push(d.start.length),E.push(k.feature.length);let H=Ye(T),K=T.type==="fill"&&T.paint?.["fill-outline-color"]!==void 0&&T.paint?.["fill-antialias"]!==!1;if(!H)return;if(T.type==="background"){let j=R(P,T,{zoom:t,properties:{},type:"Unknown"},F,[0,0]);if(i)return;f.polygonStart.push(f.ringStart.length),f.feature.push(j),f.roofs.push(0),f.roofHeights.push(Number.NaN),f.roofOutlineStart.push(f.roofOutlines.length/2),f.ringStart.push(f.points.length/2),f.points.push(r/g,n/g,(r+1)/g,n/g,(r+1)/g,(n+1)/g,r/g,(n+1)/g);return}let D=b?.get(T["source-layer"]??"");D?.features.forEach((j)=>{if(!to[H](j.type))return;let J=ue(j,t),Z=oo(T,j,t,A);if(!Z)return;let oe=l>0?co(j.geometry,D.extent,l,y,x):j.geometry;if(!oe)return;let ae=R(P,T,J,j.properties,Z),Y=K?R(P,T,J,j.properties,Z,!0):-1;if(H==="extrusion"&&W(D.features).has(j))L[ae*At+re.landmark]=1;if(i)return;if(H==="circle"){oe.forEach((G)=>{for(let ie=0;ie+1<G.length;ie+=2){let[ce=0,Q=0]=[G[ie],G[ie+1]];if(ce<0||Q<0||ce>=D.extent||Q>=D.extent)continue;k.points.push(...I(ce,Q,D.extent)),k.feature.push(ae)}});return}if(H==="line"){N(oe,j.type===3,ae,D.extent);return}if(Y>=0)N(oe,!0,Y,D.extent);let he=!1,[z,X]=H==="extrusion"?ro(j.properties,s):[0,Number.NaN];oe.forEach((G)=>{let ie=0;for(let Q=0;Q+1<G.length;Q+=2){let Et=(Q+2)%G.length;ie+=(G[Q]??0)*(G[Et+1]??0)-(G[Et]??0)*(G[Q+1]??0)}if(ie===0)return;if(ie<0&&!he)return;let ce=so(G,D.extent);if(ie>0)he=ce.length>=6;if(ce.length<6)return;if(ie>0){if(f.polygonStart.push(f.ringStart.length),f.feature.push(ae),f.roofs.push(z),f.roofHeights.push(X),f.roofOutlineStart.push(f.roofOutlines.length/2),z>1&&G.some((Q)=>Q<0||Q>D.extent))for(let Q=0;Q+1<G.length;Q+=2)f.roofOutlines.push(...I(G[Q]??0,G[Q+1]??0,D.extent))}f.ringStart.push(f.points.length/2);for(let Q=0;Q+1<ce.length;Q+=2)f.points.push(...I(ce[Q]??0,ce[Q+1]??0,D.extent))})})}),w.push(f.polygonStart.length),M.push(d.start.length),E.push(k.feature.length),f.ringStart.push(f.points.length/2),f.polygonStart.push(f.ringStart.length-1),f.roofOutlineStart.push(f.roofOutlines.length/2),d.start.push(d.points.length/2),i)return{styles:Float32Array.from(L),patterns:V};return{fills:{points:Float64Array.from(f.points),ringStart:Uint32Array.from(f.ringStart),polygonStart:Uint32Array.from(f.polygonStart),feature:Uint32Array.from(f.feature),fillStart:Uint32Array.from(w),roofs:Uint8Array.from(f.roofs),roofHeights:Float32Array.from(f.roofHeights),roofOutlines:Float64Array.from(f.roofOutlines),roofOutlineStart:Uint32Array.from(f.roofOutlineStart),roofMetres:Mr((n+0.5)/g)},lines:{points:Float64Array.from(d.points),start:Uint32Array.from(d.start),feature:Uint32Array.from(d.feature),lineStart:Uint32Array.from(M)},circles:{points:Float64Array.from(k.points),feature:Uint32Array.from(k.feature),circleStart:Uint32Array.from(E)},styles:Float32Array.from(L),patterns:V,tile:Float64Array.of(r/g,n/g,(r+1)/g,(n+1)/g),properties:O,sublayer:Uint16Array.from(C)}},ve={},Nr=()=>{if(!ve.url)return Promise.resolve(!1);let e=ve.ready??Fr({module_or_path:ve.url}).then(()=>!0,(t)=>(console.warn("isard: the tessellation module failed to load, the main thread does its work",t),!1));return ve.ready=e,e},Ur=(e,t,r)=>{let{fills:n,lines:o}=e;try{let s=Rr(n.points,n.ringStart,n.polygonStart,n.feature,n.fillStart,o.points,o.start,o.feature,o.lineStart,t,n.roofs??new Uint8Array,n.roofHeights??new Float32Array,n.roofOutlines??new Float64Array,n.roofOutlineStart??new Uint32Array,n.roofMetres??0,r,e.tile??new Float64Array),a={vertices:s.vertices(),indices:s.indices(),fillRanges:s.fillRanges(),prism:s.prism(),pieces:s.pieces(),lineTable:s.lineTable(),lineRanges:s.lineRanges(),blocks:s.blocks(),blockIndices:s.blockIndices(),blockRanges:s.blockRanges(),bounds:s.bounds()};return s.free(),a}catch(s){console.warn("isard: the tessellation module failed, the main thread does its work",s),ve.ready=Promise.resolve(!1);return}};var fo={primary:8,secondary:7,tertiary:6,minor:5,service:4},Lr=async(e,t,r,n,o,s,a,i)=>{let u=le(e.tiles,t,r,n),l=await me(u,i);if(!l||te.has(o))return;let c=Ee(t,n),p=new Set,m=[];return e.layers.forEach((y)=>{let x=l.get(y["source-layer"]??"");if(!x)return;let h=x.extent/c;x.features.forEach((b)=>{let g=fo[String(b.properties.class)];if(b.type!==2||g===void 0||p.has(b)||!fe(y.filter,ue(b,t)))return;p.add(b),b.geometry.forEach((_)=>{Te(_,s*h).forEach((S,W)=>{let[v,A,f]=et(S,W,g*h);if(v<0||A<0||v>=x.extent||A>=x.extent)return;let[d,w]=se(t,r,n,x.extent,v,A),M=be(Math.floor(v),Math.floor(A),Math.floor(S[6]??0),29);m.push(d,w,1,f,M,0)})})})}),tt(m,a)};var mo=new Set(["butt","round","square"]),po=new Set(["bevel","miter","round"]),bo=(e)=>mo.has(e),yo=(e)=>po.has(e),ho=(e)=>bo(e)?e:"butt",go=(e)=>yo(e)?e:"miter",wo=(e,t)=>{if(e.patterns.has(t))return e.patterns.get(t);let n=(()=>{let o=_t(e,t);if(!o||!(o.icon.width>0)||!(o.icon.height>0))return;let{icon:s}=o,a=new OffscreenCanvas(s.width,s.height);return a.getContext("2d")?.drawImage(o.image,s.x,s.y,s.width,s.height,0,0,s.width,s.height),a})();return e.patterns.set(t,n),n},Rt=new Map,xo=(e)=>{let t=Rt.get(e)?.pop()??new OffscreenCanvas(e,e),r=t.getContext("2d",{willReadFrequently:!0});if(!r)throw Error("no 2D context");return r.setTransform(1,0,0,1,0,0),r.globalAlpha=1,r.setLineDash([]),r.clearRect(0,0,e,e),{canvas:t,g:r}},_o=(e)=>{let t=Rt.get(e.width)??[];if(Rt.set(e.width,t),t.length<4)t.push(e)},Ao=(e,t,r)=>{if(r)return Promise.resolve(e.transferToImageBitmap());return createImageBitmap(t.getImageData(0,0,e.width,e.height),{premultiplyAlpha:"none"})},Or=async(e,t,r,n,o,s,a)=>{let i=ur(e,t,r,n),u=await me(i.url,a);if(te.has(s))return;let{canvas:l,g:c}=xo(o);try{return await Mo(e,i,u,l,c,t,r,n,o,s,a)}finally{_o(l)}},Mo=async(e,t,r,n,o,s,a,i,u,l,c)=>{let p=Math.max(0,s-1),m=u/256,y=!1,x=!1;for(let h of e.layers){if(!We(h,p))continue;let b={zoom:p,properties:{},type:"Unknown"};if(h.type==="background"){let d=B(h,"paint","background-color",b,"#000"),w=Number(B(h,"paint","background-opacity",b,1));if(o.fillStyle=_e(d,w),o.fillRect(0,0,u,u),(ye(d)??[0,0,0,1])[3]*w>=1)x=!0;y=!0;continue}if(h.type==="raster"){let d=h.source===void 0?void 0:e.rasters[h.source];if(!d)continue;let w=Math.max(0,Math.min(s-(d.tileSize>=512?1:0),d.maxzoom)),M=2**(s-w),k=le(d.tiles,w,Math.floor(a/M),Math.floor(i/M)),E=await ar(k,c);if(te.has(l))return;if(!E)continue;let[L,V]=[E.width/M,E.height/M];o.globalAlpha=Number(B(h,"paint","raster-opacity",b,1)),o.drawImage(E,a%M*L,i%M*V,L,V,0,0,u,u),o.globalAlpha=1,y=!0;continue}let g=r?.get(h["source-layer"]??"");if(!g)continue;let _=u/(g.extent*t.part),[S,W]=[t.ox*g.extent,t.oy*g.extent],v=(d,w)=>{o.beginPath();for(let M of d.geometry){for(let k=0;k+1<M.length;k+=2){let[E,L]=[((M[k]??0)-S)*_,((M[k+1]??0)-W)*_];if(k===0)o.moveTo(E,L);else o.lineTo(E,L)}if(w)o.closePath()}},A=new Map,f=(d,w,M,k)=>{let E=A.get(w),L=E??xe(h[d]?.[w]);if(E===void 0)A.set(w,L);return B(h,d,w,L?M:b,k)};for(let d of g.features){let w=ue(d,p);if(!fe(h.filter,w))continue;if(h.type==="fill-extrusion"&&d.type===3)v(d,!0),o.fillStyle=_e(f("paint","fill-extrusion-color",w,"#000"),Number(f("paint","fill-extrusion-opacity",w,1))),o.fill("evenodd"),y=!0;else if(h.type==="fill"&&d.type===3){let M=Number(f("paint","fill-opacity",w,1)),k=f("paint","fill-pattern",w,void 0);v(d,!0);let E=typeof k==="string"?_t(e,k)?.icon:void 0,L=E&&typeof k==="string"&&wo(e,k);if(E&&L){let V=o.createPattern(L,"repeat");if(V)V.setTransform(new DOMMatrix().scale(m/(E.pixelRatio??1))),o.globalAlpha=M,o.fillStyle=V,o.fill("evenodd"),o.globalAlpha=1}else{o.fillStyle=_e(f("paint","fill-color",w,"#000"),M),o.fill("evenodd");let V=f("paint","fill-outline-color",w,void 0);if(V!==void 0)o.strokeStyle=_e(V,M),o.lineWidth=m,o.setLineDash([]),o.stroke()}y=!0}else if(h.type==="line"&&d.type!==1){let M=Number(f("paint","line-width",w,1));if(M<=0)continue;let k=Number(f("paint","line-gap-width",w,0));o.strokeStyle=_e(f("paint","line-color",w,"#000"),Number(f("paint","line-opacity",w,1))),o.lineWidth=(k>0?k+2*M:M)*m,o.lineCap=ho(f("layout","line-cap",w,"butt")),o.lineJoin=go(f("layout","line-join",w,"miter"));let E=f("paint","line-dasharray",w,void 0);o.setLineDash(Array.isArray(E)?E.map((L)=>Number(L)*M*m):[]),v(d,d.type===3),o.stroke(),y=!0}else if(h.type==="circle"&&d.type===1){let M=Number(f("paint","circle-radius",w,5))*m;o.fillStyle=_e(f("paint","circle-color",w,"#000"),Number(f("paint","circle-opacity",w,1)));let k=Number(f("paint","circle-stroke-width",w,0))*m;o.strokeStyle=_e(f("paint","circle-stroke-color",w,"#000"),Number(f("paint","circle-stroke-opacity",w,1))),o.lineWidth=k;for(let E of d.geometry)for(let L=0;L+1<E.length;L+=2)if(o.beginPath(),o.arc(((E[L]??0)-S)*_,((E[L+1]??0)-W)*_,M,0,2*Math.PI),o.fill(),k>0)o.stroke();y=!0}}}if(!y&&!r)return null;return Ao(n,o,x)};var Cr=async(e,t,r)=>{let{z:n,tiles:o,bounds:s,width:a,height:i,iterations:u,module:l,priority:c}=t,[p,m,y,x]=s,h=[],b=[],g=[],_=2**n;for(let S=0;S+1<o.length;S+=2){let W=o[S]??0,v=(W%_+_)%_,A=(W-v)/_,f=await st(e,n,v,o[S+1]??0,r,c);if(te.has(r))throw Error("aborted");if(!f)continue;let{points:d,ringStart:w,polygonStart:M}=f.arrays;for(let k=0;k+1<M.length;k++){let[E,L]=[M[k]??0,M[k+1]??0],V=w[E]??0,O=w[L]??0,[C,F,R,I]=[1/0,1/0,-1/0,-1/0];for(let N=V;N<O;N++){let[T,P]=[(d[N*2]??0)+A,d[N*2+1]??0];C=Math.min(C,T),F=Math.min(F,P),R=Math.max(R,T),I=Math.max(I,P)}if(R<p||C>y||I<m||F>x)continue;g.push(b.length);for(let N=E;N<L;N++){b.push(h.length/2);for(let T=w[N]??0;T<(w[N+1]??0);T++)h.push(((d[T*2]??0)+A-p)/(y-p)*a,((d[T*2+1]??0)-m)/(x-m)*i)}}}return b.push(h.length/2),g.push(b.length-1),Xt({points:Float64Array.from(h),ringStart:Uint32Array.from(b),polygonStart:Uint32Array.from(g)},a,i,u,l)};var vt=new Map,So={},Dr=It(),ee=(e,t=[])=>self.postMessage(e,t);self.onmessage=async({data:e})=>{if(e.type==="headers"){Ft(e.rules);return}if(e.type==="tess"){ve.url=e.url;return}if(e.type==="init"){if(e.workers!==void 0)De.capacity=ir(e.workers);Be.set(e.key,{tiles:e.tiles,maxzoom:e.maxzoom,layers:e.layers,rasters:e.rasters??{},sprites:e.sprites??[],patterns:new Map});return}if(e.type==="drop"){Be.get(e.key)?.sprites.forEach((r)=>{r.image.close()}),Be.delete(e.key);return}if(e.type==="abort"){if(Ze.has(e.id))te.add(e.id);vt.get(e.id)?.abort();return}if(e.type==="heights"||e.type==="reproject"||e.type==="grids"){await Ro(e);return}Ze.add(e.id);let t=Be.get(e.key);try{if(!t)throw Error(`no renderer ${e.key}`);if(e.type==="render"){let r=await Or(t,e.z,e.x,e.y,e.size,e.id,e.priority);if(r)ee({id:e.id,image:r},[r]);else ee({id:e.id,missing:!0})}else if(e.type==="trees"){let r=await dr(t,e.z,e.x,e.y,e.id,e.spacing,e.maxTrees,e.priority);if(!r)ee({id:e.id,missing:!0});else ee({id:e.id,trees:r},[r.buffer])}else if(e.type==="furniture"){let r=await hr(t,e.z,e.x,e.y,e.id,e.maxObjects,e.priority);if(!r)ee({id:e.id,missing:!0});else ee({id:e.id,furniture:r},[r.buffer])}else if(e.type==="lamps"){let r=await Lr(t,e.z,e.x,e.y,e.id,e.spacing,e.maxLamps,e.priority);if(!r)ee({id:e.id,missing:!0});else ee({id:e.id,lamps:r},[r.buffer])}else if(e.type==="street"){let r=await Cr(t,e,e.id);ee({id:e.id,street:r},[r.eastU,r.eastV,r.northU,r.northV].map((n)=>n.buffer))}else if(e.type==="polygons"){let r=await st(t,e.z,e.x,e.y,e.id,e.priority);if(!r)ee({id:e.id,missing:!0});else{let{points:n,ringStart:o,polygonStart:s,feature:a}=r.arrays;ee({id:e.id,polygons:r},[n.buffer,o.buffer,s.buffer,a.buffer])}}else if(e.type==="vectors"){let r=await Pr(t,e,e.id,e.styles===!0,e.priority);if(!r)ee({id:e.id,missing:!0});else if(!("fills"in r))ee({id:e.id,...r},[r.styles.buffer]);else{let n=Uint8Array.from(t.layers,(i)=>Ye(i)==="extrusion"?1:0),o=await Nr()?Ur(r,n,e.prism===!0):void 0,{fills:s,lines:a}=r;ee({id:e.id,vectors:o?{...r,mesh:o}:r},[...[s.points,s.ringStart,s.polygonStart,s.feature,s.fillStart].map((i)=>i.buffer),...[s.roofs,s.roofHeights,s.roofOutlines,s.roofOutlineStart].flatMap((i)=>i?[i.buffer]:[]),...[a.points,a.start,a.feature,a.lineStart].map((i)=>i.buffer),...r.circles?[r.circles.points,r.circles.feature,r.circles.circleStart].map((i)=>i.buffer):[],r.styles.buffer,r.sublayer.buffer,...(o?[o.vertices,o.indices,o.fillRanges,o.pieces,o.lineTable,o.lineRanges,o.blocks,o.blockIndices,o.blockRanges,o.bounds]:[]).map((i)=>i.buffer)])}}else ee({id:e.id,labels:await fr(t,e.z,e.x,e.y,e.id,e.priority,e.zoom,e.roofs)})}catch(r){ee({id:e.id,error:String(r)})}finally{Ze.delete(e.id),te.delete(e.id)}};var ko=async(e,t)=>{let r=await fetch(e,pe(e,{signal:t}));if(!r.ok)throw Error(`${e}: ${r.status}`);return r.arrayBuffer()},Ro=async(e)=>{let t=new AbortController;vt.set(e.id,t);try{if(e.type==="grids"){let{module:r,url:n,bytes:o}=e,s=o??(n?await ko(n,t.signal):new ArrayBuffer(0)),{grids:a,values:i}=await Zt(new Uint8Array(s),r);ee({id:e.id,grids:a,values:i},i.map((u)=>u.buffer))}else if(e.type==="heights"){let r=await Pt(e.url,e.encoding,e.floor,t.signal,So);if(r)ee({id:e.id,heights:r},[r.buffer]);else ee({id:e.id,missing:!0})}else{Dr.cache.capacity=e.cached;let r=await Dr.draw(e.job,t.signal);if(r)ee({id:e.id,image:r},[r]);else ee({id:e.id,missing:!0})}}catch(r){ee({id:e.id,error:String(r)})}finally{vt.delete(e.id)}};
1
+ var ie=(e,t)=>Error(`isard: ${String(e)}: HTTP ${t}`),kt=async(e,t)=>{let n=await fetch(e,t);if(!n.ok)throw ie(e,n.status);return n};class le{capacity;evict;entries=new Map;constructor(e,t){this.capacity=e;this.evict=t}get size(){return this.entries.size}get(e){let t=this.entries.get(e);if(t!==void 0)this.entries.delete(e),this.entries.set(e,t);return t}has(e){return this.entries.has(e)}set(e,t){this.entries.delete(e),this.entries.set(e,t);for(let[n,r]of this.entries){if(this.entries.size<=this.capacity)break;this.entries.delete(n),this.evict?.(r,n)}}delete(e){return this.entries.delete(e)}values(){return this.entries.values()}clear(){this.entries.clear()}}var vt=[];var Rt=(e)=>{vt=e};var oe=(e,t={})=>{let n=String(e),r=vt.filter(([s])=>n.startsWith(s));if(r.length===0)return t;let o=new Headers(t.headers);return r.forEach(([,s])=>{Object.entries(s).forEach(([a,i])=>{o.set(a,i)})}),{...t,headers:o}};var zn=96,Hn=(e,t,n,r,o,s)=>{let a=new Uint8ClampedArray(s*s*4),i=s/o,c=o+1;for(let l=0;l<s;l+=1){let u=(l+0.5)/i,d=Math.min(o-1,Math.floor(u)),f=u-d;for(let p=0;p<s;p+=1){let _=(p+0.5)/i,y=Math.min(o-1,Math.floor(_)),A=_-y,m=2*(d*c+y),M=m+2*c,b=(1-A)*(1-f),w=A*(1-f),T=(1-A)*f,v=A*f,g=b*r[m]+w*r[m+2]+T*r[M]+v*r[M+2],x=b*r[m+1]+w*r[m+3]+T*r[M+1]+v*r[M+3],h=g-0.5,k=x-0.5;if(!(h>-1&&k>-1&&h<t&&k<n))continue;let S=Math.floor(h),R=Math.floor(k),N=h-S,W=k-R,B=0,P=0,U=0,I=0;for(let E=0;E<4;E+=1){let C=S+(E&1),V=R+(E>>1);if(C<0||V<0||C>=t||V>=n)continue;let H=4*(V*t+C),z=(E&1?N:1-N)*(E>>1?W:1-W)*e[H+3];B+=z*e[H],P+=z*e[H+1],U+=z*e[H+2],I+=z}if(I<=0)continue;let F=4*(l*s+p);a[F]=B/I,a[F+1]=P/I,a[F+2]=U/I,a[F+3]=I}}return a},Tt=(e=zn)=>{let t=new Map,n=new Set,r=(l)=>{n.delete(l),l.then((u)=>u?.close(),()=>{return})},o=(l)=>{if(t.has(l))n.add(l);else r(l)},s=new le(e,o),a=(l)=>{let u=(t.get(l)??1)-1;if(u>0)t.set(l,u);else if(t.delete(l),n.has(l))r(l)},i=(l)=>{let u=()=>{let f=(async()=>{let p=await fetch(l,oe(l));if(p.status===404||p.status===204||p.status===410)return null;if(!p.ok)throw ie(l,p.status);return createImageBitmap(await p.blob())})();return f.catch(()=>s.delete(l)),s.set(l,f),f},d=s.get(l)??u();return t.set(d,(t.get(d)??0)+1),d};return{draw:async(l,u)=>{let d=l.sources.map((f)=>[f,i(f.url)]);try{let f=await Promise.all(d.map(async([m,M])=>[m,await M]));if(u.throwIfAborted(),!f.some(([,m])=>m))return null;let _=new OffscreenCanvas(l.width,l.height).getContext("2d",{willReadFrequently:!0});if(!_)throw Error("isard: no 2D canvas to reproject the tiles");f.forEach(([m,M])=>{if(M)_.drawImage(M,m.x,m.y,m.w,m.h)});let y=_.getImageData(0,0,l.width,l.height).data,A=Hn(y,l.width,l.height,l.mesh,l.n,l.size);return createImageBitmap(new ImageData(A,l.size,l.size),{premultiplyAlpha:"none"})}finally{d.forEach(([,f])=>{a(f)})}},cache:s,close:()=>{[...s.values()].forEach(o),s.clear()}}};var xe=(e,t,n)=>Math.max(t,Math.min(n,e));var zo=Math.PI/180,Et=40075016.686,Ho=Et/360;var It=(e)=>e*360-180,Ft=(e)=>Math.atan(Math.sinh(Math.PI*(1-2*e)))*180/Math.PI;var rt=(e)=>Et*Math.cos(Math.atan(Math.sinh(Math.PI*(1-2*e)))),_e=(e,t)=>rt((t+0.5)/2**e)/2**e,K=(e,t,n,r)=>e.replaceAll("{z}",String(t)).replaceAll("{x}",String(n)).replaceAll("{y}",String(r));var fe=256,Jn=(e,t,n=Number.NEGATIVE_INFINITY)=>{let r=e.length>>2,o=new Float32Array(r);if(t==="terrarium")for(let s=0,a=0;s<r;s+=1,a+=4){let i=e[a]*256+e[a+1]+e[a+2]/256-32768;o[s]=i>n?i:n}else for(let s=0,a=0;s<r;s+=1,a+=4){let i=-1e4+(e[a]*65536+e[a+1]*256+e[a+2])*0.1;o[s]=i>n?i:n}return o},Nt=async(e,t,n,r,o)=>{let s=await fetch(e,oe(e,{signal:r}));if(s.status===404||s.status===204||s.status===410)return null;if(!s.ok)throw ie(e,s.status);let a=await createImageBitmap(await s.blob(),{premultiplyAlpha:"none",colorSpaceConversion:"none"});try{o.canvas??=new OffscreenCanvas(fe,fe);let i=o.canvas.getContext("2d",{willReadFrequently:!0});if(!i)throw Error("isard: no 2D context");return i.imageSmoothingEnabled=!1,i.clearRect(0,0,fe,fe),i.drawImage(a,0,0,fe,fe),Jn(i.getImageData(0,0,fe,fe).data,t,n)}finally{a.close()}};var jn="aliceblue f0f8ff antiquewhite faebd7 aqua 00ffff aquamarine 7fffd4 azure f0ffff beige f5f5dc bisque ffe4c4 black 000000 blanchedalmond ffebcd blue 0000ff blueviolet 8a2be2 brown a52a2a burlywood deb887 cadetblue 5f9ea0 chartreuse 7fff00 chocolate d2691e coral ff7f50 cornflowerblue 6495ed cornsilk fff8dc crimson dc143c cyan 00ffff darkblue 00008b darkcyan 008b8b darkgoldenrod b8860b darkgray a9a9a9 darkgreen 006400 darkgrey a9a9a9 darkkhaki bdb76b darkmagenta 8b008b darkolivegreen 556b2f darkorange ff8c00 darkorchid 9932cc darkred 8b0000 darksalmon e9967a darkseagreen 8fbc8f darkslateblue 483d8b darkslategray 2f4f4f darkslategrey 2f4f4f darkturquoise 00ced1 darkviolet 9400d3 deeppink ff1493 deepskyblue 00bfff dimgray 696969 dimgrey 696969 dodgerblue 1e90ff firebrick b22222 floralwhite fffaf0 forestgreen 228b22 fuchsia ff00ff gainsboro dcdcdc ghostwhite f8f8ff gold ffd700 goldenrod daa520 gray 808080 green 008000 greenyellow adff2f grey 808080 honeydew f0fff0 hotpink ff69b4 indianred cd5c5c indigo 4b0082 ivory fffff0 khaki f0e68c lavender e6e6fa lavenderblush fff0f5 lawngreen 7cfc00 lemonchiffon fffacd lightblue add8e6 lightcoral f08080 lightcyan e0ffff lightgoldenrodyellow fafad2 lightgray d3d3d3 lightgreen 90ee90 lightgrey d3d3d3 lightpink ffb6c1 lightsalmon ffa07a lightseagreen 20b2aa lightskyblue 87cefa lightslategray 778899 lightslategrey 778899 lightsteelblue b0c4de lightyellow ffffe0 lime 00ff00 limegreen 32cd32 linen faf0e6 magenta ff00ff maroon 800000 mediumaquamarine 66cdaa mediumblue 0000cd mediumorchid ba55d3 mediumpurple 9370db mediumseagreen 3cb371 mediumslateblue 7b68ee mediumspringgreen 00fa9a mediumturquoise 48d1cc mediumvioletred c71585 midnightblue 191970 mintcream f5fffa mistyrose ffe4e1 moccasin ffe4b5 navajowhite ffdead navy 000080 oldlace fdf5e6 olive 808000 olivedrab 6b8e23 orange ffa500 orangered ff4500 orchid da70d6 palegoldenrod eee8aa palegreen 98fb98 paleturquoise afeeee palevioletred db7093 papayawhip ffefd5 peachpuff ffdab9 peru cd853f pink ffc0cb plum dda0dd powderblue b0e0e6 purple 800080 rebeccapurple 663399 red ff0000 rosybrown bc8f8f royalblue 4169e1 saddlebrown 8b4513 salmon fa8072 sandybrown f4a460 seagreen 2e8b57 seashell fff5ee sienna a0522d silver c0c0c0 skyblue 87ceeb slateblue 6a5acd slategray 708090 slategrey 708090 snow fffafa springgreen 00ff7f steelblue 4682b4 tan d2b48c teal 008080 thistle d8bfd8 tomato ff6347 turquoise 40e0d0 violet ee82ee wheat f5deb3 white ffffff whitesmoke f5f5f5 yellow ffff00 yellowgreen 9acd32",ot,qn=(e)=>{if(!ot){let t=jn.split(" ");ot=new Map(Array.from({length:Math.floor(t.length/2)},(n,r)=>[t[2*r]??"",t[2*r+1]??""]))}return ot.get(e)},ze=(e)=>Number.isFinite(e)?xe(e,0,1):0,Ot=(e)=>{if(!/^[0-9a-f]+$/.test(e)||![3,4,6,8].includes(e.length))return;let t=e.length<=4?[...e].map((r)=>r+r).join(""):e,n=(r)=>Number.parseInt(t.slice(r,r+2),16)/255;return[n(0),n(2),n(4),t.length===8?n(6):1]},$n=(e)=>{if(e===void 0)return 1;return ze(e.endsWith("%")?Number.parseFloat(e)/100:Number.parseFloat(e))},Yn=(e,t,n)=>{let r=n<0.5?n*(1+t):n+t-n*t,o=2*n-r,s=(a)=>{let i=(a%1+1)%1;if(i<0.16666666666666666)return o+(r-o)*6*i;if(i<0.5)return r;if(i<0.6666666666666666)return o+(r-o)*(0.6666666666666666-i)*6;return o};return[s(e+0.3333333333333333),s(e),s(e-0.3333333333333333)]},Pt=(e)=>{if(typeof e!=="string")return;let t=e.trim().toLowerCase();if(t.startsWith("#"))return Ot(t.slice(1));if(t==="transparent")return[0,0,0,0];let n=qn(t);if(n)return Ot(n);let r=/^(rgba?|hsla?)\(([^)]*)\)$/.exec(t);if(!r?.[1]||r[2]===void 0)return;let o=r[2].split(/[\s,/]+/).filter(Boolean);if(o.length<3||o.slice(0,3).some((u)=>Number.isNaN(Number.parseFloat(u))))return;let s=$n(o[3]);if(r[1].startsWith("rgb")){let u=(d)=>ze(d.endsWith("%")?Number.parseFloat(d)/100:Number.parseFloat(d)/255);return[u(o[0]??""),u(o[1]??""),u(o[2]??""),s]}let a=Number.parseFloat(o[0]??"")/360,[i,c,l]=Yn(a,ze(Number.parseFloat(o[1]??"")/100),ze(Number.parseFloat(o[2]??"")/100));return[i,c,l,s]};var be=(e)=>typeof e==="object"&&e!==null&&!Array.isArray(e);var Gn=["Unknown","Point","LineString","Polygon"],Z=(e,t)=>({zoom:t,properties:e.properties,type:Gn[e.type]??"Unknown"}),ce=(e)=>Pt(e),Je=([e,t,n,r])=>`rgba(${Math.round(e*255)},${Math.round(t*255)},${Math.round(n*255)},${r})`,Wt=(e,t,n,r=1)=>{let o=n-t;if(o===0)return 0;let s=e-t;return r===1?s/o:(r**s-1)/(r**o-1)},it=(e,t,n)=>{if(typeof e==="number"&&typeof t==="number")return e+(t-e)*n;let r=ce(e),o=ce(t);if(r&&o){let s=(a)=>r[a]+(o[a]-r[a])*n;return Je([s(0),s(1),s(2),s(3)])}if(Array.isArray(e)&&Array.isArray(t))return e.map((s,a)=>it(s,t[a],n));return n<0.5?e:t},Dt=(e)=>typeof e==="object"&&e!==null&&!Array.isArray(e)&&Array.isArray(e.stops),Kn=(e,t)=>{let n=e.property===void 0?t.zoom:t.properties[e.property],r=e.stops,o=e.type??(e.property===void 0||typeof r[0]?.[0]==="number"?"exponential":"categorical");if(o==="identity")return n??e.default;if(o==="categorical")return r.find(([u])=>u===n)?.[1]??e.default;if(typeof n!=="number"||!r.length)return e.default??r[0]?.[1];let s=([u])=>{if(Array.isArray(u))return Number.NaN;return be(u)?Number(u.zoom):Number(u)},a=r[0];if(!a)return e.default;if(n<=s(a))return a[1];let i=r.findIndex((u,d)=>d>0&&Boolean(r[d-1])&&Boolean(u)&&n<s(u)),[c,l]=[r[i-1],r[i]];if(i<0||!c||!l)return r.at(-1)?.[1];if(o==="interval")return c[1];return it(c[1],l[1],Wt(n,s(c),s(l),e.base??1))},st=(e)=>e,Lt={"<":(e,t)=>e<t,"<=":(e,t)=>e<=t,">":(e,t)=>e>t,">=":(e,t)=>e>=t},Bt=(e,t,n)=>{let r=(a)=>typeof a==="object"&&a!==null?String(a):a,[o,s]=[r(t),r(n)];return typeof o==="string"&&typeof s==="string"?Lt[e](o,s):Lt[e](Number(o),Number(s))},He=(e,t)=>{if(t==="$type")return e.type;return typeof t==="string"?e.properties[t]:void 0},Zn=new Set(["literal","zoom","get","has","!has","properties","id","geometry-type","concat","format","image","number-format","to-number","to-string","to-boolean","to-color","number","string","boolean","typeof","length","at","upcase","downcase","coalesce","!","all","any","==","!=","<","<=",">",">=","in","case","match","step","interpolate","interpolate-hcl","interpolate-lab","rgb","rgba","+","-","*","/","%","^","min","max","abs","round","floor","ceil","sqrt","ln","log10","log2","pi","e"]),ve=(e)=>Array.isArray(e)&&typeof e[0]==="string"&&Zn.has(e[0]),Ut=new Set,ke=(e)=>e===void 0||e===null?"":String(e),ae=(e,t)=>{if(Dt(e))return Kn(e,t);if(!Array.isArray(e))return e;let[n,...r]=e;if(typeof n!=="string")return e;let o=(i)=>ae(r[i]??null,t),s=(i)=>Number(o(i)),a=()=>r.map((i,c)=>s(c));switch(n){case"literal":return r[0];case"zoom":return t.zoom;case"get":return He(t,o(0));case"has":return He(t,o(0))!==void 0;case"!has":return He(t,o(0))===void 0;case"properties":return t.properties;case"id":return null;case"geometry-type":return t.type;case"concat":return r.map((i,c)=>ke(o(c))).join("");case"format":return r.map((i,c)=>i!==null&&typeof i==="object"&&!Array.isArray(i)?"":ke(o(c))).join("");case"image":return o(0);case"number-format":{let i=be(r[1])?r[1]:{},c=(u)=>{let d=i[u];return typeof d==="number"?d:void 0},l=s(0);if(!Number.isFinite(l))return"";return l.toLocaleString(typeof i.locale==="string"?i.locale:void 0,{minimumFractionDigits:c("min-fraction-digits"),maximumFractionDigits:c("max-fraction-digits")})}case"to-number":{for(let i=0;i<r.length;i+=1){let c=o(i),l=typeof c==="string"&&c.trim()===""?Number.NaN:Number(c);if(c!==null&&c!==void 0&&!Number.isNaN(l))return l}return 0}case"to-string":return ke(o(0));case"to-boolean":{let i=o(0);return!(i===""||i===0||i===!1||i===null||i===void 0||Number.isNaN(i))}case"to-color":case"number":case"string":case"boolean":{let i={"to-color":(c)=>ce(c)!==void 0,number:(c)=>typeof c==="number",string:(c)=>typeof c==="string",boolean:(c)=>typeof c==="boolean"};for(let c=0;c<r.length;c+=1){let l=o(c);if(i[n]?.(l))return l}return r.length?o(r.length-1):null}case"typeof":{let i=o(0);if(i===null||i===void 0)return"null";return Array.isArray(i)?"array":typeof i}case"length":{let i=o(0);return typeof i==="string"||Array.isArray(i)?i.length:0}case"at":{let i=o(1);return Array.isArray(i)?i[s(0)]??null:null}case"upcase":return ke(o(0)).toUpperCase();case"downcase":return ke(o(0)).toLowerCase();case"coalesce":for(let i=0;i<r.length;i+=1){let c=o(i);if(c!==void 0&&c!==null)return c}return null;case"!":return!o(0);case"all":return r.every((i,c)=>Boolean(o(c)));case"any":return r.some((i,c)=>Boolean(o(c)));case"==":return o(0)===o(1);case"!=":return o(0)!==o(1);case"<":case"<=":case">":case">=":return Bt(n,o(0),o(1));case"in":{let i=o(1),c=o(0);if(typeof i==="string")return i.includes(String(c));return Array.isArray(i)&&i.includes(c)}case"case":{let i=r.findIndex((c,l)=>l%2===0&&l+1<r.length&&Boolean(o(l)));return i<0?o(r.length-1):o(i+1)}case"match":{let i=o(0),c=r.findIndex((l,u)=>u%2===1&&u+1<r.length&&(Array.isArray(l)?st(l).includes(i):l===i));return c<0?o(r.length-1):o(c+1)}case"step":{let i=s(0),c=o(1);for(let l=2;l+1<r.length;l+=2)if(i>=Number(r[l]))c=o(l+1);else break;return c}case"interpolate":case"interpolate-hcl":case"interpolate-lab":{let i=r[0],c=s(1),l=Array.isArray(i)&&i[0]==="exponential"?Number(i[1]):1,u=Array.from({length:Math.floor((r.length-2)/2)},(y,A)=>[Number(r[2+2*A]),r[3+2*A]??null]),d=u[0];if(!d)return null;if(c<=d[0])return ae(d[1],t);let f=u.findIndex((y,A)=>A>0&&c<y[0]),[p,_]=[u[f-1],u[f]];if(f<0||!p||!_)return ae(u.at(-1)?.[1]??null,t);return it(ae(p[1],t),ae(_[1],t),Wt(c,p[0],_[0],l))}case"rgb":case"rgba":return Je([s(0)/255,s(1)/255,s(2)/255,r.length>3?s(3):1]);case"+":return a().reduce((i,c)=>i+c,0);case"*":return a().reduce((i,c)=>i*c,1);case"-":return r.length===1?-s(0):s(0)-s(1);case"/":return s(0)/s(1);case"%":return s(0)%s(1);case"^":return s(0)**s(1);case"min":return Math.min(...a());case"max":return Math.max(...a());case"abs":return Math.abs(s(0));case"round":return Math.sign(s(0))*Math.round(Math.abs(s(0)));case"floor":return Math.floor(s(0));case"ceil":return Math.ceil(s(0));case"sqrt":return Math.sqrt(s(0));case"ln":return Math.log(s(0));case"log10":return Math.log10(s(0));case"log2":return Math.log2(s(0));case"pi":return Math.PI;case"e":return Math.E;default:if(!Ut.has(n))Ut.add(n),console.warn(`isard: the style expression "${n}" is not supported`);return null}},Xn=new Set(["==","!=","<","<=",">",">="]),je=(e)=>{if(e.type==="line")return"line";if(e.type==="fill-extrusion")return"extrusion";if(e.type==="circle")return"circle";return e.type==="fill"||e.type==="background"?"fill":void 0},Qn=(e)=>{let[t,n,...r]=e;if(typeof t!=="string"||typeof n!=="string"||r.some(Array.isArray))return!1;if(Xn.has(t))return e.length===3;if(t==="in")return e.length!==3||!Array.isArray(e[2]);return t==="!in"||t==="has"||t==="!has"},er=(e,t)=>{let[n,r,...o]=e,s=He(t,r);switch(n){case"==":return s===o[0];case"!=":return s!==o[0];case"<":case"<=":case">":case">=":return Bt(n,s,o[0]);case"in":return st(o).includes(s);case"!in":return!st(o).includes(s);case"has":return s!==void 0;case"!has":return s===void 0;default:return!0}},Ct=new WeakMap,Vt=(e)=>{if(!Array.isArray(e))return()=>Boolean(e);let t=Ct.get(e);if(t)return t;let r=(()=>{let o=e[0];if(o==="all"||o==="any"||o==="none"){let s=e.slice(1).map(Vt);if(o==="all")return(a)=>s.every((i)=>i(a));if(o==="any")return(a)=>s.some((i)=>i(a));return(a)=>!s.some((i)=>i(a))}if(Qn(e))return(s)=>er(e,s);return(s)=>Boolean(ae(e,s))})();return Ct.set(e,r),r},Q=(e,t)=>{if(e===void 0||e===null)return!0;return Vt(e)(t)},at=(e)=>Array.isArray(e)&&(e[0]==="zoom"||e.some(at)),tr=new Set(["get","has","!has","geometry-type","properties","id"]),me=(e)=>{if(e!==void 0&&Dt(e))return e.property!==void 0;if(!Array.isArray(e))return!1;if(tr.has(e[0]))return!0;return e.some((t)=>me(t))},ct=(e,t)=>{if(e===void 0||e===null)return"";if(typeof e==="string")return e.replace(/\{([^}]+)\}/g,(r,o)=>{let s=t.properties[o];return s===void 0?"":String(s)});let n=ae(e,t);if(Array.isArray(n))return n.filter((r)=>typeof r==="string").join("");return n===void 0||n===null?"":String(n)},zt=(e)=>/Regular|Bold|Italic|Semibold|Light|Medium|Black/.test(e)?e:`${e} Regular`,lt=(e)=>{let t=new Set,n=(i)=>i.filter((c,l)=>l>=3&&l%2===1).map(Number),r=(i)=>{if(!Array.isArray(i))return;let c=(l)=>Array.isArray(l)&&l[0]==="zoom";if((i[0]==="interpolate"||i[0]==="interpolate-hcl"||i[0]==="interpolate-lab")&&c(i[2]))n(i).forEach((l)=>{t.add(l)});else if(i[0]==="step"&&c(i[1]))n(i).forEach((l)=>{t.add(l),t.add(l-0.01)});i.forEach(r)};r(e);let o=[...t].filter(Number.isFinite);if(o.length===0)o.push(0);let[s,a]=[Math.min(...o),Math.max(...o)];return o.push(...Array.from({length:Math.floor(a)-Math.ceil(s)+1},(i,c)=>Math.ceil(s)+c)),[...new Set(o)].sort((i,c)=>i-c).map((i)=>[i,Number(ae(e,{zoom:i,properties:{},type:"Unknown"}))])};class Fe{static __wrap(e){let t=Object.create(Fe.prototype);return t.__wbg_ptr=e,Ht.register(t,t.__wbg_ptr,t),t}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,Ht.unregister(this),e}free(){let e=this.__destroy_into_raw();D.__wbg_gridset_free(e,0)}count(){return D.gridset_count(this.__wbg_ptr)>>>0}meta(e){let t,n;try{let r=D.gridset_meta(this.__wbg_ptr,e);return t=r[0],n=r[1],ft(r[0],r[1])}finally{D.__wbindgen_free(t,n,1)}}values(e){return D.gridset_values(this.__wbg_ptr,e)}}if(Symbol.dispose)Fe.prototype[Symbol.dispose]=Fe.prototype.free;class Ne{static __wrap(e){let t=Object.create(Ne.prototype);return t.__wbg_ptr=e,Jt.register(t,t.__wbg_ptr,t),t}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,Jt.unregister(this),e}free(){let e=this.__destroy_into_raw();D.__wbg_streetflow_free(e,0)}eastU(){return D.streetflow_eastU(this.__wbg_ptr)}eastV(){return D.streetflow_eastV(this.__wbg_ptr)}northU(){return D.streetflow_northU(this.__wbg_ptr)}northV(){return D.streetflow_northV(this.__wbg_ptr)}}if(Symbol.dispose)Ne.prototype[Symbol.dispose]=Ne.prototype.free;function qt(e){let t=ar(e,D.__wbindgen_malloc),n=ye,r=D.readGrids(t,n);if(r[2])throw lr(r[1]);return Fe.__wrap(r[0])}function $t(e,t,n,r,o,s){let a=cr(e,D.__wbindgen_malloc),i=ye,c=jt(t,D.__wbindgen_malloc),l=ye,u=jt(n,D.__wbindgen_malloc),d=ye,f=D.streetFlow(a,i,c,l,u,d,r,o,s);return Ne.__wrap(f)}function nr(){return{__proto__:null,"./isard_grid_bg.js":{__proto__:null,__wbg___wbindgen_throw_41e9ee4f547fc59a:function(t,n){throw Error(ft(t,n))},__wbg_new_from_slice_ca6ad97db1f4779a:function(t,n){return new Float32Array(rr(t,n))},__wbindgen_generic_0000000000000001:function(t,n){return ft(t,n)},__wbindgen_init_externref_table:function(){let t=D.__wbindgen_externrefs,n=t.grow(4);t.set(0,void 0),t.set(n+0,void 0),t.set(n+1,null),t.set(n+2,!0),t.set(n+3,!1)}}}}var Ht=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e)=>D.__wbg_gridset_free(e,1)),Jt=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e)=>D.__wbg_streetflow_free(e,1));function rr(e,t){return e=e>>>0,or().subarray(e/4,e/4+t)}var Re=null;function or(){if(Re===null||Re.byteLength===0)Re=new Float32Array(D.memory.buffer);return Re}var Te=null;function sr(){if(Te===null||Te.byteLength===0)Te=new Float64Array(D.memory.buffer);return Te}function ft(e,t){return fr(e>>>0,t)}var Ee=null;function ir(){if(Ee===null||Ee.byteLength===0)Ee=new Uint32Array(D.memory.buffer);return Ee}var Ie=null;function Yt(){if(Ie===null||Ie.byteLength===0)Ie=new Uint8Array(D.memory.buffer);return Ie}function jt(e,t){let n=t(e.length*4,4)>>>0;return ir().set(e,n/4),ye=e.length,n}function ar(e,t){let n=t(e.length*1,1)>>>0;return Yt().set(e,n/1),ye=e.length,n}function cr(e,t){let n=t(e.length*8,8)>>>0;return sr().set(e,n/8),ye=e.length,n}function lr(e){let t=D.__wbindgen_externrefs.get(e);return D.__externref_table_dealloc(e),t}var qe=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});qe.decode();var ur=2146435072,ut=0;function fr(e,t){if(ut+=t,ut>=ur)qe=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),qe.decode(),ut=t;return qe.decode(Yt().subarray(e,e+t))}var ye=0,mr,pr,D;function dr(e,t){return pr=e,D=e.exports,mr=t,Re=null,Te=null,Ee=null,Ie=null,D.__wbindgen_start(),D}async function br(e,t){if(typeof Response==="function"&&e instanceof Response){if(!e.ok)throw Error(`failed to fetch Wasm: ${e.status} ${e.statusText} fetching '${e.url}'`);if(typeof WebAssembly.instantiateStreaming==="function")try{return await WebAssembly.instantiateStreaming(e,t)}catch(o){if(n(e.type)&&e.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",o);else throw o}let r=await e.arrayBuffer();return await WebAssembly.instantiate(r,t)}else{let r=await WebAssembly.instantiate(e,t);if(r instanceof WebAssembly.Instance)return{instance:r,module:e};else return r}function n(r){switch(r){case"basic":case"cors":case"default":return!0}return!1}}async function Gt(e){if(D!==void 0)return D;if(e!==void 0)if(Object.getPrototypeOf(e)===Object.prototype)({module_or_path:e}=e);else console.warn("using deprecated parameters for the initialization function; pass a single object instead");if(e===void 0)e=new URL("isard_grid_bg.wasm",import.meta.url);let t=nr();if(typeof e==="string"||typeof Request==="function"&&e instanceof Request||typeof URL==="function"&&e instanceof URL)e=fetch(e);let{instance:n,module:r}=await br(await e,t);return dr(n,r)}var mt={},Kt=async(e)=>{let t=mt.ready??Gt({module_or_path:e});mt.ready=t,await t.catch((n)=>{throw mt.ready=void 0,n})},Zt=async(e,t,n,r,o)=>{await Kt(o);let s=$t(e.points,e.ringStart,e.polygonStart,t,n,r);try{return{eastU:s.eastU(),eastV:s.eastV(),northU:s.northU(),northV:s.northV()}}finally{s.free()}},yr=(e)=>typeof e==="object"&&e!==null&&("name"in e)&&("width"in e)&&("height"in e)&&("bounds"in e)&&Array.isArray(e.bounds),Xt=async(e,t)=>{await Kt(t);let n=qt(e);try{let r=[],o=[];for(let s=0;s<n.count();s++){let a=JSON.parse(n.meta(s));if(!yr(a))throw Error("isard: a grid without its description");r.push(a),o.push(n.values(s))}return{grids:r,values:o}}finally{n.free()}};var he=6,Qt=4;var en=(e)=>e*7919%360,pt=["shelter","bin","postbox","fountain","rack","bench"];class dt{buf;end;pos;constructor(e,t=0,n=e.length){this.buf=e;this.end=n;this.pos=t}varint(){let e=0;for(let t=0;t<70;t+=7){let n=this.buf[this.pos++]??0;if(e+=(n&127)*2**t,n<128)break}return e}int64(){let e=0,t=0;for(let n=0;n<10;n+=1){let r=this.buf[this.pos++]??0,o=r&127;if(n<4)e|=o<<7*n;else if(n===4)e|=(o&15)<<28,t|=o>>4;else t|=o<<7*n-32;if(r<128)break}return(t|0)*4294967296+(e>>>0)}sint(){let e=this.varint();return e%2===1?-(e+1)/2:e/2}sub(){let e=this.varint(),t=Math.min(this.pos+e,this.end),n=new dt(this.buf,this.pos,t);return this.pos=t,n}string(){let e=this.varint(),t=Math.min(this.pos+e,this.end),n=hr.decode(this.buf.subarray(this.pos,t));return this.pos=t,n}float(){let e=this.pos+4<=this.end?this.view().getFloat32(this.pos,!0):0;return this.pos+=4,e}double(){let e=this.pos+8<=this.end?this.view().getFloat64(this.pos,!0):0;return this.pos+=8,e}view(){return new DataView(this.buf.buffer,this.buf.byteOffset,this.buf.byteLength)}skip(e){if(e===0)this.varint();else if(e===1)this.pos+=8;else if(e===2)this.pos+=this.varint();else if(e===5)this.pos+=4}get more(){return this.pos<this.end}}var hr=new TextDecoder,gr=(e)=>{let t="";while(e.more){let n=e.varint();switch(n>>3){case 1:t=e.string();break;case 2:t=e.float();break;case 3:t=e.double();break;case 4:t=e.int64();break;case 5:t=e.varint();break;case 6:t=e.sint();break;case 7:t=e.varint()!==0;break;default:e.skip(n&7)}}return t},wr=(e)=>{let t=[],n,[r,o]=[0,0];while(e.more){let s=e.varint(),a=s&7,i=s>>3;if(a===7){if(n&&n.length>=2)n.push(n[0]??0,n[1]??0);continue}for(let c=0;c<i&&e.more;c+=1){if(r+=e.sint(),o+=e.sint(),a===1)n=[],t.push(n);n?.push(r,o)}}return t},bt=(e,t)=>{let n=new Map,r=new dt(e);while(r.more){let o=r.varint();if(o>>3!==3){r.skip(o&7);continue}let s=r.sub(),a="",i=4096,c=[],l=[],u=[];while(s.more){let f=s.varint();switch(f>>3){case 1:a=s.string();break;case 2:u.push(s.sub());break;case 3:c.push(s.string());break;case 4:l.push(gr(s.sub()));break;case 5:i=s.varint();break;default:s.skip(f&7)}}if(t&&!t.has(a))continue;let d=[];for(let f of u){let p=1,_={},y=[];while(f.more){let A=f.varint();switch(A>>3){case 2:{let m=f.sub();while(m.more){let M=c[m.varint()],b=l[m.varint()];if(M!==void 0&&b!==void 0)_[M]=b}break}case 3:p=Math.min(3,Math.max(1,f.varint()));break;case 4:y=wr(f.sub());break;default:f.skip(A&7)}}d.push({type:p,properties:_,geometry:y})}n.set(a,{extent:i,features:d})}return n};var xr=127,_r=16384,Ar=["unknown","mvt","png","jpeg","webp","avif"],Mr=(e)=>(4**e-1)/3,Sr=(e,t,n)=>{if(e>26)throw Error(`isard: PMTiles level ${e} past 26`);let r=2**e;if(t<0||n<0||t>=r||n>=r)throw Error(`isard: PMTiles tile ${e}/${t}/${n} out of its level`);let[o,s]=[t,n],a=0;for(let i=r/2;i>=1;i/=2){let c=(o&i)>0?1:0,l=(s&i)>0?1:0;if(a+=i*i*(3*c^l),l===0){if(c===1)[o,s]=[i-1-o,i-1-s];[o,s]=[s,o]}}return Mr(e)+a};class rn{bytes;pos=0;constructor(e){this.bytes=e}next(){let e=0,t=1;for(;;){let n=this.bytes[this.pos++];if(n===void 0)throw Error("isard: PMTiles directory truncated");if(e+=(n&127)*t,n<128)return e;if(t*=128,t>9223372036854776000)throw Error("isard: PMTiles varint too long")}}}var tn=(e)=>{let t=new rn(e),n=t.next();if(n>e.length)throw Error("isard: PMTiles directory larger than its bytes");let r=[],o=0;for(let s=0;s<n;s+=1)o+=t.next(),r.push({tileId:o,offset:0,length:0,runLength:1});for(let s of r)s.runLength=t.next();for(let s of r)s.length=t.next();return r.forEach((s,a)=>{let i=t.next(),c=r[a-1];s.offset=i===0&&c?c.offset+c.length:i-1}),r},kr=(e,t)=>{let[n,r]=[0,e.length-1];while(n<=r){let s=n+r>>1,a=e[s];if(!a)break;if(a.tileId===t)return a;if(a.tileId<t)n=s+1;else r=s-1}let o=e[r];if(!o)return;if(o.runLength===0||t-o.tileId<o.runLength)return o;return},vr=(e)=>{if(e.length<xr||String.fromCharCode(...e.subarray(0,7))!=="PMTiles")throw Error("isard: not a PMTiles archive");if(e[7]!==3)throw Error(`isard: PMTiles version ${e[7]} (only 3 is read)`);let t=new DataView(e.buffer,e.byteOffset,e.byteLength),n=(o)=>Number(t.getBigUint64(o,!0)),r=(o)=>t.getInt32(o,!0)/1e7;return{rootDirectoryOffset:n(8),rootDirectoryLength:n(16),metadataOffset:n(24),metadataLength:n(32),leafDirectoryOffset:n(40),leafDirectoryLength:n(48),tileDataOffset:n(56),tileDataLength:n(64),internalCompression:t.getUint8(97),tileCompression:t.getUint8(98),tileType:Ar[t.getUint8(99)]??"unknown",minZoom:t.getUint8(100),maxZoom:t.getUint8(101),bounds:[r(102),r(106),r(110),r(114)],center:[r(119),r(123),t.getUint8(118)]}},$e=async(e,t)=>{if(t===0||t===1)return e;if(t!==2)throw Error(`isard: PMTiles compression ${t===3?"brotli":"zstd"} is not read (gzip only)`);let n=new Blob([e]).stream().pipeThrough(new DecompressionStream("gzip"));return new Uint8Array(await new Response(n).arrayBuffer())},Rr=67108864;class on{source;head;leaves=new le(64);whole;constructor(e){this.source=e}async range(e,t,n){if(typeof this.source!=="string")return new Uint8Array(await this.source.slice(e,e+t).arrayBuffer());if(this.whole)return(await this.whole).subarray(e,e+t);let r=await fetch(this.source,oe(this.source,{headers:{Range:`bytes=${e}-${e+Math.max(t,1)-1}`},...n?{signal:n}:{}}));if(!r.ok)throw ie(this.source,r.status);if(r.status===206)return new Uint8Array(await r.arrayBuffer());if(Number(r.headers.get("Content-Length"))>Rr)throw await r.body?.cancel(),Error(`isard: ${this.source}: the server ignores range requests (HTTP 206 expected)`);let s=r.arrayBuffer().then((a)=>new Uint8Array(a));return this.whole=s,s.catch(()=>{this.whole=void 0}),(await s).subarray(e,e+t)}load(){return this.head??=(async()=>{let e=await this.range(0,_r),t=vr(e),{rootDirectoryOffset:n,rootDirectoryLength:r}=t,o=n+r<=e.length?e.subarray(n,n+r):await this.range(n,r),s=tn(await $e(o,t.internalCompression));return{header:t,root:s}})(),this.head.catch(()=>{this.head=void 0}),this.head}async header(){return(await this.load()).header}async metadata(){let{header:e}=await this.load();if(e.metadataLength===0)return{};let t=await this.range(e.metadataOffset,e.metadataLength),n=new TextDecoder().decode(await $e(t,e.internalCompression)),r=JSON.parse(n);return be(r)?r:{}}leaf(e,t){let n=e.leafDirectoryOffset+t.offset,r=this.leaves.get(n);if(r)return r;let o=this.range(n,t.length).then(async(s)=>tn(await $e(s,e.internalCompression)));return o.catch(()=>this.leaves.delete(n)),this.leaves.set(n,o),o}async tile(e,t,n,r){let{header:o,root:s}=await this.load();if(e<o.minZoom||e>o.maxZoom)return;let a=Sr(e,t,n),i=s;for(let c=0;c<4;c+=1){let l=kr(i,a);if(!l)return;if(l.runLength>0){let u=await this.range(o.tileDataOffset+l.offset,l.length,r);return $e(u,o.tileCompression)}i=await this.leaf(o,l)}throw Error("isard: PMTiles directories nested too deep")}}var nn=new le(16),Tr=(e)=>{let t=nn.get(e);if(t)return t;let n=new on(e);return nn.set(e,n),n};var yt=(e,t)=>{let n=/^pmtiles:\/\/(.+)\/(\d+)\/(\d+)\/(\d+)$/.exec(e);if(!n)return!1;let[,r="",o,s,a]=n;return Tr(r).tile(Number(o),Number(s),Number(a),t)};var gt=(e,t)=>{let n=e.sprites.find((o)=>Boolean(o.icons[t])),r=n?.icons[t];return n&&r?{icon:r,image:n.image}:void 0},Pe=new Map,sn=96,Oe=new le(sn),an=(e)=>Math.max(16,Math.ceil(sn/Math.max(1,e))),Ye=new Set,J=new Set,ht=new le(64,(e)=>e.then((t)=>setTimeout(()=>t?.close(),0),()=>{return})),cn=(e,t="auto")=>{let n=ht.get(e);if(n)return n;let r=(async()=>{let o=yt(e);if(o){let i=await o;return i&&createImageBitmap(new Blob([i]))}let a=await fetch(e,oe(e,{priority:t}));if(a.status===404||a.status===204)return;if(!a.ok)throw ie(e,a.status);return createImageBitmap(await a.blob())})();return r.catch(()=>ht.delete(e)),ht.set(e,r),r},ee=(e,t="auto")=>{let n=Oe.get(e);if(n)return n;let r=(async()=>{let o=yt(e);if(o){let s=await o;return s&&bt(s)}for(let s=0;;s+=1){let i=await fetch(e,oe(e,{priority:t}));if(i.status===404||i.status===204)return;if(i.ok)return bt(new Uint8Array(await i.arrayBuffer()));if(s>=2)throw ie(e,i.status);await new Promise((c)=>setTimeout(c,400*(s+1)))}})();return r.catch(()=>Oe.delete(e)),Oe.set(e,r),r},ln=(e,t,n,r)=>{let o=xe(t-1,0,e.maxzoom),s=t-o,a=2**Math.max(0,s),[i,c]=s>=0?[Math.floor(n/a),Math.floor(r/a)]:[n,r],l=K(e.tiles,o,i,c),u=1/a;return{url:l,vz:o,vx:i,vy:c,part:u,ox:n%a*u,oy:r%a*u}},L=(e,t,n,r,o)=>{let s=e[t]?.[n];if(s===void 0)return o;let a=Array.isArray(s)&&!ve(s)?s:ae(s,r);return a===void 0||a===null?o:a},pe=(e,t)=>{let n=ce(e)??[0,0,0,1];return Je([n[0],n[1],n[2],n[3]*t])},Le=(e,t)=>{if(e.layout?.visibility==="none")return!1;return t>=(e.minzoom??0)&&t<(e.maxzoom??24)},Y=(e,t,n,r,o,s)=>{let a=2**e;return[It((t+o/r)/a),Ft((n+s/r)/a)]};var Er=300,un=(e,t,n)=>{let r=Boolean(L(e,"layout",`${t}-allow-overlap`,n,!1)),o=Boolean(L(e,"layout",`${t}-ignore-placement`,n,!1));if(r&&o)return!0;if(r)return"allow";return o?"ignore":!1},fn=(e,t)=>Array.isArray(e)?[Number(e[0]??t[0]),Number(e[1]??t[1])]:t,Ir=(e)=>{let t=(Array.isArray(e)?e:[e]).map((a)=>Number(a)||0),[n=0,r=n,o=n,s=r]=t;return[n,r,o,s]},Fr=(e,t)=>{if(t==="uppercase")return e.toUpperCase();if(t==="lowercase")return e.toLowerCase();return e},Ae=(e,t)=>{let n=0;for(let a=2;a+1<e.length;a+=2)n+=Math.hypot((e[a]??0)-(e[a-2]??0),(e[a+1]??0)-(e[a-1]??0));let r=[];if(!(n>0)||!(t>0))return r;let o=Math.min(t/2,n/2),s=0;for(let a=2;a+1<e.length;a+=2){let[i,c,l,u]=[e[a-2]??0,e[a-1]??0,e[a]??0,e[a+1]??0],d=Math.hypot(l-i,u-c);while(d>0&&o<=s+d){let f=(o-s)/d;r.push([i+(l-i)*f,c+(u-c)*f,i,c,l,u,o]),o+=t}s+=d}return r},Ke=(e,t,n)=>{let[r=0,o=0,s=0,a=0,i=0,c=0]=e,l=Math.hypot(i-s,c-a)||1,u=t%2===0?1:-1,[d,f]=[-(c-a)/l*u,(i-s)/l*u];return[r+d*n,o+f*n,Math.atan2(-d,f)*180/Math.PI]},Nr=(e,t,n)=>{let r=[],o=0;for(let s=2;s+1<e.length;s+=2){let[a,i,c,l]=[e[s-2]??0,e[s-1]??0,e[s]??0,e[s+1]??0],u=Math.hypot(c-a,l-i),[d,f]=[o,o+u];if(o=f,u<=0||f<t||d>n)continue;let p=(_)=>[a+(c-a)*(_-d)/u,i+(l-i)*(_-d)/u];if(r.length===0)r.push(...p(Math.max(t,d)));r.push(...p(Math.min(n,f)))}return r},Or=(e,t,n,r,o)=>{let s=L(e,"layout","icon-rotation-alignment",n,"auto"),a=String(L(e,"layout","icon-text-fit",n,"none")),i=L(e,"layout","icon-text-fit-padding",n,[0,0,0,0]);return{image:t,size:me(e.layout?.["icon-size"])?Number(L(e,"layout","icon-size",n,1)):o(e),anchor:String(L(e,"layout","icon-anchor",n,"center")),offset:fn(L(e,"layout","icon-offset",n,[0,0]),[0,0]),rotate:Number(L(e,"layout","icon-rotate",n,0))||0,alignment:s==="map"||s==="auto"&&r==="line"?"map":"viewport",overlap:un(e,"icon",n),optional:Boolean(L(e,"layout","icon-optional",n,!1)),fit:a==="width"||a==="height"||a==="both"?a:"none",padding:Ir(i),color:String(L(e,"paint","icon-color",n,"#000")),opacity:Number(L(e,"paint","icon-opacity",n,1))}},Ge=16,Pr=(e,t,n)=>{let r=[],o=new Map,s=4096;e.layers.forEach((c)=>{if(c.type!=="fill-extrusion"||!Le(c,n))return;let l=t.get(c["source-layer"]??"");if(!l)return;s=l.extent;for(let u of l.features){let d=Z(u,n);if(u.type!==3||!Q(c.filter,d))continue;let f=Number(L(c,"paint","fill-extrusion-height",d,0));if(!(f>0))continue;let p=[1/0,1/0,-1/0,-1/0];for(let _ of u.geometry)for(let y=0;y+1<_.length;y+=2){let[A,m]=[_[y]??0,_[y+1]??0];p[0]=Math.min(p[0],A),p[1]=Math.min(p[1],m),p[2]=Math.max(p[2],A),p[3]=Math.max(p[3],m)}r.push({rings:u.geometry,height:f,box:p})}});let a=(c)=>Math.max(0,Math.min(Ge-1,Math.floor(c/s*Ge)));r.forEach(({box:c},l)=>{for(let u=a(c[1]);u<=a(c[3]);u++)for(let d=a(c[0]);d<=a(c[2]);d++){let f=u*Ge+d,p=o.get(f);if(p)p.push(l);else o.set(f,[l])}});let i=(c,l,u)=>{let d=!1;for(let f of c)for(let p=0,_=f.length-2;p+1<f.length;_=p,p+=2){let[y,A,m,M]=[f[p]??0,f[p+1]??0,f[_]??0,f[_+1]??0];if(A>u!==M>u&&l<(m-y)*(u-A)/(M-A)+y)d=!d}return d};return(c,l)=>(o.get(a(l)*Ge+a(c))??[]).reduce((u,d)=>{let f=r[d];return f&&i(f.rings,c,l)?Math.max(u??0,f.height):u},void 0)},mn=async(e,t)=>{let{z:n,x:r,y:o,id:s,priority:a,zoom:i=n,roofs:c=!1}=t,l=K(e.tiles,n,r,o),u=await ee(l,a);if(!u||J.has(s))return[];let d=[],f=c?Pr(e,u,i):()=>{return},p=new Map,_=(m)=>{let M=p.get(m);if(M!==void 0)return M;let b=m.layout?.["text-size"]??16,w=ve(b)?lt(b):b;return p.set(m,w),w},y=new Map,A=(m)=>{let M=y.get(m);if(M!==void 0)return M;let b=m.layout?.["icon-size"]??1,w=ve(b)?lt(b):b;return y.set(m,w),w};return e.layers.forEach((m,M)=>{let b=m.layout??{};if(m.type!=="symbol"||!Le(m,i))return;if(b["text-field"]===void 0&&b["icon-image"]===void 0)return;let w=u.get(m["source-layer"]??"");if(!w)return;let T={zoom:i,properties:{},type:"Unknown"},v=L(m,"layout","symbol-placement",T,"point")==="line"?"line":"point",g=v==="line"&&L(m,"layout","text-rotation-alignment",T,"auto")!=="viewport";for(let x of w.features){let h=Z(x,i);if(!Q(m.filter,h))continue;let k=ct(b["text-field"],h).trim(),S=ct(b["icon-image"],h).trim();if(!k&&!S)continue;let R=Fr(k,L(m,"layout","text-transform",h,"none")),N=L(m,"layout","text-font",h,["Noto Sans Regular"]),W=zt(Array.isArray(N)&&typeof N[0]==="string"?N[0]:"Noto Sans Regular"),B={layer:M,text:R,font:W,size:me(m.layout?.["text-size"])?Number(L(m,"layout","text-size",h,16)):_(m),color:String(L(m,"paint","text-color",h,"#000")),haloColor:String(L(m,"paint","text-halo-color",h,"rgba(0,0,0,0)")),haloWidth:Number(L(m,"paint","text-halo-width",h,0)),anchor:String(L(m,"layout","text-anchor",h,"center")),offset:fn(L(m,"layout","text-offset",h,[0,0]),[0,0]),maxWidth:Number(L(m,"layout","text-max-width",h,10)),lineHeight:Number(L(m,"layout","text-line-height",h,1.2)),overlap:un(m,"text",h),...g?{textAlong:g}:{},...L(m,"layout","text-optional",h,!1)?{textOptional:!0}:{},...S?{icon:Or(m,S,h,v,A)}:{}};if(x.type===1)for(let P of x.geometry)for(let U=0;U+1<P.length;U+=2){let[I,F]=[P[U]??0,P[U+1]??0];if(I<0||F<0||I>=w.extent||F>=w.extent)continue;let[E,C]=Y(n,r,o,w.extent,I,F),V=f(I,F);d.push({...B,lon:E,lat:C,...V===void 0?{}:{height:V}})}else if(!R&&v==="line"){let P=Number(L(m,"layout","symbol-spacing",h,250))*w.extent/(512*2**(i-n));for(let U of x.geometry)for(let[I=0,F=0,E=0,C=0,V=0,H=0]of Ae(U,Math.max(P,1))){if(I<0||F<0||I>=w.extent||F>=w.extent)continue;let[z,te]=Y(n,r,o,w.extent,I,F),[G,ne]=Y(n,r,o,w.extent,V,H),[X,re]=Y(n,r,o,w.extent,E,C);d.push({...B,lon:z,lat:te,along:[G-X,ne-re]})}}else if(R&&g){let P=w.extent/(512*2**(i-n)),U=Number(L(m,"layout","symbol-spacing",h,250))*P;for(let I of x.geometry){let F=0;for(let E=2;E+1<I.length;E+=2)F+=Math.hypot((I[E]??0)-(I[E-2]??0),(I[E+1]??0)-(I[E-1]??0));if(F<w.extent/32)continue;for(let[E=0,C=0,V=0,H=0,z=0,te=0,G=0]of Ae(I,Math.max(U,1))){if(E<0||C<0||E>=w.extent||C>=w.extent)continue;let ne=Math.min(G,F-G,Er*P),X=Nr(I,G-ne,G+ne),re=[];for(let Ve=0;Ve+1<X.length;Ve+=2)re.push(...Y(n,r,o,w.extent,X[Ve]??0,X[Ve+1]??0));let[Me,Se]=Y(n,r,o,w.extent,E,C),[nt,Dn]=Y(n,r,o,w.extent,z,te),[Bn,Vn]=Y(n,r,o,w.extent,V,H);d.push({...B,lon:Me,lat:Se,along:[nt-Bn,Dn-Vn],...re.length>=4?{path:re}:{}})}}}else{let P,U=0;for(let F of x.geometry){let E=0;for(let C=2;C+1<F.length;C+=2)E+=Math.hypot((F[C]??0)-(F[C-2]??0),(F[C+1]??0)-(F[C-1]??0));if(E>U)U=E,P=F}if(!P||U<w.extent/32)continue;let I=U/2;for(let F=2;F+1<P.length;F+=2){let[E,C,V,H]=[P[F-2]??0,P[F-1]??0,P[F]??0,P[F+1]??0],z=Math.hypot(V-E,H-C);if(z>=I&&z>0){let[te,G]=[E+(V-E)*I/z,C+(H-C)*I/z];if(te<0||G<0||te>=w.extent||G>=w.extent)break;let[ne,X]=Y(n,r,o,w.extent,te,G),[re,Me]=Y(n,r,o,w.extent,V,H),[Se,nt]=Y(n,r,o,w.extent,E,C);d.push({...B,lon:ne,lat:X,...v==="line"?{along:[re-Se,Me-nt]}:{}});break}I-=z}}}}),d};var pn=(e)=>{let t=e.leaf_type,n=typeof e.nature==="string"?e.nature:"";if(t==="needleleaved"||/conif/i.test(n))return 1;if(t==="broadleaved"||/feuillu/i.test(n))return 0;if(t==="mixed"||/mixte/i.test(n))return 0.5;if(e.class==="wood")return e.subclass==="forest"?0.35:0.15;return 0};var Ze=(e,t)=>{let n=e.length/he,r=n>t?t/n:1,o=[];for(let s=0;s<n;s+=1)if(r>=1||(e[s*he+Qt]??0)<r)o.push(...e.slice(s*he,(s+1)*he));return Float64Array.from(o)},se=(e,t,n,r)=>{let o=Math.imul(e^2654435769,2246822507)^Math.imul(t^3266489909,668265263);return o=Math.imul(o^o>>>15^Math.imul(n,374761393),739982445),o=Math.imul(o^o>>>13^Math.imul(r,695872825),695872825),((o^o>>>16)>>>0)/4294967296},ge=(e,t,n)=>e.reduce((r,o)=>{let s=o.length/2,a=0;for(let i=0,c=s-1;i<s;c=i,i+=1){let[l,u,d,f]=[o[i*2]??0,o[i*2+1]??0,o[c*2]??0,o[c*2+1]??0];if(u>n!==f>n&&t<(d-l)*(n-u)/(f-u)+l)a+=1}return a%2===1?!r:r},!1),Lr=(e,t,n,r,o=Number.POSITIVE_INFINITY)=>{let s=e[0]??[],a=[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY];for(let T=0;T+1<s.length;T+=2){let[v,g]=[s[T]??0,s[T+1]??0];a[0]=Math.min(a[0]??v,v),a[1]=Math.min(a[1]??g,g),a[2]=Math.max(a[2]??v,v),a[3]=Math.max(a[3]??g,g)}let[i,c]=[Math.max(0,a[0]??0),Math.max(0,a[1]??0)],[l,u]=[Math.min(t,a[2]??0),Math.min(t,a[3]??0)];if(!(n>0)||i>=l||c>=u)return[];let d=(l-i)/n*((u-c)/n),f=d>o?n*Math.sqrt(d/o):n,[p,_,y,A]=[Math.floor(i/f),Math.ceil(l/f),Math.floor(c/f),Math.ceil(u/f)],[m,M,b]=r,w=Math.imul(m+1,16777619)^Math.imul(M,1540483477)^Math.imul(b,461845907);return Array.from({length:Math.max(0,A-y)},(T,v)=>y+v).flatMap((T)=>Array.from({length:Math.max(0,_-p)},(v,g)=>p+g).flatMap((v)=>{let g=(v+se(w,v,T,1))*f,x=(T+se(w,v,T,2))*f;if(g<0||x<0||g>=t||x>=t||!ge(e,g,x))return[];return[[g,x,se(w,v,T,3)]]}))},dn=async(e,t)=>{let{z:n,x:r,y:o,id:s,spacing:a,maxTrees:i,priority:c}=t,l=K(e.tiles,n,r,o),u=await ee(l,c);if(!u||J.has(s))return;let d=_e(n,o),f=[];e.layers.forEach((A,m)=>{let M=a[m]??0,b=u.get(A["source-layer"]??"");if(!b||!(M>0))return;let w=M/d*b.extent;b.features.forEach((T)=>{if(T.type!==3||!Q(A.filter,Z(T,n)))return;let v=pn(T.properties);T.geometry.reduce((x,h)=>{let k=0;for(let S=0;S+1<h.length;S+=2){let R=(S+2)%h.length;k+=(h[S]??0)*(h[R+1]??0)-(h[R]??0)*(h[S+1]??0)}if(k>0)x.push([h]);else if(k<0)x.at(-1)?.push(h);return x},[]).forEach((x)=>{Lr(x,b.extent,w,[n,r,o],i*4).forEach(([h,k,S])=>{f.push([h,k,S,b.extent,v])})})})});let p=f.length>i?i/f.length:1,_=f.filter(([,,A])=>p>=1||se(Math.floor(A*2147483648),n,r,o)<p),y=new Float64Array(_.length*he);return _.forEach(([A,m,M,b,w],T)=>{let[v,g]=Y(n,r,o,b,A,m),x=se(Math.floor(M*2147483648),7,11,13),h=se(Math.floor(M*2147483648),3,5,17)<w?1:0;y.set([v,g,0.75+0.5*M,en(M),x,h],T*he)}),y};var Ur={bus_stop:"shelter",waste_basket:"bin",post_box:"postbox",drinking_water:"fountain",bicycle_parking:"rack"},Cr=new Set(["primary","secondary","tertiary","minor","service","trunk"]),Wr=25,bn={street:[24,3.2],path:[18,1.3]},Dr=(e)=>e.filter((t)=>t.type===1),yn=async(e,t)=>{let{z:n,x:r,y:o,id:s,maxObjects:a,priority:i}=t,c=K(e.tiles,n,r,o),l=await ee(c,i);if(!l||J.has(s))return;let u=l.get("poi"),d=l.get("transportation"),f=d?.extent??u?.extent??4096,p=f/_e(n,o),_=(d?.features??[]).filter((g)=>g.type===2&&Cr.has(String(g.properties.class))),y=(l.get("landcover")?.features??[]).filter((g)=>g.type===3&&String(g.properties.class)==="grass").map((g)=>{let x=g.geometry[0]??[],h=x.filter((S,R)=>R%2===0),k=x.filter((S,R)=>R%2===1);return{rings:g.geometry,bounds:[Math.min(...h),Math.min(...k),Math.max(...h),Math.max(...k)]}}),A=(g,x)=>y.some(({rings:h,bounds:[k=0,S=0,R=0,N=0]})=>g>=k&&g<=R&&x>=S&&x<=N&&ge(h,g,x)),m=[],M=(g,x,h,k,S)=>{if(g<0||x<0||g>=f||x>=f)return;let[R,N]=Y(n,r,o,f,g,x);m.push(R,N,1,h,k,pt.indexOf(S))},b=Wr*p,w=new Map,T=(g,x)=>(g+32768)*65536+x+32768;_.forEach((g)=>{g.geometry.forEach((x)=>{for(let h=2;h+1<x.length;h+=2){let[k,S,R,N]=[x[h-2]??0,x[h-1]??0,x[h]??0,x[h+1]??0],[W,B]=[Math.floor(Math.min(k,R)/b),Math.floor(Math.max(k,R)/b)],[P,U]=[Math.floor(Math.min(S,N)/b),Math.floor(Math.max(S,N)/b)];for(let I=W;I<=B;I+=1)for(let F=P;F<=U;F+=1){let E=w.get(T(I,F))??[];E.push(k,S,R,N),w.set(T(I,F),E)}}})});let v=(g,x,h)=>{let[k,S,R]=[b*b,0,0],[N,W]=[Math.floor(g/b),Math.floor(x/b)];for(let B=N-1;B<=N+1;B+=1)for(let P=W-1;P<=W+1;P+=1){let U=w.get(T(B,P))??[];for(let I=0;I+3<U.length;I+=4){let[F,E,C,V]=[U[I]??0,U[I+1]??0,U[I+2]??0,U[I+3]??0],[H,z]=[C-F,V-E],te=H*H+z*z,G=te>0?Math.max(0,Math.min(1,((g-F)*H+(x-E)*z)/te)):0,[ne,X]=[F+G*H-g,E+G*z-x],re=ne*ne+X*X;if(re<k)[k,S,R]=[re,ne,X]}}if(S===0&&R===0)return h;return Math.atan2(S,-R)*180/Math.PI};return Dr(u?.features??[]).forEach((g)=>{let x=Ur[String(g.properties.subclass)];if(!x)return;g.geometry.forEach(([h=0,k=0])=>{let S=se(Math.floor(h),Math.floor(k),pt.indexOf(x),31);M(h,k,v(h,k,S*360),S,x)})}),(d?.features??[]).forEach((g)=>{let x=String(g.properties.subclass),h=String(g.properties.class)==="path"&&x==="pedestrian",k=String(g.properties.class)==="path"&&(x==="footway"||x==="path");if(g.type!==2||!(h||k))return;let[S,R]=h?bn.street:bn.path;g.geometry.forEach((N)=>{Ae(N,S*p).forEach((W,B)=>{let[P=0,U=0,,,,,I=0]=W;if(k&&!A(P,U))return;let F=se(Math.floor(P),Math.floor(U),Math.floor(I),37);M(...Ke(W,B,R*p),F,"bench")})})}),Ze(m,a)};var hn={flat:1,skillion:1,hipped:2,"half-hipped":2,side_hipped:2,dome:2,onion:2,round:2,gabled:3,saltbox:3,pyramidal:4,cone:4,mansard:5,gambrel:5},Br=255,gn=(e)=>e==="generated"?Br:hn[e],wn=(e,t)=>be(e)?t.map((n)=>e[n]).find((n)=>n!==void 0):void 0,xn=(e,t)=>{let n=wn(e,["roof:shape","roof_shape"]);if(t==="flat")return;if(typeof n==="string"&&hn[n]!==void 0)return n;return t==="generated"?"generated":void 0},_n=(e)=>Number(wn(e,["roof:height","roof_height"])??Number.NaN);var wt=32,j={color:0,second:4,size:8,size2:16,range:24,blur:26,landmark:26,patternRatio:27,fillPattern:28,linePattern:29};class Be{static __wrap(e){let t=Object.create(Be.prototype);return t.__wbg_ptr=e,An.register(t,t.__wbg_ptr,t),t}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,An.unregister(this),e}free(){let e=this.__destroy_into_raw();O.__wbg_tessellatedtile_free(e,0)}blockIndices(){return O.tessellatedtile_blockIndices(this.__wbg_ptr)}blockRanges(){let e=O.tessellatedtile_blockRanges(this.__wbg_ptr);var t=Qe(e[0],e[1]).slice();return O.__wbindgen_free(e[0],e[1]*4,4),t}blocks(){return O.tessellatedtile_blocks(this.__wbg_ptr)}bounds(){let e=O.tessellatedtile_bounds(this.__wbg_ptr);var t=Hr(e[0],e[1]).slice();return O.__wbindgen_free(e[0],e[1]*8,8),t}fillRanges(){let e=O.tessellatedtile_fillRanges(this.__wbg_ptr);var t=Qe(e[0],e[1]).slice();return O.__wbindgen_free(e[0],e[1]*4,4),t}indices(){return O.tessellatedtile_indices(this.__wbg_ptr)}lineRanges(){let e=O.tessellatedtile_lineRanges(this.__wbg_ptr);var t=Qe(e[0],e[1]).slice();return O.__wbindgen_free(e[0],e[1]*4,4),t}lineTable(){return O.tessellatedtile_lineTable(this.__wbg_ptr)}pieces(){return O.tessellatedtile_pieces(this.__wbg_ptr)}prism(){return O.tessellatedtile_prism(this.__wbg_ptr)!==0}vertices(){return O.tessellatedtile_vertices(this.__wbg_ptr)}}if(Symbol.dispose)Be.prototype[Symbol.dispose]=Be.prototype.free;function Sn(e,t,n,r,o,s,a,i,c,l,u,d,f,p,_,y,A){let m=Xe(e,O.__wbindgen_malloc),M=q,b=de(t,O.__wbindgen_malloc),w=q,T=de(n,O.__wbindgen_malloc),v=q,g=de(r,O.__wbindgen_malloc),x=q,h=de(o,O.__wbindgen_malloc),k=q,S=Xe(s,O.__wbindgen_malloc),R=q,N=de(a,O.__wbindgen_malloc),W=q,B=de(i,O.__wbindgen_malloc),P=q,U=de(c,O.__wbindgen_malloc),I=q,F=Mn(l,O.__wbindgen_malloc),E=q,C=Mn(u,O.__wbindgen_malloc),V=q,H=qr(d,O.__wbindgen_malloc),z=q,te=Xe(f,O.__wbindgen_malloc),G=q,ne=de(p,O.__wbindgen_malloc),X=q,re=Xe(A,O.__wbindgen_malloc),Me=q,Se=O.tessellateVectorTile(m,M,b,w,T,v,g,x,h,k,S,R,N,W,B,P,U,I,F,E,C,V,H,z,te,G,ne,X,_,y,re,Me);return Be.__wrap(Se)}function Vr(){return{__proto__:null,"./isard_tess_bg.js":{__proto__:null,__wbg___wbindgen_throw_41e9ee4f547fc59a:function(t,n){throw Error(jr(t,n))},__wbg_new_from_slice_37a3c3a194266cb8:function(t,n){return new Uint32Array(Qe(t,n))},__wbg_new_from_slice_9a868026ffa4208a:function(t,n){return new Uint8Array(Jr(t,n))},__wbg_new_from_slice_ca6ad97db1f4779a:function(t,n){return new Float32Array(zr(t,n))},__wbindgen_init_externref_table:function(){let t=O.__wbindgen_externrefs,n=t.grow(4);t.set(0,void 0),t.set(n+0,void 0),t.set(n+1,null),t.set(n+2,!0),t.set(n+3,!1)}}}}var An=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e)=>O.__wbg_tessellatedtile_free(e,1));function zr(e,t){return e=e>>>0,kn().subarray(e/4,e/4+t)}function Hr(e,t){return e=e>>>0,vn().subarray(e/8,e/8+t)}function Qe(e,t){return e=e>>>0,Rn().subarray(e/4,e/4+t)}function Jr(e,t){return e=e>>>0,_t().subarray(e/1,e/1+t)}var Ue=null;function kn(){if(Ue===null||Ue.byteLength===0)Ue=new Float32Array(O.memory.buffer);return Ue}var Ce=null;function vn(){if(Ce===null||Ce.byteLength===0)Ce=new Float64Array(O.memory.buffer);return Ce}function jr(e,t){return Yr(e>>>0,t)}var We=null;function Rn(){if(We===null||We.byteLength===0)We=new Uint32Array(O.memory.buffer);return We}var De=null;function _t(){if(De===null||De.byteLength===0)De=new Uint8Array(O.memory.buffer);return De}function de(e,t){let n=t(e.length*4,4)>>>0;return Rn().set(e,n/4),q=e.length,n}function Mn(e,t){let n=t(e.length*1,1)>>>0;return _t().set(e,n/1),q=e.length,n}function qr(e,t){let n=t(e.length*4,4)>>>0;return kn().set(e,n/4),q=e.length,n}function Xe(e,t){let n=t(e.length*8,8)>>>0;return vn().set(e,n/8),q=e.length,n}var et=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});et.decode();var $r=2146435072,xt=0;function Yr(e,t){if(xt+=t,xt>=$r)et=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),et.decode(),xt=t;return et.decode(_t().subarray(e,e+t))}var q=0,Gr,Kr,O;function Zr(e,t){return Kr=e,O=e.exports,Gr=t,Ue=null,Ce=null,We=null,De=null,O.__wbindgen_start(),O}async function Xr(e,t){if(typeof Response==="function"&&e instanceof Response){if(!e.ok)throw Error(`failed to fetch Wasm: ${e.status} ${e.statusText} fetching '${e.url}'`);if(typeof WebAssembly.instantiateStreaming==="function")try{return await WebAssembly.instantiateStreaming(e,t)}catch(o){if(n(e.type)&&e.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",o);else throw o}let r=await e.arrayBuffer();return await WebAssembly.instantiate(r,t)}else{let r=await WebAssembly.instantiate(e,t);if(r instanceof WebAssembly.Instance)return{instance:r,module:e};else return r}function n(r){switch(r){case"basic":case"cors":case"default":return!0}return!1}}async function Tn(e){if(O!==void 0)return O;if(e!==void 0)if(Object.getPrototypeOf(e)===Object.prototype)({module_or_path:e}=e);else console.warn("using deprecated parameters for the initialization function; pass a single object instead");if(e===void 0)e=new URL("isard_tess_bg.wasm",import.meta.url);let t=Vr();if(typeof e==="string"||typeof Request==="function"&&e instanceof Request||typeof URL==="function"&&e instanceof URL)e=fetch(e);let{instance:n,module:r}=await Xr(await e,t);return Zr(n,r)}var tt=async(e,t)=>{let{z:n,x:r,y:o,id:s,priority:a}=t,i=K(e.tiles,n,r,o),c=await ee(i,a),l={points:[],ringStart:[],polygonStart:[],feature:[]},u=[];if(!c||J.has(s))return;let d=new Set,f=2**n;return e.layers.forEach((p)=>{let _=c.get(p["source-layer"]??"");if(!_)return;_.features.forEach((y)=>{if(y.type!==3||d.has(y)||!Q(p.filter,Z(y,n)))return;d.add(y);let A=u.length;u.push(y.properties),y.geometry.forEach((m)=>{let M=0;for(let b=0;b+1<m.length;b+=2){let w=(b+2)%m.length;M+=(m[b]??0)*(m[w+1]??0)-(m[w]??0)*(m[b+1]??0)}if(M===0)return;if(M>0||l.polygonStart.length===0||l.feature.at(-1)!==A)l.polygonStart.push(l.ringStart.length),l.feature.push(A);l.ringStart.push(l.points.length/2);for(let b=0;b+1<m.length;b+=2)l.points.push((r+(m[b]??0)/_.extent)/f,(o+(m[b+1]??0)/_.extent)/f)})})}),l.ringStart.push(l.points.length/2),l.polygonStart.push(l.ringStart.length-1),{arrays:{points:Float64Array.from(l.points),ringStart:Uint32Array.from(l.ringStart),polygonStart:Uint32Array.from(l.polygonStart),feature:Uint32Array.from(l.feature)},properties:u}},Qr=new Set(["theatre","museum","place_of_worship","castle","monument","attraction","town_hall"]),eo=(e)=>(e?.get("poi")?.features??[]).filter((t)=>t.type===1&&Qr.has(String(t.properties.class))).flatMap((t)=>t.geometry.flat()),At=(e)=>{let[t,n,r,o]=[1/0,1/0,-1/0,-1/0];for(let s=0;s+1<e.length;s+=2)[t,n]=[Math.min(t,e[s]??0),Math.min(n,e[s+1]??0)],[r,o]=[Math.max(r,e[s]??0),Math.max(o,e[s+1]??0)];return[t,n,r,o]},to=(e,t)=>{if(t.length===0)return!1;let[n,r,o,s]=At(e[0]??[]);for(let a=0;a+1<t.length;a+=2){let[i,c]=[t[a]??0,t[a+1]??0];if(i>=n&&i<=o&&c>=r&&c<=s&&ge(e,i,c))return!0}return!1},En=(e)=>{let t=e.length>2&&e[0]===e[e.length-2]&&e[1]===e[e.length-1],n=Math.max(1,e.length/2-(t?1:0)),[r,o]=[0,0];for(let s=0;s<n;s+=1)[r,o]=[r+(e[s*2]??0),o+(e[s*2+1]??0)];return[r/n,o/n]},no=(e,t)=>{let n=e.filter((s)=>s.type===3),r=n.filter((s)=>to(s.geometry,t)),o=new Set(r);return r.forEach((s)=>{let[a,i,c,l]=At(s.geometry[0]??[]),u=En(s.geometry[0]??[]);n.forEach((d)=>{if(o.has(d))return;let[f,p,_,y]=At(d.geometry[0]??[]);if(_<a||f>c||y<i||p>l)return;if(ge(s.geometry,...En(d.geometry[0]??[]))||ge(d.geometry,...u))o.add(d)})}),o},ro={line:(e)=>e!==1,circle:(e)=>e===1,fill:(e)=>e===3,extrusion:(e)=>e===3},oo=(e,t)=>{let n=xn(e,t);return[n===void 0?0:gn(n)??0,_n(e)]},so=24,io=(e,t,n,r)=>{if(!at(e.filter))return Q(e.filter,Z(t,n))?[0,0]:void 0;let o,s=0;for(let a=n-1;a<=r;a+=1)if(Q(e.filter,Z(t,a)))o??=a,s=a+1;else if(o!==void 0)break;return o===void 0?void 0:[o<=n-1?0:o,s>r?99:s]},ao=(e,t)=>{let n=e.slice(),r=[[0,0,(o)=>o>=0],[0,t,(o)=>o<=t],[1,0,(o)=>o>=0],[1,t,(o)=>o<=t]];for(let[o,s,a]of r){let i=[],c=n.length/2;for(let l=0;l<c;l+=1){let[u,d]=[n[l*2]??0,n[l*2+1]??0],f=(l+1)%c,[p,_]=[n[f*2]??0,n[f*2+1]??0],[y,A]=o===0?[u,p]:[d,_];if(a(y))i.push(u,d);if(a(y)!==a(A)){let m=(s-y)/(A-y);i.push(o===0?s:u+(p-u)*m,o===0?d+(_-d)*m:s)}}if(n=i,n.length===0)break}return n},co=0.00048828125,lo=(e,t)=>{let n=e.length/2;if(n<=2)return[...e];let r=new Uint8Array(n),o=[[0,n-1]],s=t*t;r[0]=1,r[n-1]=1;while(o.length>0){let[a,i]=o.pop()??[0,0],[c,l,u,d]=[e[a*2]??0,e[a*2+1]??0,e[i*2]??0,e[i*2+1]??0],[f,p]=[u-c,d-l],_=f*f+p*p,[y,A]=[-1,s];for(let m=a+1;m<i;m+=1){let[M,b]=[(e[m*2]??0)-c,(e[m*2+1]??0)-l],w=_>0?Math.max(0,Math.min(1,(M*f+b*p)/_)):0,T=(M-w*f)**2+(b-w*p)**2;if(T>A)[y,A]=[m,T]}if(y>=0)r[y]=1,o.push([a,y],[y,i])}return e.filter((a,i)=>r[i>>1]===1)},uo=(e,t)=>{let n=[],r=[],o=()=>{if(r.length>=4)n.push(r);r=[]};for(let s=2;s+1<e.length;s+=2){let[a,i,c,l]=[e[s-2]??0,e[s-1]??0,e[s]??0,e[s+1]??0],[u,d]=[c-a,l-i],[f,p]=[0,1];for(let[_,y]of[[-u,a],[u,t-a],[-d,i],[d,t-i]])if(_===0){if(y<0)p=-1}else if(_<0)f=Math.max(f,y/_);else p=Math.min(p,y/_);if(f>p){o();continue}if(r.length===0||f>0)o(),r.push(a+u*f,i+d*f);if(r.push(a+u*p,i+d*p),p<1)o()}return o(),n},fo=(e,t)=>e>=t?[e-0.5,e+1,e+3,e+6]:[e-0.5,e-0.16666666666666666,e+0.16666666666666666,e+0.5],mo=(e,t,n,r,o)=>{let s=2**n,[a,i]=[r*t,o*t],c=[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY];e.forEach((p)=>{for(let _=0;_+1<p.length;_+=2){let[y,A]=[(p[_]??0)*s-a,(p[_+1]??0)*s-i];c[0]=Math.min(c[0]??y,y),c[1]=Math.min(c[1]??A,A),c[2]=Math.max(c[2]??y,y),c[3]=Math.max(c[3]??A,A)}});let[l=0,u=0,d=0,f=0]=c;if(d<=0||f<=0||l>=t||u>=t)return;return e.map((p)=>p.map((_,y)=>_*s-(y%2===0?a:i)))},po=(e)=>{let t=[],n=[],r=[],o=[];return{add:(i,c,l,u,d,f=!1)=>{let p=(b,w,T)=>L(c,"paint",b,{...l,zoom:T},w),_=`${c.type}-opacity`,y=me(c.paint?.[_]),A=(b)=>{let[w,T,v,g]=ce(p(f?"fill-outline-color":`${c.type}-color`,"#000",b))??[0,0,0,1];return[w,T,v,g*(y?Number(p(_,1,b)):1)]},m=Array(wt).fill(0),M=e[3]-e[0]>1.5?e[1]:e[3];if(m.splice(j.color,8,...A(e[0]),...A(M)),m.splice(j.range,2,...d),!f&&["fill","background","line","fill-extrusion"].includes(c.type)){let b=p(`${c.type}-pattern`,"",(e[0]+M)/2);if(typeof b==="string"&&b){let w=n.indexOf(b);m[c.type==="fill"||c.type==="background"?j.fillPattern:j.linePattern]=(w>=0?w:n.push(b)-1)+1}}if(c.type==="circle"){let b=(e[0]+M)/2,[w,T,v,g]=ce(p("circle-stroke-color","#000",b))??[0,0,0,1];m.splice(j.color,8,...A(b),w,T,v,g*Number(p("circle-stroke-opacity",1,b)))}return e.forEach((b,w)=>{if(m[j.size+w]=b,f){m[j.size+4+w]=1;return}if(c.type==="circle"){m[j.size+4+w]=Math.max(0,Number(p("circle-radius",5,b))||0),m[j.size2+w]=b,m[j.size2+4+w]=Math.max(0,Number(p("circle-stroke-width",0,b))||0);return}if(c.type==="fill-extrusion"){m[j.size+4+w]=Math.max(0,Number(p("fill-extrusion-height",0,b))||0),m[j.size2+w]=b,m[j.size2+4+w]=Math.max(0,Number(p("fill-extrusion-base",0,b))||0);return}if(c.type!=="line")return;if(w===0)m[j.blur]=Math.max(0,Number(p("line-blur",0,(e[0]+M)/2))||0);let T=Number(p("line-width",1,b)),v=Number(p("line-gap-width",0,b));m[j.size+4+w]=Math.max(0,v>0?v+2*T:T),m[j.size2+w]=b,m[j.size2+4+w]=Number(p("line-offset",0,b))||0}),t.push(...m),r.push(u),o.push(i),r.length-1},landmark:(i)=>{t[i*wt+j.landmark]=1},styles:t,patterns:n,properties:r,sublayer:o}},bo=(e,t,n)=>{let r={points:[],ringStart:[],polygonStart:[],feature:[],roofs:[],roofHeights:[],roofOutlines:[],roofOutlineStart:[]},o={points:[],start:[],feature:[]},s={points:[],feature:[]},a={fill:[],line:[],circle:[]},i=(u,d,f)=>[(e+u/f)/n,(t+d/f)/n],c=(u,d,f)=>{r.polygonStart.push(r.ringStart.length),r.feature.push(u),r.roofs.push(d),r.roofHeights.push(f),r.roofOutlineStart.push(r.roofOutlines.length/2)},l=()=>{a.fill.push(r.polygonStart.length),a.line.push(o.start.length),a.circle.push(s.feature.length)};return{sublayer:l,background:(u)=>{c(u,0,Number.NaN),r.ringStart.push(r.points.length/2),r.points.push(e/n,t/n,(e+1)/n,t/n,(e+1)/n,(t+1)/n,e/n,(t+1)/n)},circles:(u,d,f)=>{u.forEach((p)=>{for(let _=0;_+1<p.length;_+=2){let[y=0,A=0]=[p[_],p[_+1]];if(y<0||A<0||y>=f||A>=f)continue;s.points.push(...i(y,A,f)),s.feature.push(d)}})},lines:(u,d,f,p)=>{u.forEach((_)=>{let y=d&&_.length>=2?[..._,_[0]??0,_[1]??0]:_;uo(y,p).forEach((A)=>{let m=lo(A,p*co);o.start.push(o.points.length/2),o.feature.push(f);for(let M=0;M+1<m.length;M+=2)o.points.push(...i(m[M]??0,m[M+1]??0,p))})})},polygons:(u,d,[f,p],_)=>{let y=!1;u.forEach((A)=>{let m=0;for(let b=0;b+1<A.length;b+=2){let w=(b+2)%A.length;m+=(A[b]??0)*(A[w+1]??0)-(A[w]??0)*(A[b+1]??0)}if(m===0)return;if(m<0&&!y)return;let M=ao(A,_);if(m>0)y=M.length>=6;if(M.length<6)return;if(m>0){if(c(d,f,p),f>1&&A.some((b)=>b<0||b>_))for(let b=0;b+1<A.length;b+=2)r.roofOutlines.push(...i(A[b]??0,A[b+1]??0,_))}r.ringStart.push(r.points.length/2);for(let b=0;b+1<M.length;b+=2)r.points.push(...i(M[b]??0,M[b+1]??0,_))})},done:()=>(l(),r.ringStart.push(r.points.length/2),r.polygonStart.push(r.ringStart.length-1),r.roofOutlineStart.push(r.roofOutlines.length/2),o.start.push(o.points.length/2),{fills:{points:Float64Array.from(r.points),ringStart:Uint32Array.from(r.ringStart),polygonStart:Uint32Array.from(r.polygonStart),feature:Uint32Array.from(r.feature),fillStart:Uint32Array.from(a.fill),roofs:Uint8Array.from(r.roofs),roofHeights:Float32Array.from(r.roofHeights),roofOutlines:Float64Array.from(r.roofOutlines),roofOutlineStart:Uint32Array.from(r.roofOutlineStart),roofMetres:rt((t+0.5)/n)},lines:{points:Float64Array.from(o.points),start:Uint32Array.from(o.start),feature:Uint32Array.from(o.feature),lineStart:Uint32Array.from(a.line)},circles:{points:Float64Array.from(s.points),feature:Uint32Array.from(s.feature),circleStart:Uint32Array.from(a.circle)},tile:Float64Array.of(e/n,t/n,(e+1)/n,(t+1)/n)})}},In=async(e,t,n)=>{let{z:r,x:o,y:s,id:a,priority:i,deepest:c=e.maxzoom,roofs:l="data"}=t,u=Math.max(0,r-e.maxzoom),[d,f,p]=[r-u,Math.floor(o/2**u),Math.floor(s/2**u)],[_,y]=[o-f*2**u,s-p*2**u],A=await ee(K(e.tiles,d,f,p),i);if(J.has(a))return;let m=eo(A),M=new Map,b=(v)=>{let g=M.get(v)??(m.length>0?no(v,m):new Set);return M.set(v,g),g},w=po(fo(r,Math.max(c,e.maxzoom))),T=r>=Math.max(c,e.maxzoom)?so:r;return e.layers.forEach((v,g)=>{n?.sublayer();let x=je(v),h=v.type==="fill"&&v.paint?.["fill-outline-color"]!==void 0&&v.paint?.["fill-antialias"]!==!1;if(!x)return;if(v.type==="background"){let S=w.add(g,v,{zoom:r,properties:{},type:"Unknown"},{},[0,0]);n?.background(S);return}let k=A?.get(v["source-layer"]??"");k?.features.forEach((S)=>{if(!ro[x](S.type))return;let R=Z(S,r),N=io(v,S,r,T);if(!N)return;let W=u>0?mo(S.geometry,k.extent,u,_,y):S.geometry;if(!W)return;let B=w.add(g,v,R,S.properties,N),P=h?w.add(g,v,R,S.properties,N,!0):-1;if(x==="extrusion"&&b(k.features).has(S))w.landmark(B);if(!n)return;if(x==="circle"){n.circles(W,B,k.extent);return}if(x==="line"){n.lines(W,S.type===3,B,k.extent);return}if(P>=0)n.lines(W,!0,P,k.extent);let U=x==="extrusion"?oo(S.properties,l):[0,Number.NaN];n.polygons(W,B,U,k.extent)})}),w},Fn=async(e,t)=>{let n=await In(e,t);return n&&{styles:Float32Array.from(n.styles),patterns:n.patterns}},Nn=async(e,t)=>{let n=bo(t.x,t.y,2**t.z),r=await In(e,t,n);if(!r)return;return{...n.done(),styles:Float32Array.from(r.styles),patterns:r.patterns,properties:r.properties,sublayer:Uint16Array.from(r.sublayer)}},we={},On=()=>{if(!we.url)return Promise.resolve(!1);let e=we.ready??Tn({module_or_path:we.url}).then(()=>!0,(t)=>(console.warn("isard: the tessellation module failed to load, the main thread does its work",t),!1));return we.ready=e,e},Pn=(e,t,n)=>{let{fills:r,lines:o}=e;try{let s=Sn(r.points,r.ringStart,r.polygonStart,r.feature,r.fillStart,o.points,o.start,o.feature,o.lineStart,t,r.roofs??new Uint8Array,r.roofHeights??new Float32Array,r.roofOutlines??new Float64Array,r.roofOutlineStart??new Uint32Array,r.roofMetres??0,n,e.tile??new Float64Array),a={vertices:s.vertices(),indices:s.indices(),fillRanges:s.fillRanges(),prism:s.prism(),pieces:s.pieces(),lineTable:s.lineTable(),lineRanges:s.lineRanges(),blocks:s.blocks(),blockIndices:s.blockIndices(),blockRanges:s.blockRanges(),bounds:s.bounds()};return s.free(),a}catch(s){console.warn("isard: the tessellation module failed, the main thread does its work",s),we.ready=Promise.resolve(!1);return}};var yo={primary:8,secondary:7,tertiary:6,minor:5,service:4},Ln=async(e,t)=>{let{z:n,x:r,y:o,id:s,spacing:a,maxLamps:i,priority:c}=t,l=K(e.tiles,n,r,o),u=await ee(l,c);if(!u||J.has(s))return;let d=_e(n,o),f=new Set,p=[];return e.layers.forEach((_)=>{let y=u.get(_["source-layer"]??"");if(!y)return;let A=y.extent/d;y.features.forEach((m)=>{let M=yo[String(m.properties.class)];if(m.type!==2||M===void 0||f.has(m)||!Q(_.filter,Z(m,n)))return;f.add(m),m.geometry.forEach((b)=>{Ae(b,a*A).forEach((w,T)=>{let[v,g,x]=Ke(w,T,M*A);if(v<0||g<0||v>=y.extent||g>=y.extent)return;let[h,k]=Y(n,r,o,y.extent,v,g),S=se(Math.floor(v),Math.floor(g),Math.floor(w[6]??0),29);p.push(h,k,1,x,S,0)})})})}),Ze(p,i)};var ho=new Set(["butt","round","square"]),go=new Set(["bevel","miter","round"]),wo=(e)=>ho.has(e),xo=(e)=>go.has(e),_o=(e)=>wo(e)?e:"butt",Ao=(e)=>xo(e)?e:"miter",Mo=(e,t)=>{if(e.patterns.has(t))return e.patterns.get(t);let r=(()=>{let o=gt(e,t);if(!o||!(o.icon.width>0)||!(o.icon.height>0))return;let{icon:s}=o,a=new OffscreenCanvas(s.width,s.height);return a.getContext("2d")?.drawImage(o.image,s.x,s.y,s.width,s.height,0,0,s.width,s.height),a})();return e.patterns.set(t,r),r},Mt=new Map,So=(e)=>{let t=Mt.get(e)?.pop()??new OffscreenCanvas(e,e),n=t.getContext("2d",{willReadFrequently:!0});if(!n)throw Error("isard: no 2D context");return n.setTransform(1,0,0,1,0,0),n.globalAlpha=1,n.setLineDash([]),n.clearRect(0,0,e,e),{canvas:t,g:n}},ko=(e)=>{let t=Mt.get(e.width)??[];if(Mt.set(e.width,t),t.length<4)t.push(e)},vo=(e,t,n)=>{if(n)return Promise.resolve(e.transferToImageBitmap());return createImageBitmap(t.getImageData(0,0,e.width,e.height),{premultiplyAlpha:"none"})},Un=async(e,t)=>{let{z:n,x:r,y:o,size:s,id:a,priority:i}=t,c=ln(e,n,r,o),l=await ee(c.url,i);if(J.has(a))return;let{canvas:u,g:d}=So(s);try{return await Ro(e,c,l,u,d,n,r,o,s,a,i)}finally{ko(u)}},Ro=async(e,t,n,r,o,s,a,i,c,l,u)=>{let d=Math.max(0,s-1),f=c/256,p=!1,_=!1;for(let y of e.layers){if(!Le(y,d))continue;let A={zoom:d,properties:{},type:"Unknown"};if(y.type==="background"){let x=L(y,"paint","background-color",A,"#000"),h=Number(L(y,"paint","background-opacity",A,1));if(o.fillStyle=pe(x,h),o.fillRect(0,0,c,c),(ce(x)??[0,0,0,1])[3]*h>=1)_=!0;p=!0;continue}if(y.type==="raster"){let x=y.source===void 0?void 0:e.rasters[y.source];if(!x)continue;let h=xe(s-(x.tileSize>=512?1:0),0,x.maxzoom),k=2**(s-h),S=K(x.tiles,h,Math.floor(a/k),Math.floor(i/k)),R=await cn(S,u);if(J.has(l))return;if(!R)continue;let[N,W]=[R.width/k,R.height/k];o.globalAlpha=Number(L(y,"paint","raster-opacity",A,1)),o.drawImage(R,a%k*N,i%k*W,N,W,0,0,c,c),o.globalAlpha=1,p=!0;continue}let m=n?.get(y["source-layer"]??"");if(!m)continue;let M=c/(m.extent*t.part),[b,w]=[t.ox*m.extent,t.oy*m.extent],T=(x,h)=>{o.beginPath();for(let k of x.geometry){for(let S=0;S+1<k.length;S+=2){let[R,N]=[((k[S]??0)-b)*M,((k[S+1]??0)-w)*M];if(S===0)o.moveTo(R,N);else o.lineTo(R,N)}if(h)o.closePath()}},v=new Map,g=(x,h,k,S)=>{let R=v.get(h),N=R??me(y[x]?.[h]);if(R===void 0)v.set(h,N);return L(y,x,h,N?k:A,S)};for(let x of m.features){let h=Z(x,d);if(!Q(y.filter,h))continue;if(y.type==="fill-extrusion"&&x.type===3)T(x,!0),o.fillStyle=pe(g("paint","fill-extrusion-color",h,"#000"),Number(g("paint","fill-extrusion-opacity",h,1))),o.fill("evenodd"),p=!0;else if(y.type==="fill"&&x.type===3){let k=Number(g("paint","fill-opacity",h,1)),S=g("paint","fill-pattern",h,void 0);T(x,!0);let R=typeof S==="string"?gt(e,S)?.icon:void 0,N=R&&typeof S==="string"&&Mo(e,S);if(R&&N){let W=o.createPattern(N,"repeat");if(W)W.setTransform(new DOMMatrix().scale(f/(R.pixelRatio??1))),o.globalAlpha=k,o.fillStyle=W,o.fill("evenodd"),o.globalAlpha=1}else{o.fillStyle=pe(g("paint","fill-color",h,"#000"),k),o.fill("evenodd");let W=g("paint","fill-outline-color",h,void 0);if(W!==void 0)o.strokeStyle=pe(W,k),o.lineWidth=f,o.setLineDash([]),o.stroke()}p=!0}else if(y.type==="line"&&x.type!==1){let k=Number(g("paint","line-width",h,1));if(k<=0)continue;let S=Number(g("paint","line-gap-width",h,0));o.strokeStyle=pe(g("paint","line-color",h,"#000"),Number(g("paint","line-opacity",h,1))),o.lineWidth=(S>0?S+2*k:k)*f,o.lineCap=_o(g("layout","line-cap",h,"butt")),o.lineJoin=Ao(g("layout","line-join",h,"miter"));let R=g("paint","line-dasharray",h,void 0);o.setLineDash(Array.isArray(R)?R.map((N)=>Number(N)*k*f):[]),T(x,x.type===3),o.stroke(),p=!0}else if(y.type==="circle"&&x.type===1){let k=Number(g("paint","circle-radius",h,5))*f;o.fillStyle=pe(g("paint","circle-color",h,"#000"),Number(g("paint","circle-opacity",h,1)));let S=Number(g("paint","circle-stroke-width",h,0))*f;o.strokeStyle=pe(g("paint","circle-stroke-color",h,"#000"),Number(g("paint","circle-stroke-opacity",h,1))),o.lineWidth=S;for(let R of x.geometry)for(let N=0;N+1<R.length;N+=2)if(o.beginPath(),o.arc(((R[N]??0)-b)*M,((R[N+1]??0)-w)*M,k,0,2*Math.PI),o.fill(),S>0)o.stroke();p=!0}}}if(!p&&!n)return null;return vo(r,o,_)};var Cn=async(e,t)=>{let{z:n,tiles:r,bounds:o,width:s,height:a,iterations:i,module:c,priority:l,id:u}=t,[d,f,p,_]=o,y=[],A=[],m=[],M=2**n;for(let b=0;b+1<r.length;b+=2){let w=r[b]??0,T=(w%M+M)%M,v=(w-T)/M,g=await tt(e,{z:n,x:T,y:r[b+1]??0,id:u,priority:l});if(J.has(u))throw Error("aborted");if(!g)continue;let{points:x,ringStart:h,polygonStart:k}=g.arrays;for(let S=0;S+1<k.length;S++){let[R,N]=[k[S]??0,k[S+1]??0],W=h[R]??0,B=h[N]??0,[P,U,I,F]=[1/0,1/0,-1/0,-1/0];for(let E=W;E<B;E++){let[C,V]=[(x[E*2]??0)+v,x[E*2+1]??0];P=Math.min(P,C),U=Math.min(U,V),I=Math.max(I,C),F=Math.max(F,V)}if(I<d||P>p||F<f||U>_)continue;m.push(A.length);for(let E=R;E<N;E++){A.push(y.length/2);for(let C=h[E]??0;C<(h[E+1]??0);C++)y.push(((x[C*2]??0)+v-d)/(p-d)*s,((x[C*2+1]??0)-f)/(_-f)*a)}}}return A.push(y.length/2),m.push(A.length-1),Zt({points:Float64Array.from(y),ringStart:Uint32Array.from(A),polygonStart:Uint32Array.from(m)},s,a,i,c)};var St=new Map,To={},Wn=Tt(),ue=(e,t=[])=>self.postMessage(e,t),Eo=({fills:e,lines:t,circles:n,styles:r,sublayer:o,mesh:s})=>[e.points,e.ringStart,e.polygonStart,e.feature,e.fillStart,e.roofs,e.roofHeights,e.roofOutlines,e.roofOutlineStart,t.points,t.start,t.feature,t.lineStart,n?.points,n?.feature,n?.circleStart,r,o,s?.vertices,s?.indices,s?.fillRanges,s?.pieces,s?.lineTable,s?.lineRanges,s?.blocks,s?.blockIndices,s?.blockRanges,s?.bounds].flatMap((a)=>a?[a.buffer]:[]),Io={render:async(e,t)=>{let n=await Un(e,t);return n?[{image:n},[n]]:void 0},labels:async(e,t)=>[{labels:await mn(e,t)},[]],polygons:async(e,t)=>{let n=await tt(e,t);if(!n)return;let{points:r,ringStart:o,polygonStart:s,feature:a}=n.arrays;return[{polygons:n},[r.buffer,o.buffer,s.buffer,a.buffer]]},trees:async(e,t)=>{let n=await dn(e,t);return n&&[{trees:n},[n.buffer]]},furniture:async(e,t)=>{let n=await yn(e,t);return n&&[{furniture:n},[n.buffer]]},lamps:async(e,t)=>{let n=await Ln(e,t);return n&&[{lamps:n},[n.buffer]]},street:async(e,t)=>{let n=await Cn(e,t);return[{street:n},[n.eastU,n.eastV,n.northU,n.northV].map((r)=>r.buffer)]},vectors:async(e,t)=>{if(t.styles){let a=await Fn(e,t);return a&&[a,[a.styles.buffer]]}let n=await Nn(e,t);if(!n)return;let r=Uint8Array.from(e.layers,(a)=>je(a)==="extrusion"?1:0),o=await On()?Pn(n,r,t.prism===!0):void 0,s=o?{...n,mesh:o}:n;return[{vectors:s},Eo(s)]}},Fo=(e,t,n)=>Io[t](e,n);self.onmessage=async({data:e})=>{if(e.type==="headers"){Rt(e.rules);return}if(e.type==="tess"){we.url=e.url;return}if(e.type==="init"){if(e.workers!==void 0)Oe.capacity=an(e.workers);Pe.set(e.key,{tiles:e.tiles,maxzoom:e.maxzoom,layers:e.layers,rasters:e.rasters??{},sprites:e.sprites??[],patterns:new Map});return}if(e.type==="drop"){Pe.get(e.key)?.sprites.forEach((t)=>{t.image.close()}),Pe.delete(e.key);return}if(e.type==="abort"){if(Ye.has(e.id))J.add(e.id);St.get(e.id)?.abort();return}if(e.type==="heights"||e.type==="reproject"||e.type==="grids"){await Oo(e);return}Ye.add(e.id);try{let t=Pe.get(e.key);if(!t)throw Error(`isard: no renderer ${e.key}`);let n=await Fo(t,e.type,e);if(n)ue({id:e.id,...n[0]},n[1]);else ue({id:e.id,missing:!0})}catch(t){ue({id:e.id,error:String(t)})}finally{Ye.delete(e.id),J.delete(e.id)}};var No=async(e,t)=>(await kt(e,oe(e,{signal:t}))).arrayBuffer(),Oo=async(e)=>{let t=new AbortController;St.set(e.id,t);try{if(e.type==="grids"){let{module:n,url:r,bytes:o}=e,s=o??(r?await No(r,t.signal):new ArrayBuffer(0)),{grids:a,values:i}=await Xt(new Uint8Array(s),n);ue({id:e.id,grids:a,values:i},i.map((c)=>c.buffer))}else if(e.type==="heights"){let n=await Nt(e.url,e.encoding,e.floor,t.signal,To);if(n)ue({id:e.id,heights:n},[n.buffer]);else ue({id:e.id,missing:!0})}else{Wn.cache.capacity=e.cached;let n=await Wn.draw(e.job,t.signal);if(n)ue({id:e.id,image:n},[n]);else ue({id:e.id,missing:!0})}}catch(n){ue({id:e.id,error:String(n)})}finally{St.delete(e.id)}};
2
2
 
3
- //# debugId=13EDD9526651E7CC64756E2164756E21
3
+ //# debugId=8C29933A21BE860464756E2164756E21
4
4
  //# sourceMappingURL=basemap.worker.js.map