isard 1.0.0 → 1.2.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 (268) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/dist/{basemaps.d.ts → basemap/basemaps.d.ts} +3 -3
  3. package/dist/{basemaps.js → basemap/basemaps.js} +3 -3
  4. package/dist/basemap/basemaps.js.map +1 -0
  5. package/dist/{grid.d.ts → basemap/grid.d.ts} +6 -6
  6. package/dist/{grid.js → basemap/grid.js} +61 -67
  7. package/dist/basemap/grid.js.map +1 -0
  8. package/dist/{mvt.d.ts → basemap/mvt.d.ts} +1 -1
  9. package/dist/{mvt.js → basemap/mvt.js} +6 -6
  10. package/dist/basemap/mvt.js.map +1 -0
  11. package/dist/{pmtiles.d.ts → basemap/pmtiles.d.ts} +16 -10
  12. package/dist/{pmtiles.js → basemap/pmtiles.js} +41 -33
  13. package/dist/basemap/pmtiles.js.map +1 -0
  14. package/dist/{resample.d.ts → basemap/resample.d.ts} +11 -2
  15. package/dist/{resample.js → basemap/resample.js} +18 -16
  16. package/dist/basemap/resample.js.map +1 -0
  17. package/dist/{terrain.d.ts → basemap/terrain.d.ts} +3 -3
  18. package/dist/{terrain.js → basemap/terrain.js} +7 -7
  19. package/dist/basemap/terrain.js.map +1 -0
  20. package/dist/{vectorstyle.d.ts → basemap/vectorstyle.d.ts} +12 -10
  21. package/dist/{vectorstyle.js → basemap/vectorstyle.js} +129 -111
  22. package/dist/basemap/vectorstyle.js.map +1 -0
  23. package/dist/{vectortiles.d.ts → basemap/vectortiles.d.ts} +18 -18
  24. package/dist/{vectortiles.js → basemap/vectortiles.js} +157 -109
  25. package/dist/basemap/vectortiles.js.map +1 -0
  26. package/dist/{wmts.d.ts → basemap/wmts.d.ts} +3 -3
  27. package/dist/{wmts.js → basemap/wmts.js} +19 -14
  28. package/dist/basemap/wmts.js.map +1 -0
  29. package/dist/basemap.worker.js +2 -2
  30. package/dist/basemap.worker.js.map +14 -13
  31. package/dist/bind/layers.d.ts +46 -0
  32. package/dist/bind/layers.js +154 -0
  33. package/dist/bind/layers.js.map +1 -0
  34. package/dist/{crs.d.ts → data/crs.d.ts} +11 -11
  35. package/dist/{crs.js → data/crs.js} +38 -34
  36. package/dist/data/crs.js.map +1 -0
  37. package/dist/{gpx.d.ts → data/gpx.d.ts} +2 -2
  38. package/dist/{gpx.js → data/gpx.js} +20 -20
  39. package/dist/data/gpx.js.map +1 -0
  40. package/dist/{kml.d.ts → data/kml.d.ts} +2 -2
  41. package/dist/{kml.js → data/kml.js} +42 -39
  42. package/dist/data/kml.js.map +1 -0
  43. package/dist/{topojson.d.ts → data/topojson.d.ts} +2 -2
  44. package/dist/{topojson.js → data/topojson.js} +15 -10
  45. package/dist/data/topojson.js.map +1 -0
  46. package/dist/{xml.d.ts → data/xml.d.ts} +5 -5
  47. package/dist/{xml.js → data/xml.js} +19 -18
  48. package/dist/data/xml.js.map +1 -0
  49. package/dist/decoder.worker.js +4 -4
  50. package/dist/decoder.worker.js.map +7 -7
  51. package/dist/{decoders.d.ts → engine/decoders.d.ts} +3 -3
  52. package/dist/{decoders.js → engine/decoders.js} +28 -25
  53. package/dist/engine/decoders.js.map +1 -0
  54. package/dist/{loader.d.ts → engine/loader.d.ts} +1 -1
  55. package/dist/{loader.js → engine/loader.js} +17 -14
  56. package/dist/engine/loader.js.map +1 -0
  57. package/dist/{protocol.d.ts → engine/protocol.d.ts} +1 -1
  58. package/dist/engine/protocol.js +3 -0
  59. package/dist/engine/protocol.js.map +1 -0
  60. package/dist/{requests.d.ts → engine/requests.d.ts} +1 -1
  61. package/dist/{requests.js → engine/requests.js} +19 -16
  62. package/dist/engine/requests.js.map +1 -0
  63. package/dist/engine-loader.d.ts +13 -9
  64. package/dist/engine-loader.js +30 -30
  65. package/dist/engine-loader.js.map +1 -1
  66. package/dist/formats.d.ts +3 -3
  67. package/dist/formats.js +3 -3
  68. package/dist/formats.js.map +1 -1
  69. package/dist/geoplateforme.d.ts +13 -13
  70. package/dist/geoplateforme.js +23 -21
  71. package/dist/geoplateforme.js.map +1 -1
  72. package/dist/index.d.ts +30 -29
  73. package/dist/index.js +18 -18
  74. package/dist/index.js.map +1 -1
  75. package/dist/isard_bg.wasm +0 -0
  76. package/dist/isard_core_bg.wasm +0 -0
  77. package/dist/isard_points_bg.wasm +0 -0
  78. package/dist/{extrusions.d.ts → layers/extrusions.d.ts} +1 -1
  79. package/dist/{extrusions.js → layers/extrusions.js} +10 -5
  80. package/dist/layers/extrusions.js.map +1 -0
  81. package/dist/{features.d.ts → layers/features.d.ts} +10 -10
  82. package/dist/{features.js → layers/features.js} +44 -45
  83. package/dist/layers/features.js.map +1 -0
  84. package/dist/{glyphs.d.ts → layers/glyphs.d.ts} +6 -6
  85. package/dist/{glyphs.js → layers/glyphs.js} +45 -41
  86. package/dist/layers/glyphs.js.map +1 -0
  87. package/dist/{icons.d.ts → layers/icons.d.ts} +10 -10
  88. package/dist/{icons.js → layers/icons.js} +84 -69
  89. package/dist/layers/icons.js.map +1 -0
  90. package/dist/{layers.d.ts → layers/layers.d.ts} +9 -4
  91. package/dist/{layers.js → layers/layers.js} +35 -31
  92. package/dist/layers/layers.js.map +1 -0
  93. package/dist/{panoramas.d.ts → layers/panoramas.d.ts} +3 -3
  94. package/dist/{panoramas.js → layers/panoramas.js} +54 -43
  95. package/dist/layers/panoramas.js.map +1 -0
  96. package/dist/{pointclouds.d.ts → layers/pointclouds.d.ts} +5 -5
  97. package/dist/{pointclouds.js → layers/pointclouds.js} +26 -34
  98. package/dist/layers/pointclouds.js.map +1 -0
  99. package/dist/{symbols.d.ts → layers/symbols.d.ts} +3 -3
  100. package/dist/{symbols.js → layers/symbols.js} +69 -72
  101. package/dist/layers/symbols.js.map +1 -0
  102. package/dist/map/basemap-layers.d.ts +26 -0
  103. package/dist/map/basemap-layers.js +61 -0
  104. package/dist/map/basemap-layers.js.map +1 -0
  105. package/dist/map/canvas.d.ts +17 -0
  106. package/dist/map/canvas.js +56 -0
  107. package/dist/map/canvas.js.map +1 -0
  108. package/dist/map/checks.d.ts +11 -0
  109. package/dist/map/checks.js +39 -0
  110. package/dist/map/checks.js.map +1 -0
  111. package/dist/map/credits.d.ts +17 -0
  112. package/dist/map/credits.js +34 -0
  113. package/dist/map/credits.js.map +1 -0
  114. package/dist/map/engine-settings.d.ts +15 -0
  115. package/dist/map/engine-settings.js +45 -0
  116. package/dist/map/engine-settings.js.map +1 -0
  117. package/dist/map/engines.d.ts +41 -0
  118. package/dist/map/engines.js +77 -0
  119. package/dist/map/engines.js.map +1 -0
  120. package/dist/map/events.d.ts +14 -0
  121. package/dist/map/events.js +46 -0
  122. package/dist/map/events.js.map +1 -0
  123. package/dist/map/frame-loop.d.ts +61 -0
  124. package/dist/map/frame-loop.js +139 -0
  125. package/dist/map/frame-loop.js.map +1 -0
  126. package/dist/map/hover-pick.d.ts +30 -0
  127. package/dist/map/hover-pick.js +56 -0
  128. package/dist/map/hover-pick.js.map +1 -0
  129. package/dist/map/layer-spec.d.ts +42 -0
  130. package/dist/map/layer-spec.js +34 -0
  131. package/dist/map/layer-spec.js.map +1 -0
  132. package/dist/map/layer-stack.d.ts +36 -0
  133. package/dist/map/layer-stack.js +101 -0
  134. package/dist/map/layer-stack.js.map +1 -0
  135. package/dist/map/overlay-host.d.ts +36 -0
  136. package/dist/map/overlay-host.js +101 -0
  137. package/dist/map/overlay-host.js.map +1 -0
  138. package/dist/map/panorama-host.d.ts +5 -0
  139. package/dist/map/panorama-host.js +32 -0
  140. package/dist/map/panorama-host.js.map +1 -0
  141. package/dist/map/raster-source.d.ts +11 -0
  142. package/dist/map/raster-source.js +26 -0
  143. package/dist/map/raster-source.js.map +1 -0
  144. package/dist/map/symbol-atlases.d.ts +26 -0
  145. package/dist/map/symbol-atlases.js +59 -0
  146. package/dist/map/symbol-atlases.js.map +1 -0
  147. package/dist/map/viewshed.d.ts +5 -0
  148. package/dist/map/viewshed.js +28 -0
  149. package/dist/map/viewshed.js.map +1 -0
  150. package/dist/map/workers.d.ts +46 -0
  151. package/dist/map/workers.js +73 -0
  152. package/dist/map/workers.js.map +1 -0
  153. package/dist/map.d.ts +46 -127
  154. package/dist/map.js +183 -698
  155. package/dist/map.js.map +1 -1
  156. package/dist/projections.d.ts +3 -3
  157. package/dist/projections.js +2 -2
  158. package/dist/projections.js.map +1 -1
  159. package/dist/react/Control.d.ts +11 -0
  160. package/dist/react/Control.js +18 -0
  161. package/dist/react/Control.js.map +1 -0
  162. package/dist/react/CustomLayer.d.ts +11 -0
  163. package/dist/react/CustomLayer.js +30 -0
  164. package/dist/react/CustomLayer.js.map +1 -0
  165. package/dist/react/IsardMap.d.ts +43 -0
  166. package/dist/react/IsardMap.js +146 -0
  167. package/dist/react/IsardMap.js.map +1 -0
  168. package/dist/react/Layer.d.ts +42 -0
  169. package/dist/react/Layer.js +74 -0
  170. package/dist/react/Layer.js.map +1 -0
  171. package/dist/react/Marker.d.ts +24 -0
  172. package/dist/react/Marker.js +53 -0
  173. package/dist/react/Marker.js.map +1 -0
  174. package/dist/react/Panel.d.ts +11 -0
  175. package/dist/react/Panel.js +37 -0
  176. package/dist/react/Panel.js.map +1 -0
  177. package/dist/react/Popup.d.ts +18 -0
  178. package/dist/react/Popup.js +60 -0
  179. package/dist/react/Popup.js.map +1 -0
  180. package/dist/react/Swipe.d.ts +9 -0
  181. package/dist/react/Swipe.js +41 -0
  182. package/dist/react/Swipe.js.map +1 -0
  183. package/dist/react/Viewshed.d.ts +5 -0
  184. package/dist/react/Viewshed.js +28 -0
  185. package/dist/react/Viewshed.js.map +1 -0
  186. package/dist/react/context.d.ts +32 -0
  187. package/dist/react/context.js +20 -0
  188. package/dist/react/context.js.map +1 -0
  189. package/dist/react/index.d.ts +26 -0
  190. package/dist/react/index.js +22 -0
  191. package/dist/react/index.js.map +1 -0
  192. package/dist/settings.d.ts +6 -10
  193. package/dist/settings.js +19 -17
  194. package/dist/settings.js.map +1 -1
  195. package/dist/types.d.ts +8 -8
  196. package/dist/types.js +1 -0
  197. package/dist/types.js.map +1 -1
  198. package/dist/{controls.d.ts → ui/controls.d.ts} +1 -1
  199. package/dist/{controls.js → ui/controls.js} +6 -4
  200. package/dist/ui/controls.js.map +1 -0
  201. package/dist/{interaction.d.ts → ui/interaction.d.ts} +9 -5
  202. package/dist/{interaction.js → ui/interaction.js} +9 -8
  203. package/dist/ui/interaction.js.map +1 -0
  204. package/dist/{overlay.d.ts → ui/overlay.d.ts} +2 -2
  205. package/dist/{overlay.js → ui/overlay.js} +18 -20
  206. package/dist/ui/overlay.js.map +1 -0
  207. package/dist/{style.d.ts → ui/style.d.ts} +1 -1
  208. package/dist/{style.js → ui/style.js} +2 -2
  209. package/dist/ui/style.js.map +1 -0
  210. package/dist/{animation.d.ts → util/animation.d.ts} +9 -5
  211. package/dist/{animation.js → util/animation.js} +6 -6
  212. package/dist/util/animation.js.map +1 -0
  213. package/dist/{color.d.ts → util/color.d.ts} +1 -1
  214. package/dist/{color.js → util/color.js} +14 -16
  215. package/dist/util/color.js.map +1 -0
  216. package/dist/{geo.d.ts → util/geo.d.ts} +6 -6
  217. package/dist/{geo.js → util/geo.js} +12 -12
  218. package/dist/util/geo.js.map +1 -0
  219. package/dist/util/guards.d.ts +7 -0
  220. package/dist/util/guards.js +8 -0
  221. package/dist/util/guards.js.map +1 -0
  222. package/dist/util/lru.js.map +1 -0
  223. package/dist/wasm/isard.d.ts +168 -0
  224. package/dist/wasm/isard.js +146 -0
  225. package/dist/wasm/isard_core.d.ts +144 -0
  226. package/dist/wasm/isard_core.js +122 -0
  227. package/dist/{basemap.worker.d.ts → workers/basemap.worker.d.ts} +17 -7
  228. package/dist/workers/basemap.worker.js +658 -0
  229. package/dist/workers/basemap.worker.js.map +1 -0
  230. package/package.json +24 -1
  231. package/vite.js +1 -1
  232. package/dist/animation.js.map +0 -1
  233. package/dist/basemaps.js.map +0 -1
  234. package/dist/color.js.map +0 -1
  235. package/dist/controls.js.map +0 -1
  236. package/dist/crs.js.map +0 -1
  237. package/dist/decoders.js.map +0 -1
  238. package/dist/extrusions.js.map +0 -1
  239. package/dist/features.js.map +0 -1
  240. package/dist/geo.js.map +0 -1
  241. package/dist/glyphs.js.map +0 -1
  242. package/dist/gpx.js.map +0 -1
  243. package/dist/grid.js.map +0 -1
  244. package/dist/icons.js.map +0 -1
  245. package/dist/interaction.js.map +0 -1
  246. package/dist/kml.js.map +0 -1
  247. package/dist/layers.js.map +0 -1
  248. package/dist/loader.js.map +0 -1
  249. package/dist/lru.js.map +0 -1
  250. package/dist/mvt.js.map +0 -1
  251. package/dist/overlay.js.map +0 -1
  252. package/dist/panoramas.js.map +0 -1
  253. package/dist/pmtiles.js.map +0 -1
  254. package/dist/pointclouds.js.map +0 -1
  255. package/dist/protocol.js +0 -2
  256. package/dist/protocol.js.map +0 -1
  257. package/dist/requests.js.map +0 -1
  258. package/dist/resample.js.map +0 -1
  259. package/dist/style.js.map +0 -1
  260. package/dist/symbols.js.map +0 -1
  261. package/dist/terrain.js.map +0 -1
  262. package/dist/topojson.js.map +0 -1
  263. package/dist/vectorstyle.js.map +0 -1
  264. package/dist/vectortiles.js.map +0 -1
  265. package/dist/wmts.js.map +0 -1
  266. package/dist/xml.js.map +0 -1
  267. /package/dist/{lru.d.ts → util/lru.d.ts} +0 -0
  268. /package/dist/{lru.js → util/lru.js} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vectortiles.js","sourceRoot":"","sources":["../../src/basemap/vectortiles.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Vector basemaps from a MapLibre style (OpenFreeMap's Positron by default): the fills, lines, circles and raster\n * layers drawn tile by tile in workers into the raster pool, so that they lie on the relief like any basemap and\n * composite with the hillshade in one pass; and the labels of the style's symbol layers in a symbol layer of their own,\n * kept above the application's layers (as MapLibre's `beforeId: firstSymbol` does), listed by the workers, shaped in\n * the page once per vector tile, placed by the engine.\n *\n * Any subset of the style can be drawn on its own raster layer (`raster({ layers })`), at its own place in the stack:\n * rivers from the basemap's data over a flood layer, for instance, restyled with `extraLayers`.\n */\n\nimport { headerRules, onHeaderRules, withHeaders } from '../engine/requests.ts';\nimport { assetUrl } from '../engine-loader.ts';\nimport { IGN_ATTRIBUTION } from '../geoplateforme.ts';\nimport type { Feature, Size } from '../layers/features.ts';\nimport { type LoadedSprite, loadSprites, readPixels } from '../layers/icons.ts';\nimport type { Layer, RasterLayer } from '../layers/layers.ts';\nimport type { SymbolLayer } from '../layers/symbols.ts';\nimport type { GeoMap } from '../map.ts';\nimport type { RasterOptions } from '../types.ts';\nimport type { Anchor } from '../ui/overlay.ts';\nimport { mercatorX, mercatorY } from '../util/geo.ts';\nimport { isRecord } from '../util/guards.ts';\nimport { Lru } from '../util/lru.ts';\nimport type { Camera } from '../wasm/isard.js';\nimport type { BasemapRequest, BasemapResponse, BasemapWork, Priority, Sprite } from '../workers/basemap.worker.ts';\nimport { OPENFREEMAP_ATTRIBUTION } from './basemaps.ts';\nimport { pmtiles, pmtilesUrl } from './pmtiles.ts';\nimport { type Job, SOURCE_CACHE } from './resample.ts';\nimport type { PngEncoding } from './terrain.ts';\nimport {\n isStyle,\n type Json,\n type LabelCandidate,\n labelFont,\n type RasterSource,\n type Style,\n type StyleLayer,\n} from './vectorstyle.ts';\n\n/** OpenFreeMap's styles: OpenStreetMap data in the OpenMapTiles schema, worldwide, free and without a key */\nexport const OPENFREEMAP_STYLES = {\n positron: 'https://tiles.openfreemap.org/styles/positron',\n liberty: 'https://tiles.openfreemap.org/styles/liberty',\n bright: 'https://tiles.openfreemap.org/styles/bright',\n} as const;\n\n/** PLAN.IGN vector styles of the Géoplateforme (France) */\nexport const PLAN_STYLES = {\n standard: 'https://data.geopf.fr/annexes/ressources/vectorTiles/styles/PLAN.IGN/standard.json',\n grey: 'https://data.geopf.fr/annexes/ressources/vectorTiles/styles/PLAN.IGN/gris.json',\n} as const;\n\n/** Vector basemaps by name (see `BasemapName`) */\nexport const VECTOR_BASEMAPS = {\n 'osm-positron': OPENFREEMAP_STYLES.positron,\n 'osm-liberty': OPENFREEMAP_STYLES.liberty,\n 'osm-bright': OPENFREEMAP_STYLES.bright,\n 'ign-plan-vector': PLAN_STYLES.standard,\n 'ign-plan-grey-vector': PLAN_STYLES.grey,\n} as const;\n\nexport interface VectorTilesOptions {\n /** A style URL or object (default OpenFreeMap's Positron) */\n style?: string | Style;\n /** Workers drawing the tiles (default cores - 1, 1 to 4). The vector tiles of a map share its workers (and their\n * decoded tiles); another count gives these tiles workers of their own */\n workers?: number;\n /** Where to load the worker from, when a bundler does not resolve the default URL (default the map's\n * `basemapWorkerUrl`); another URL than the map's gives these tiles workers of their own */\n workerUrl?: string | URL;\n /** Credits of the tiles, shown while its raster layers are on the map (default: OpenFreeMap's for its styles, the\n * IGN's for PLAN.IGN's) */\n attribution?: string;\n}\n\n/** The credits of a known style: OpenFreeMap's, PLAN.IGN's */\nexport const styleAttribution = (style: string | Style): string | undefined => {\n if (typeof style !== 'string') return undefined;\n if (Object.values(OPENFREEMAP_STYLES).some((s) => s === style)) return OPENFREEMAP_ATTRIBUTION;\n if (Object.values(PLAN_STYLES).some((s) => s === style)) return IGN_ATTRIBUTION;\n\n return undefined;\n};\n\n/** Text or icon size of a style (a number, legacy stops, or the stops of a zoom expression made by the worker) as a\n * size for the symbol layer */\nexport const size = (value: Json, fallback = 16): Size => {\n const stop = (s: Json): [number, number] => {\n const [z, v] = Array.isArray(s) ? s : [];\n\n return [Number(z), Number(v)];\n };\n\n if (typeof value === 'number') return value;\n if (Array.isArray(value) && value.length > 0 && value.every(Array.isArray)) return value.map(stop);\n if (isRecord(value) && Array.isArray(value.stops)) return value.stops.map(stop);\n\n return fallback;\n};\n\n/** The anchors of the symbol layer */\nconst ANCHORS: ReadonlySet<string> = new Set<Anchor>([\n 'center',\n 'top',\n 'bottom',\n 'left',\n 'right',\n 'top-left',\n 'top-right',\n 'bottom-left',\n 'bottom-right',\n]);\n\nconst isAnchor = (value: string | undefined): value is Anchor => value !== undefined && ANCHORS.has(value);\n\n/** A style's anchor (`text-anchor`, `icon-anchor`) for the symbol layer: `center` if it is none */\nconst anchor = (value: string | undefined): Anchor => (isAnchor(value) ? value : 'center');\n\n/** Fetches a JSON document (a style, a TileJSON) */\nconst json = async (url: string): Promise<unknown> => {\n const response = await fetch(url, withHeaders(url));\n\n if (!response.ok) throw new Error(`${url}: ${response.status}`);\n\n return response.json();\n};\n\n/** A style fetched: a MapLibre style, or an error */\nconst fetchStyle = async (url: string): Promise<Style> => {\n const style = await json(url);\n\n if (!isStyle(style)) throw new Error(`${url}: not a MapLibre style`);\n\n return style;\n};\n\n/** What a basemap reads of a TileJSON */\ninterface TileJson {\n tiles: string[];\n maxzoom?: number;\n}\n\nconst isTileJson = (value: unknown): value is TileJson =>\n isRecord(value) &&\n Array.isArray(value.tiles) &&\n value.tiles.every((t) => typeof t === 'string') &&\n (value.maxzoom === undefined || typeof value.maxzoom === 'number');\n\n/** A TileJSON fetched, or an error */\nconst fetchTileJson = async (url: string): Promise<TileJson> => {\n const tilejson = await json(url);\n\n if (!isTileJson(tilejson)) throw new Error(`${url}: not a TileJSON`);\n\n return tilejson;\n};\n\n/**\n * A style source's tiles and deepest level: a `pmtiles://` archive (its `url`, or a `tiles` template) read for its\n * header, its tiles then named `pmtiles://<absolute archive URL>/{z}/{x}/{y}` for the workers; other sources as they are\n */\nconst resolveSource = async (source: Style['sources'][string]): Promise<{ tiles?: string[]; maxzoom?: number }> => {\n const given = source.url ?? source.tiles?.[0] ?? '';\n const archive = pmtilesUrl(given.replace(/\\/\\{z\\}\\/\\{x\\}\\/\\{y\\}$/, ''));\n\n if (!archive)\n return {\n ...(source.tiles ? { tiles: source.tiles } : {}),\n ...(source.maxzoom === undefined ? {} : { maxzoom: source.maxzoom }),\n };\n\n const header = await pmtiles(archive).header();\n\n return { tiles: [`pmtiles://${archive}/{z}/{x}/{y}`], maxzoom: source.maxzoom ?? header.maxZoom };\n};\n\n/** Pause before the labels of tiles that failed are asked for again, when no move brings an update (ms) */\nconst RETRY_LABELS_MS = 3000;\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 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 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\n worker.onerror = (event) => {\n event.preventDefault();\n this.fail(worker, `the vector basemap worker ${url} failed${event.message ? `: ${event.message}` : ''}`);\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 */\n private fail(worker: PoolWorker, message: string): void {\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\n /** The worker of a vector tile */\n worker(vz: number, vx: number, vy: number): PoolWorker {\n return this.workers[workerIndex(vz, vx, vy, this.workers.length)] ?? this.workers[0];\n }\n\n /** Sends a message to every worker (a renderer, or its removal) */\n broadcast(message: Extract<BasemapRequest, { type: 'init' } | { type: 'drop' }>): 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 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 /** 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\n/** The labels of a vector tile: features by style layer (its index in the style), the higher layers first */\ntype TileLabels = [layer: number, features: Feature<LabelCandidate>[]][];\n\n/** A tile's label candidates as features, by style layer */\nexport const tileLabels = (candidates: readonly LabelCandidate[]): TileLabels => {\n const byLayer = new Map<number, Feature<LabelCandidate>[]>();\n\n candidates.forEach((p) => {\n const feature: Feature<LabelCandidate> = {\n type: 'Feature',\n properties: p,\n geometry: p.along\n ? {\n type: 'LineString',\n coordinates: [\n [p.lon - p.along[0] / 2, p.lat - p.along[1] / 2],\n [p.lon + p.along[0] / 2, p.lat + p.along[1] / 2],\n ],\n }\n : { type: 'Point', coordinates: [p.lon, p.lat] },\n };\n const list = byLayer.get(p.layer);\n\n if (list) list.push(feature);\n else byLayer.set(p.layer, [feature]);\n });\n\n return [...byLayer].sort((a, b) => b[0] - a[0]);\n};\n\nexport class VectorTiles {\n private readonly pool: BasemapWorkers;\n /** The pool is this instance's own (a worker count or URL other than the map's): stopped with it */\n private readonly ownPool: boolean;\n /** Prefix of its renderer keys in the pool's workers */\n private readonly namespace: string;\n private destroyed = false;\n private keys = 0;\n /** Renderers sent to the workers, dropped on destroy */\n private readonly renderers: string[] = [];\n private readonly cleanup: (() => void)[] = [];\n /** Credits of its raster layers */\n private readonly attribution: string | undefined;\n /** Its raster and label layers, removed with it */\n private readonly layers: Layer[] = [];\n /** Its first raster layer: the ground its labels follow */\n private ground: RasterLayer | undefined;\n /** The style once loaded, with its source resolved */\n readonly ready: Promise<{ style: Style; tiles: string; maxzoom: number; rasters: Record<string, RasterSource> }>;\n\n /**\n * Its workers are the map's (shared by every `VectorTiles` of the map, a vector tile decoded once for all of them),\n * unless `workers` or `workerUrl` asks for others than the map's: then it has workers of its own\n */\n constructor(\n private readonly map: GeoMap,\n options: VectorTilesOptions = {},\n ) {\n const { pool, own } = map.basemapWorkers(options.workers, options.workerUrl);\n\n this.pool = pool;\n this.ownPool = own;\n this.namespace = pool.namespace();\n\n const style = options.style ?? OPENFREEMAP_STYLES.positron;\n\n this.attribution = options.attribution ?? styleAttribution(style);\n this.ready = this.load(style);\n // Reported once here; `ready`, the raster tiles and the labels fail with it\n this.ready.catch((error: unknown) => {\n if (!this.destroyed) console.warn('isard: vector tiles', error);\n });\n }\n\n private async load(input: string | Style) {\n const style = typeof input === 'string' ? await fetchStyle(input) : input;\n const [name, source] = Object.entries(style.sources).find(([, s]) => s.type === 'vector') ?? [];\n\n if (!name || !source) throw new Error('the style has no vector source');\n\n const resolved = await resolveSource(source);\n const tilejson = !resolved.tiles && source.url ? await fetchTileJson(source.url) : undefined;\n const tiles = tilejson === undefined ? resolved.tiles : tilejson.tiles;\n const maxzoom = resolved.maxzoom ?? tilejson?.maxzoom;\n const template = tiles?.[0];\n\n if (!template) throw new Error(`source ${name} has no tiles`);\n\n // Its raster sources of tiles, drawn into the same images (the shaded relief of a style at low zoom)\n const rasters: Record<string, RasterSource> = {};\n\n for (const [key, s] of Object.entries(style.sources)) {\n if (s.type !== 'raster') continue;\n\n const r = await resolveSource(s);\n const url = r.tiles?.[0];\n\n if (url) rasters[key] = { tiles: url, maxzoom: r.maxzoom ?? 22, tileSize: s.tileSize ?? 512 };\n }\n\n // Only the layers of those sources (and the background); other types (hillshade, heatmap…) are left out. The\n // application's style object stays as it is\n const layers = style.layers.filter(\n (l) =>\n l.type === 'background' ||\n (l.source === name && l.type !== 'raster') ||\n (l.type === 'raster' && l.source !== undefined && rasters[l.source] !== undefined),\n );\n\n return { style: { ...style, layers }, tiles: template, maxzoom: maxzoom ?? 14, rasters };\n }\n\n /** The fonts of the style's labels, for its glyphs (the first of each `text-font`, as the workers take it) */\n private static fonts(style: Style): string[] {\n const fonts = new Set<string>();\n\n style.layers.forEach((layer) => {\n const font = layer.layout?.['text-font'];\n\n if (layer.type === 'symbol' && Array.isArray(font) && typeof font[0] === 'string') fonts.add(labelFont(font[0]));\n });\n\n return [...fonts];\n }\n\n /** The style's sprites (their JSON and their images), loaded once, for the fill patterns and the icons */\n private sprites: Promise<LoadedSprite[]> | undefined;\n\n private loadSprites(sprite: Style['sprite']): Promise<LoadedSprite[]> {\n this.sprites ??= loadSprites(sprite).catch(() => []);\n\n return this.sprites;\n }\n\n /** Prefix of the names of its sprites' images among the map's icons */\n private get iconPrefix(): string {\n return `${this.namespace}/`;\n }\n\n private request(vz: number, vx: number, vy: number, work: BasemapWork, signal?: AbortSignal) {\n if (this.destroyed) return Promise.reject(new DOMException('isard: vector tiles destroyed', 'AbortError'));\n\n return this.pool.request(this.pool.worker(vz, vx, vy), work, this, signal);\n }\n\n /** Sends a renderer of these layers to every worker; returns its key */\n private async renderer(select: (layer: StyleLayer) => boolean, extra: StyleLayer[]) {\n const { style, tiles, maxzoom, rasters } = await this.ready;\n const key = rendererKey(this.namespace, this.keys++);\n const layers = [...style.layers.filter(select), ...extra];\n const patterns = layers.some((l) => l.paint?.['fill-pattern'] !== undefined);\n // The images are downloaded once, copied to each worker\n const sprites: Sprite[] = patterns && style.sprite ? await this.loadSprites(style.sprite) : [];\n\n if (this.destroyed) throw new DOMException('isard: vector tiles destroyed', 'AbortError');\n this.pool.broadcast({ type: 'init', key, tiles, maxzoom, layers, rasters, ...(sprites.length ? { sprites } : {}) });\n this.renderers.push(key);\n\n return { key, maxzoom };\n }\n\n /**\n * A raster layer drawing the style's fills, lines and circles (or those `layers` keeps, then `extraLayers`, of the\n * same source); `size`: texture size of its tiles (512 by default: sharp lines)\n */\n raster(\n options: {\n layers?: (layer: StyleLayer) => boolean;\n extraLayers?: StyleLayer[];\n size?: number;\n opacity?: number;\n minZoom?: number;\n maxZoom?: number;\n before?: Parameters<GeoMap['addRaster']>[0]['before'];\n } = {},\n ): RasterLayer {\n const { layers = () => true, extraLayers = [], size: texture = 512, opacity = 1, before } = options;\n const drawn = (l: StyleLayer) => l.type !== 'symbol' && layers(l);\n const renderer = this.renderer(drawn, extraLayers);\n\n // Its failure is reported by `ready` and each tile\n renderer.catch(() => undefined);\n\n const loader = async (z: number, x: number, y: number, signal: AbortSignal) => {\n const { key, maxzoom } = await renderer;\n // The vector tile it is drawn from (see the worker)\n const vz = Math.max(0, Math.min(z - 1, maxzoom));\n const shift = z - vz;\n const priority = tilePriority(z, x, y, this.map.getCamera());\n const response = await this.request(\n vz,\n x >> shift,\n y >> shift,\n { type: 'render', key, z, x, y, size: texture, priority },\n signal,\n );\n\n return 'image' in response ? response.image : null;\n };\n const layer = this.map.addRaster({\n url: '',\n size: texture,\n opacity,\n minZoom: options.minZoom ?? 0,\n maxZoom: options.maxZoom ?? 20,\n loader,\n ...(this.attribution ? { attribution: this.attribution } : {}),\n ...(before ? { before } : {}),\n });\n\n this.layers.push(layer);\n this.ground ??= layer;\n\n return layer;\n }\n\n /**\n * A symbol layer with the labels of the style's symbol layers (or those `layers` keeps), updated as the view\n * moves: the labels of the vector tiles in view, the higher style layers placed first. With a raster layer of\n * the style (`raster`), the tiles follow the levels the ground is drawn at: a tilted view takes coarser tiles far\n * away, with the few labels of a lower zoom, as near the camera it takes the fine ones. Without, the tiles around\n * the center at the zoom of the view. It stays above the layers added after it unless one is moved over it.\n */\n labels(options: { layers?: (layer: StyleLayer) => boolean; maxTiles?: number } = {}): SymbolLayer<LabelCandidate> {\n const { layers = () => true, maxTiles = 36 } = options;\n const symbol = this.map.addSymbols<LabelCandidate>({\n data: [],\n text: (p) => p.text,\n font: (p) => p.font,\n size: (p) => size(p.size),\n color: (p) => p.color,\n haloColor: (p) => p.haloColor,\n haloWidth: (p) => p.haloWidth,\n anchor: (p) => anchor(p.anchor),\n offset: (p) => p.offset,\n maxWidth: (p) => p.maxWidth,\n lineHeight: (p) => p.lineHeight,\n overlap: (p) => p.overlap,\n placement: (p) => (p.textAlong ? 'line' : 'point'),\n textOptional: (p) => p.textOptional === true,\n icon: (p) => (p.icon ? this.iconPrefix + p.icon.image : ''),\n iconSize: (p) => size(p.icon?.size ?? 1, 1),\n iconAnchor: (p) => anchor(p.icon?.anchor),\n iconOffset: (p) => p.icon?.offset ?? [0, 0],\n iconRotate: (p) => p.icon?.rotate ?? 0,\n iconRotationAlignment: (p) => p.icon?.alignment ?? 'viewport',\n iconOverlap: (p) => p.icon?.overlap ?? false,\n iconOptional: (p) => p.icon?.optional ?? false,\n iconTextFit: (p) => p.icon?.fit ?? 'none',\n iconTextFitPadding: (p) => p.icon?.padding ?? [0, 0, 0, 0],\n iconColor: (p) => p.icon?.color ?? '#000',\n iconOpacity: (p) => p.icon?.opacity ?? 1,\n });\n\n this.map.keepOnTop(symbol);\n this.layers.push(symbol);\n\n const renderer = this.ready.then(async ({ style }) => {\n // The style's fonts from its own glyphs\n if (style.glyphs) this.map.glyphs.register(style.glyphs, VectorTiles.fonts(style));\n\n // Its icons from its sprites, before the first labels\n const icons = style.layers.some((l) => l.type === 'symbol' && l.layout?.['icon-image'] !== undefined);\n\n if (icons && style.sprite) {\n (await this.loadSprites(style.sprite)).forEach((sprite) => {\n if (!this.destroyed) this.map.icons.addSprite(this.iconPrefix, sprite.icons, () => readPixels(sprite.image));\n });\n }\n\n return this.renderer((l) => l.type === 'symbol' && layers(l), []);\n });\n\n renderer.catch(() => undefined);\n\n /** The labels of the tiles, as features by style layer, the higher layers first: each list is given to the symbol\n * layer as a group, shaped once while the tile is kept */\n const tiles = new Lru<string, Promise<TileLabels>>(256);\n let generation = 0;\n /** The tiles whose labels are shown */\n let shown = '';\n /** The update asked again after tiles failed */\n let retry = 0;\n const update = async () => {\n if (this.destroyed) return;\n\n const { key, maxzoom } = await renderer;\n const run = ++generation;\n const camera = this.map.getCamera();\n const zoom = Math.max(0, Math.min(Math.floor(camera.zoom), 24));\n const ground = this.ground && this.map.hasLayer(this.ground) ? this.map.engine.wantedTiles(this.ground.id) : [];\n const keys: string[] = [];\n\n if (ground.length > 0) {\n // The ground's tiles, the nearest first: a tile so many levels coarser than the finest in view has its\n // labels of a zoom as many under the view's, past the source's deepest level those of that level at the zoom\n const groundTiles = Array.from({ length: Math.ceil(ground.length / 3) }, (_, k): [number, number, number] => [\n ground[3 * k] ?? 0,\n ground[3 * k + 1] ?? 0,\n ground[3 * k + 2] ?? 0,\n ]);\n const top = groundTiles.reduce((t, [z]) => Math.max(t, z), 0);\n\n groundTiles.forEach(([z, x, y]) => {\n if (keys.length >= maxTiles) return;\n\n const at = Math.max(0, zoom - (top - z));\n const tz = Math.min(at, maxzoom, z);\n const shift = 2 ** (z - tz);\n const key = `${tz}/${Math.floor(x / shift)}/${Math.floor(y / shift)}${at > tz ? `@${at}` : ''}`;\n\n if (!keys.includes(key)) keys.push(key);\n });\n } else {\n const z = Math.min(zoom, maxzoom);\n const n = 2 ** z;\n const [west, south, east, north] = this.map.getBounds();\n const tx = (lon: number) => Math.floor(mercatorX(lon) * n);\n const ty = (lat: number) => Math.floor(mercatorY(lat) * n);\n const [cx, cy] = [mercatorX(camera.center[0]) * n, ty(camera.center[1])];\n // The tiles of the bounds, within a window around the center: a tilted view's bounds reach far, and only\n // the nearest `maxTiles` are kept anyway\n const reach = Math.ceil(Math.sqrt(maxTiles)) + 2;\n const [x0, x1] = [\n Math.max(0, tx(west), Math.floor(cx) - reach),\n Math.min(n - 1, tx(east), Math.floor(cx) + reach),\n ];\n const [y0, y1] = [\n Math.max(0, ty(north), Math.floor(cy) - reach),\n Math.min(n - 1, ty(south), Math.floor(cy) + reach),\n ];\n const wanted = Array.from({ length: y1 - y0 + 1 }, (_, j) => y0 + j).flatMap((y) =>\n Array.from({ length: x1 - x0 + 1 }, (_, i): [number, number] => [x0 + i, y]),\n );\n\n // Nearest to the center first, at most `maxTiles` (tilted views reach far)\n wanted.sort(\n (a, b) => Math.hypot(a[0] + 0.5 - cx, a[1] + 0.5 - cy) - Math.hypot(b[0] + 0.5 - cx, b[1] + 0.5 - cy),\n );\n // Past the source's deepest level, its tiles' labels at the zoom of the view (the layers of the deeper zooms)\n keys.push(...wanted.slice(0, maxTiles).map(([x, y]) => `${z}/${x}/${y}${zoom > z ? `@${zoom}` : ''}`));\n }\n\n // The same tiles as the labels shown: nothing to do\n const set = keys.join(' ');\n\n if (set === shown) return;\n\n const lists = await Promise.all(\n keys.map((k, index) => {\n const cached = tiles.get(k);\n\n if (cached) return cached;\n\n const [tile, deeper] = k.split('@');\n const [tz = 0, x = 0, y = 0] = (tile ?? '').split('/').map(Number);\n // The nearest tiles first: the others wait for the raster tiles\n const priority: Priority = index < 4 ? 'auto' : 'low';\n const work: BasemapWork = {\n type: 'labels',\n key,\n z: tz,\n x,\n y,\n priority,\n ...(deeper === undefined ? {} : { zoom: Number(deeper) }),\n };\n const p = this.request(tz, x, y, work).then(\n (r) => tileLabels('labels' in r ? r.labels : []),\n () => {\n // A network error is not kept: the tile is asked for again on the next update\n tiles.delete(k);\n\n return [];\n },\n );\n\n // A bounded cache of tiles' labels, the least recently used dropped\n tiles.set(k, p);\n\n return p;\n }),\n );\n\n if (run !== generation || this.destroyed) return;\n // A tile that failed is missing: the next update asks for it again, after a pause if no move brings one\n shown = keys.every((k) => tiles.has(k)) ? set : '';\n if (shown === '' && !retry) {\n retry = window.setTimeout(() => {\n retry = 0;\n refresh();\n }, RETRY_LABELS_MS);\n }\n\n // The labels of the higher style layers first: they win the collisions; for each style layer, the tiles nearest\n // to the center first\n const layerIds = [...new Set(lists.flatMap((list) => list.map(([layer]) => layer)))].sort((a, b) => b - a);\n const groups = layerIds.flatMap((layer) =>\n lists.map((list) => list.find(([l]) => l === layer)?.[1]).filter((group) => group !== undefined),\n );\n\n symbol.setGroups(groups);\n };\n // The style failed to load: reported by `ready`\n const refresh = () => {\n update().catch(() => undefined);\n };\n let timer = 0;\n const schedule = () => {\n if (timer) return;\n timer = window.setTimeout(() => {\n timer = 0;\n refresh();\n }, 250);\n };\n\n this.cleanup.push(this.map.on('move', schedule), this.map.on('moveend', refresh), () => {\n clearTimeout(timer);\n clearTimeout(retry);\n });\n refresh();\n\n return symbol;\n }\n\n /** Stops its workers' work and removes its raster and label layers from the map (those still there) */\n destroy(): void {\n if (this.destroyed) return;\n this.destroyed = true;\n this.cleanup.forEach((off) => {\n off();\n });\n this.cleanup.length = 0;\n this.layers.forEach((layer) => {\n if (this.map.hasLayer(layer)) layer.remove();\n });\n this.layers.length = 0;\n this.map.dropVectorTiles(this);\n // The page's copy of the sprites (the workers have theirs), and their icons\n this.sprites\n ?.then((sprites) => {\n sprites.forEach((sprite) => {\n sprite.image.close();\n });\n this.map.icons.remove(this.iconPrefix, true);\n })\n .catch(() => undefined);\n if (this.ownPool) {\n this.pool.terminate();\n } else {\n // Shared workers: only its requests stop and its renderers go\n this.pool.cancel(this);\n this.renderers.forEach((key) => {\n this.pool.broadcast({ type: 'drop', key });\n });\n }\n this.renderers.length = 0;\n }\n}\n\n/** Colors of the layers of `basicStyle`, in turn */\nconst BASIC_COLORS = ['#2f6fd1', '#d1495b', '#2a9d8f', '#e9a03b', '#7b5ea7', '#5c7a29', '#c8553d', '#3d8eb9'];\n\n/**\n * A plain style for vector tiles known only by their layers' names (a PMTiles archive's `vector_layers`, an MBTiles'\n * metadata): each layer's polygons filled, its lines and outlines stroked and its points as circles, a color per\n * layer, the `name` of points as labels. `source` is the style's vector source (`url`: TileJSON or `pmtiles://…`, or\n * `tiles`)\n */\nexport const basicStyle = (\n source: { url?: string; tiles?: string[]; minzoom?: number; maxzoom?: number },\n layers: readonly string[],\n): Style => {\n const out: StyleLayer[] = [];\n\n layers.forEach((name, i) => {\n const color = BASIC_COLORS[i % BASIC_COLORS.length] ?? '#2f6fd1';\n const base = { source: 'data', 'source-layer': name };\n\n out.push(\n { id: `${name}-fill`, type: 'fill', ...base, paint: { 'fill-color': color, 'fill-opacity': 0.18 } },\n { id: `${name}-line`, type: 'line', ...base, paint: { 'line-color': color, 'line-width': 1.2 } },\n {\n id: `${name}-circle`,\n type: 'circle',\n ...base,\n paint: { 'circle-color': color, 'circle-radius': 3.5, 'circle-stroke-color': '#fff', 'circle-stroke-width': 1 },\n },\n );\n });\n layers.forEach((name) => {\n out.push({\n id: `${name}-label`,\n type: 'symbol',\n source: 'data',\n 'source-layer': name,\n filter: ['all', ['==', ['geometry-type'], 'Point'], ['has', 'name']],\n layout: { 'text-field': ['get', 'name'], 'text-size': 12, 'text-offset': [0, 0.9], 'text-anchor': 'top' },\n paint: { 'text-color': '#1d2433', 'text-halo-color': '#fff', 'text-halo-width': 1.5 },\n });\n });\n\n return { version: 8, sources: { data: { type: 'vector', ...source } }, layers: out };\n};\n\n/** Options of `GeoMap.addPmtiles` */\nexport interface PmtilesOptions {\n /** What the archive holds (default from its header: raster images or vector tiles) */\n kind?: 'raster' | 'vector';\n /** A MapLibre style for vector tiles (its vector source `pmtiles://…`); default `basicStyle` of the archive's layers */\n style?: Style;\n opacity?: number;\n /** Texture size of raster tiles (default 256; 512 for the sharper tiles of a 512 px archive) */\n size?: number;\n /** Credits, HTML (default the archive's `attribution` metadata, as text) */\n attribution?: string;\n before?: Layer;\n}\n\n/** HTML of a file reduced to its text, escaped: credits from an archive's metadata cannot run in the page */\nconst plainText = (html: string): string => {\n return html\n .replace(/<[^>]*>/g, '')\n .replace(/&(?!(amp|lt|gt|quot|copy|#\\d+);)/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n};\n\n/** @internal `GeoMap.addPmtiles`: a raster layer of the archive's images, or vector tiles with their raster layer and\n * labels */\nexport const pmtilesLayer = async (\n map: GeoMap,\n url: string,\n options: PmtilesOptions,\n): Promise<RasterLayer | VectorTiles> => {\n const archiveUrl = pmtilesUrl(url.startsWith('pmtiles://') ? url : `pmtiles://${url}`) ?? url;\n const archive = pmtiles(archiveUrl);\n const [header, metadata] = await Promise.all([\n archive.header(),\n archive.metadata().catch((): Record<string, unknown> => ({})),\n ]);\n const credit = metadata.attribution;\n const attribution = options.attribution ?? (typeof credit === 'string' && credit ? plainText(credit) : undefined);\n const kind = options.kind ?? (header.tileType === 'mvt' ? 'vector' : 'raster');\n const credits = attribution ? { attribution } : {};\n\n if (kind === 'raster') {\n return map.addRaster({\n url: `pmtiles://${archiveUrl}`,\n minZoom: header.minZoom,\n maxZoom: Math.max(header.maxZoom, 19),\n ...(options.opacity === undefined ? {} : { opacity: options.opacity }),\n ...(options.size === undefined ? {} : { size: options.size }),\n ...(options.before ? { before: options.before } : {}),\n ...credits,\n });\n }\n\n const layers = metadata.vector_layers;\n const names = Array.isArray(layers)\n ? layers.map((l) => (isRecord(l) ? l.id : undefined)).filter((id) => typeof id === 'string')\n : [];\n const style = options.style ?? basicStyle({ url: `pmtiles://${archiveUrl}` }, names);\n const tiles = map.vectorTiles({ style, ...credits });\n\n tiles.raster({\n ...(options.opacity === undefined ? {} : { opacity: options.opacity }),\n ...(options.before ? { before: options.before } : {}),\n });\n tiles.labels();\n\n return tiles;\n};\n\n/** A raster loader reading the tiles of a `pmtiles://` archive URL (images of any size, drawn at `size`); undefined\n * for another URL */\nexport const pmtilesRasterLoader = (url: string, size: number): RasterOptions['loader'] => {\n const archiveUrl = pmtilesUrl(url);\n\n if (!archiveUrl) return undefined;\n\n const archive = pmtiles(archiveUrl);\n\n return async (z, x, y, signal) => {\n const bytes = await archive.tile(z, x, y, signal);\n\n if (!bytes) return null;\n\n return createImageBitmap(new Blob([bytes]), { resizeWidth: size, resizeHeight: size });\n };\n};\n"]}
@@ -3,12 +3,12 @@ import type { TileGrid } from './grid.ts';
3
3
  * The tile grid of `layer` in the capabilities document `xml`: its tile matrix set `matrixSet` (default the layer's
4
4
  * first), with the layer's tile limits and longitude-latitude extent. Throws if the layer or the set is missing
5
5
  */
6
- export declare function parseWmtsGrid(xml: string, layer: string, matrixSet?: string): TileGrid;
6
+ export declare const parseWmtsGrid: (xml: string, layer: string, matrixSet?: string) => TileGrid;
7
7
  /**
8
8
  * The tile grid of a WMTS layer, from the service's capabilities at `capabilities` (fetched with CORS), for
9
9
  * `addRaster`: `await wmtsGrid('https://…/wmts?SERVICE=WMTS&REQUEST=GetCapabilities', 'LAYER', 'MATRIXSET')`. The
10
10
  * raster's URL writes the matrix set, {z} for the matrix, {x} and {y} for the column and the row
11
11
  */
12
- export declare function wmtsGrid(capabilities: string | URL, layer: string, matrixSet?: string, options?: {
12
+ export declare const wmtsGrid: (capabilities: string | URL, layer: string, matrixSet?: string, options?: {
13
13
  signal?: AbortSignal;
14
- }): Promise<TileGrid>;
14
+ }) => Promise<TileGrid>;
@@ -2,9 +2,9 @@
2
2
  * The tile grid of a WMTS layer, read from the service's capabilities: its tile matrix set (CRS, levels, origin, tile
3
3
  * sizes), the layer's limits in it and its extent, for `addRaster({ url, grid })`.
4
4
  */
5
- import { epsgCode, isGeographic } from "./crs.js";
6
- import { withHeaders } from "./requests.js";
7
- import { child, children, childText, parseXml } from "./xml.js";
5
+ import { epsgCode, isGeographic } from "../data/crs.js";
6
+ import { child, children, childText, parseXml } from "../data/xml.js";
7
+ import { withHeaders } from "../engine/requests.js";
8
8
  /** Metres per degree, as WMTS counts the scale of a grid in degrees (OGC 07-057r7, 6.1) */
9
9
  const METRES_PER_DEGREE = (2 * Math.PI * 6378137) / 360;
10
10
  /** The size of a pixel by which WMTS turns scale denominators into resolutions, metres */
@@ -14,7 +14,7 @@ const numbers = (text) => (text ?? '').trim().split(/\s+/).map(Number);
14
14
  * The tile grid of `layer` in the capabilities document `xml`: its tile matrix set `matrixSet` (default the layer's
15
15
  * first), with the layer's tile limits and longitude-latitude extent. Throws if the layer or the set is missing
16
16
  */
17
- export function parseWmtsGrid(xml, layer, matrixSet) {
17
+ export const parseWmtsGrid = (xml, layer, matrixSet) => {
18
18
  const contents = child(parseXml(xml), 'Contents');
19
19
  const entry = children(contents, 'Layer').find((l) => childText(l, 'Identifier') === layer);
20
20
  if (!entry)
@@ -31,10 +31,15 @@ export function parseWmtsGrid(xml, layer, matrixSet) {
31
31
  const latFirst = geographic && epsgCode(crs) === 4326 && /EPSG/i.test(crs);
32
32
  const unit = geographic ? METRES_PER_DEGREE : 1;
33
33
  const limits = new Map();
34
- for (const l of children(child(link, 'TileMatrixSetLimits'), 'TileMatrixLimits')) {
35
- const [minRow, maxRow, minCol, maxCol] = ['MinTileRow', 'MaxTileRow', 'MinTileCol', 'MaxTileCol'].map((k) => Number(childText(l, k)));
36
- limits.set(childText(l, 'TileMatrix') ?? '', [minCol, minRow, maxCol, maxRow]);
37
- }
34
+ children(child(link, 'TileMatrixSetLimits'), 'TileMatrixLimits').forEach((l) => {
35
+ const limit = (k) => Number(childText(l, k));
36
+ limits.set(childText(l, 'TileMatrix') ?? '', [
37
+ limit('MinTileCol'),
38
+ limit('MinTileRow'),
39
+ limit('MaxTileCol'),
40
+ limit('MaxTileRow'),
41
+ ]);
42
+ });
38
43
  const matrices = children(set, 'TileMatrix').map((m) => {
39
44
  const id = childText(m, 'Identifier') ?? '';
40
45
  const [a = 0, b = 0] = numbers(childText(m, 'TopLeftCorner'));
@@ -53,25 +58,25 @@ export function parseWmtsGrid(xml, layer, matrixSet) {
53
58
  // A layer's limits leave out the matrices it does not have
54
59
  const served = limits.size > 0 ? matrices.filter((m) => limits.has(String(m.id))) : matrices;
55
60
  const box = child(entry, 'WGS84BoundingBox');
56
- const [west, south] = numbers(childText(box, 'LowerCorner'));
57
- const [east, north] = numbers(childText(box, 'UpperCorner'));
61
+ const [west = Number.NaN, south = Number.NaN] = numbers(childText(box, 'LowerCorner'));
62
+ const [east = Number.NaN, north = Number.NaN] = numbers(childText(box, 'UpperCorner'));
58
63
  const bounds = [west, south, east, north];
59
64
  return {
60
65
  crs,
61
66
  matrices: served,
62
67
  name,
63
- ...(bounds.every(Number.isFinite) ? { bounds: bounds } : {}),
68
+ ...(bounds.every(Number.isFinite) ? { bounds } : {}),
64
69
  };
65
- }
70
+ };
66
71
  /**
67
72
  * The tile grid of a WMTS layer, from the service's capabilities at `capabilities` (fetched with CORS), for
68
73
  * `addRaster`: `await wmtsGrid('https://…/wmts?SERVICE=WMTS&REQUEST=GetCapabilities', 'LAYER', 'MATRIXSET')`. The
69
74
  * raster's URL writes the matrix set, {z} for the matrix, {x} and {y} for the column and the row
70
75
  */
71
- export async function wmtsGrid(capabilities, layer, matrixSet, options = {}) {
76
+ export const wmtsGrid = async (capabilities, layer, matrixSet, options = {}) => {
72
77
  const response = await fetch(capabilities, withHeaders(capabilities, options.signal ? { signal: options.signal } : {}));
73
78
  if (!response.ok)
74
79
  throw new Error(`isard: ${response.status} for the WMTS capabilities`);
75
80
  return parseWmtsGrid(await response.text(), layer, matrixSet);
76
- }
81
+ };
77
82
  //# sourceMappingURL=wmts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wmts.js","sourceRoot":"","sources":["../../src/basemap/wmts.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The tile grid of a WMTS layer, read from the service's capabilities: its tile matrix set (CRS, levels, origin, tile\n * sizes), the layer's limits in it and its extent, for `addRaster({ url, grid })`.\n */\nimport { epsgCode, isGeographic } from '../data/crs.ts';\nimport { child, children, childText, parseXml } from '../data/xml.ts';\nimport { withHeaders } from '../engine/requests.ts';\nimport type { TileGrid, TileMatrix } from './grid.ts';\n\n/** Metres per degree, as WMTS counts the scale of a grid in degrees (OGC 07-057r7, 6.1) */\nconst METRES_PER_DEGREE = (2 * Math.PI * 6378137) / 360;\n/** The size of a pixel by which WMTS turns scale denominators into resolutions, metres */\nconst PIXEL = 0.00028;\n\nconst numbers = (text: string | undefined) => (text ?? '').trim().split(/\\s+/).map(Number);\n\n/**\n * The tile grid of `layer` in the capabilities document `xml`: its tile matrix set `matrixSet` (default the layer's\n * first), with the layer's tile limits and longitude-latitude extent. Throws if the layer or the set is missing\n */\nexport const parseWmtsGrid = (xml: string, layer: string, matrixSet?: string): TileGrid => {\n const contents = child(parseXml(xml), 'Contents');\n const entry = children(contents, 'Layer').find((l) => childText(l, 'Identifier') === layer);\n\n if (!entry) throw new Error(`isard: no WMTS layer ${layer}`);\n\n const links = children(entry, 'TileMatrixSetLink');\n const link = matrixSet === undefined ? links[0] : links.find((l) => childText(l, 'TileMatrixSet') === matrixSet);\n const name = childText(link, 'TileMatrixSet');\n const set = children(contents, 'TileMatrixSet').find((s) => childText(s, 'Identifier') === name);\n\n if (!name || !set) throw new Error(`isard: no tile matrix set ${matrixSet ?? ''} for the WMTS layer ${layer}`);\n\n const crs = childText(set, 'SupportedCRS') ?? '';\n const geographic = isGeographic(crs);\n // EPSG's geographic CRSs have their latitude first (CRS:84 and the IGN's WGS84G do not)\n const latFirst = geographic && epsgCode(crs) === 4326 && /EPSG/i.test(crs);\n const unit = geographic ? METRES_PER_DEGREE : 1;\n const limits = new Map<string, TileMatrix['limits']>();\n\n children(child(link, 'TileMatrixSetLimits'), 'TileMatrixLimits').forEach((l) => {\n const limit = (k: string) => Number(childText(l, k));\n\n limits.set(childText(l, 'TileMatrix') ?? '', [\n limit('MinTileCol'),\n limit('MinTileRow'),\n limit('MaxTileCol'),\n limit('MaxTileRow'),\n ]);\n });\n\n const matrices = children(set, 'TileMatrix').map((m): TileMatrix => {\n const id = childText(m, 'Identifier') ?? '';\n const [a = 0, b = 0] = numbers(childText(m, 'TopLeftCorner'));\n const limit = limits.get(id);\n\n return {\n id,\n resolution: (Number(childText(m, 'ScaleDenominator')) * PIXEL) / unit,\n origin: latFirst ? [b, a] : [a, b],\n tileWidth: Number(childText(m, 'TileWidth') ?? 256),\n tileHeight: Number(childText(m, 'TileHeight') ?? 256),\n matrixWidth: Number(childText(m, 'MatrixWidth') ?? Infinity),\n matrixHeight: Number(childText(m, 'MatrixHeight') ?? Infinity),\n ...(limit ? { limits: limit } : {}),\n };\n });\n // A layer's limits leave out the matrices it does not have\n const served = limits.size > 0 ? matrices.filter((m) => limits.has(String(m.id))) : matrices;\n const box = child(entry, 'WGS84BoundingBox');\n const [west = Number.NaN, south = Number.NaN] = numbers(childText(box, 'LowerCorner'));\n const [east = Number.NaN, north = Number.NaN] = numbers(childText(box, 'UpperCorner'));\n const bounds: [number, number, number, number] = [west, south, east, north];\n\n return {\n crs,\n matrices: served,\n name,\n ...(bounds.every(Number.isFinite) ? { bounds } : {}),\n };\n};\n\n/**\n * The tile grid of a WMTS layer, from the service's capabilities at `capabilities` (fetched with CORS), for\n * `addRaster`: `await wmtsGrid('https://…/wmts?SERVICE=WMTS&REQUEST=GetCapabilities', 'LAYER', 'MATRIXSET')`. The\n * raster's URL writes the matrix set, {z} for the matrix, {x} and {y} for the column and the row\n */\nexport const wmtsGrid = async (\n capabilities: string | URL,\n layer: string,\n matrixSet?: string,\n options: { signal?: AbortSignal } = {},\n): Promise<TileGrid> => {\n const response = await fetch(\n capabilities,\n withHeaders(capabilities, options.signal ? { signal: options.signal } : {}),\n );\n\n if (!response.ok) throw new Error(`isard: ${response.status} for the WMTS capabilities`);\n\n return parseWmtsGrid(await response.text(), layer, matrixSet);\n};\n"]}
@@ -1,4 +1,4 @@
1
- function Ae(e){return e*360-180}function Me(e){return Math.atan(Math.sinh(Math.PI*(1-2*e)))*180/Math.PI}class q{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,o]of this.entries){if(this.entries.size<=this.capacity)break;this.entries.delete(n),this.evict?.(o,n)}}delete(e){return this.entries.delete(e)}values(){return this.entries.values()}clear(){this.entries.clear()}}class fe{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 o=this.buf[this.pos++]??0,r=o&127;if(n<4)e|=r<<7*n;else if(n===4)e|=(r&15)<<28,t|=r>>4;else t|=r<<7*n-32;if(o<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 fe(this.buf,this.pos,t);return this.pos=t,n}string(){let e=this.varint(),t=Math.min(this.pos+e,this.end),n=Xe.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 Xe=new TextDecoder;function Ye(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}function Ge(e){let t=[],n,[o,r]=[0,0];while(e.more){let i=e.varint(),a=i&7,s=i>>3;if(a===7){if(n&&n.length>=2)n.push(n[0]??0,n[1]??0);continue}for(let u=0;u<s&&e.more;u+=1){if(o+=e.sint(),r+=e.sint(),a===1)n=[],t.push(n);n?.push(o,r)}}return t}function me(e,t){let n=new Map,o=new fe(e);while(o.more){let r=o.varint();if(r>>3!==3){o.skip(r&7);continue}let i=o.sub(),a="",s=4096,u=[],l=[],c=[];while(i.more){let m=i.varint();switch(m>>3){case 1:a=i.string();break;case 2:c.push(i.sub());break;case 3:u.push(i.string());break;case 4:l.push(Ye(i.sub()));break;case 5:s=i.varint();break;default:i.skip(m&7)}}if(t&&!t.has(a))continue;let h=[];for(let m of c){let C=1,f={},b=[];while(m.more){let k=m.varint();switch(k>>3){case 2:{let d=m.sub();while(d.more){let R=u[d.varint()],O=l[d.varint()];if(R!==void 0&&O!==void 0)f[R]=O}break}case 3:C=Math.min(3,Math.max(1,m.varint()));break;case 4:b=Ge(m.sub());break;default:m.skip(k&7)}}h.push({type:C,properties:f,geometry:b})}n.set(a,{extent:s,features:h})}return n}var Se=[];function Pe(e){Se=e}function W(e,t){let n=String(e),o=Se.filter(([i])=>n.startsWith(i));if(o.length===0)return t??{};let r=new Headers(t?.headers);for(let[,i]of o)for(let[a,s]of Object.entries(i))r.set(a,s);return{...t??{},headers:r}}var Qe=127,et=16384,tt=["unknown","mvt","png","jpeg","webp","avif"],nt=(e)=>(4**e-1)/3;function rt(e,t,n){if(e>26)throw Error(`isard: PMTiles level ${e} past 26`);let o=2**e;if(t<0||n<0||t>=o||n>=o)throw Error(`isard: PMTiles tile ${e}/${t}/${n} out of its level`);let[r,i]=[t,n],a=0;for(let s=o/2;s>=1;s/=2){let u=(r&s)>0?1:0,l=(i&s)>0?1:0;if(a+=s*s*(3*u^l),l===0){if(u===1)[r,i]=[s-1-r,s-1-i];[r,i]=[i,r]}}return nt(e)+a}class Re{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")}}}function Ce(e){let t=new Re(e),n=t.next();if(n>e.length)throw Error("isard: PMTiles directory larger than its bytes");let o=[],r=0;for(let i=0;i<n;i+=1)r+=t.next(),o.push({tileId:r,offset:0,length:0,runLength:1});for(let i of o)i.runLength=t.next();for(let i of o)i.length=t.next();return o.forEach((i,a)=>{let s=t.next(),u=o[a-1];i.offset=s===0&&u?u.offset+u.length:s-1}),o}function ot(e,t){let[n,o]=[0,e.length-1];while(n<=o){let i=n+o>>1,a=e[i];if(a.tileId===t)return a;if(a.tileId<t)n=i+1;else o=i-1}let r=e[o];if(!r)return;if(r.runLength===0||t-r.tileId<r.runLength)return r;return}function it(e){if(e.length<Qe||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=(r)=>Number(t.getBigUint64(r,!0)),o=(r)=>t.getInt32(r,!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:tt[t.getUint8(99)]??"unknown",minZoom:t.getUint8(100),maxZoom:t.getUint8(101),bounds:[o(102),o(106),o(110),o(114)],center:[o(119),o(123),t.getUint8(118)]}}async function ee(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())}var st=67108864;class Te{source;head;leaves=new q(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 o=await fetch(this.source,W(this.source,{headers:{Range:`bytes=${e}-${e+Math.max(t,1)-1}`},...n?{signal:n}:{}}));if(!o.ok)throw Error(`${this.source}: HTTP ${o.status}`);if(o.status===206)return new Uint8Array(await o.arrayBuffer());if(Number(o.headers.get("Content-Length"))>st)throw await o.body?.cancel(),Error(`${this.source}: the server ignores range requests (HTTP 206 expected)`);let i=o.arrayBuffer().then((a)=>new Uint8Array(a));return this.whole=i,i.catch(()=>{this.whole=void 0}),(await i).subarray(e,e+t)}load(){return this.head??=(async()=>{let e=await this.range(0,et),t=it(e),{rootDirectoryOffset:n,rootDirectoryLength:o}=t,r=n+o<=e.length?e.subarray(n,n+o):await this.range(n,o),i=Ce(await ee(r,t.internalCompression));return{header:t,root:i}})(),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 ee(t,e.internalCompression)),o=JSON.parse(n);return o&&typeof o==="object"&&!Array.isArray(o)?o:{}}leaf(e,t){let n=e.leafDirectoryOffset+t.offset,o=this.leaves.get(n);if(!o)o=this.range(n,t.length).then(async(r)=>Ce(await ee(r,e.internalCompression))),o.catch(()=>this.leaves.delete(n)),this.leaves.set(n,o);return o}async tile(e,t,n,o){let{header:r,root:i}=await this.load();if(e<r.minZoom||e>r.maxZoom)return;let a=rt(e,t,n),s=i;for(let u=0;u<4;u+=1){let l=ot(s,a);if(!l)return;if(l.runLength>0){let c=await this.range(r.tileDataOffset+l.offset,l.length,o);return ee(c,r.tileCompression)}s=await this.leaf(r,l)}throw Error("isard: PMTiles directories nested too deep")}}var Le=new q(16);function at(e){let t=Le.get(e);if(!t)t=new Te(e),Le.set(e,t);return t}function de(e,t){let n=/^pmtiles:\/\/(.+)\/(\d+)\/(\d+)\/(\d+)$/.exec(e);if(!n)return!1;let[,o="",r,i,a]=n;return at(o).tile(Number(r),Number(i),Number(a),t)}var ut=96;function lt(e,t,n,o,r,i){let a=new Uint8ClampedArray(i*i*4),s=i/r,u=r+1;for(let l=0;l<i;l+=1){let c=(l+0.5)/s,h=Math.min(r-1,Math.floor(c)),m=c-h;for(let C=0;C<i;C+=1){let f=(C+0.5)/s,b=Math.min(r-1,Math.floor(f)),k=f-b,d=2*(h*u+b),R=d+2*u,O=(1-k)*(1-m),j=k*(1-m),J=(1-k)*m,P=k*m,x=O*o[d]+j*o[d+2]+J*o[R]+P*o[R+2],v=O*o[d+1]+j*o[d+3]+J*o[R+1]+P*o[R+3],p=x-0.5,g=v-0.5;if(!(p>-1&&g>-1&&p<t&&g<n))continue;let M=Math.floor(p),y=Math.floor(g),L=p-M,A=g-y,E=0,I=0,S=0,N=0;for(let D=0;D<4;D+=1){let H=M+(D&1),F=y+(D>>1);if(H<0||F<0||H>=t||F>=n)continue;let B=4*(F*t+H),U=(D&1?L:1-L)*(D>>1?A:1-A)*e[B+3];E+=U*e[B],I+=U*e[B+1],S+=U*e[B+2],N+=U}if(N<=0)continue;let T=4*(l*i+C);a[T]=E/N,a[T+1]=I/N,a[T+2]=S/N,a[T+3]=N}}return a}function Ne(e=ut){let t=new Map,n=new Set,o=(l)=>{n.delete(l),l.then((c)=>c?.close(),()=>{return})},r=(l)=>{if(t.has(l))n.add(l);else o(l)},i=new q(e,r),a=(l)=>{let c=(t.get(l)??1)-1;if(c>0)t.set(l,c);else if(t.delete(l),n.has(l))o(l)},s=(l)=>{let c=i.get(l);if(!c)c=(async()=>{let h=await fetch(l,W(l));if(h.status===404||h.status===204||h.status===410)return null;if(!h.ok)throw Error(`isard: ${h.status} for a raster to reproject`);return createImageBitmap(await h.blob())})(),c.catch(()=>i.delete(l)),i.set(l,c);return t.set(c,(t.get(c)??0)+1),c};return{draw:async(l,c)=>{let h=l.sources.map((m)=>[m,s(m.url)]);try{let m=await Promise.all(h.map(async([d,R])=>[d,await R]));if(c.throwIfAborted(),!m.some(([,d])=>d))return null;let f=new OffscreenCanvas(l.width,l.height).getContext("2d",{willReadFrequently:!0});if(!f)throw Error("isard: no 2D canvas to reproject the tiles");for(let[d,R]of m)if(R)f.drawImage(R,d.x,d.y,d.w,d.h);let b=f.getImageData(0,0,l.width,l.height).data,k=lt(b,l.width,l.height,l.mesh,l.n,l.size);return createImageBitmap(new ImageData(k,l.size,l.size),{premultiplyAlpha:"none"})}finally{for(let[,m]of h)a(m)}},cache:i,close:()=>{for(let l of i.values())r(l);i.clear()}}}var _=256;function ct(e,t,n=Number.NEGATIVE_INFINITY){let o=e.length>>2,r=new Float32Array(o);if(t==="terrarium")for(let i=0,a=0;i<o;i+=1,a+=4){let s=e[a]*256+e[a+1]+e[a+2]/256-32768;r[i]=s>n?s:n}else for(let i=0,a=0;i<o;i+=1,a+=4){let s=-1e4+(e[a]*65536+e[a+1]*256+e[a+2])*0.1;r[i]=s>n?s:n}return r}async function Ie(e,t,n,o,r){let i=await fetch(e,W(e,{signal:o}));if(i.status===404||i.status===204||i.status===410)return null;if(!i.ok)throw Error(`${i.url}: ${i.status}`);let a=await createImageBitmap(await i.blob(),{premultiplyAlpha:"none",colorSpaceConversion:"none"});try{r.canvas??=new OffscreenCanvas(_,_);let s=r.canvas.getContext("2d",{willReadFrequently:!0});if(!s)throw Error("no 2D context");return s.imageSmoothingEnabled=!1,s.clearRect(0,0,_,_),s.drawImage(a,0,0,_,_),ct(s.getImageData(0,0,_,_).data,t,n)}finally{a.close()}}var ft="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",te;function mt(e){if(!te){te=new Map;let t=ft.split(" ");for(let n=0;n+1<t.length;n+=2)te.set(t[n],t[n+1])}return te.get(e)}var ne=(e)=>Number.isFinite(e)?Math.max(0,Math.min(1,e)):0;function Ee(e){if(!/^[0-9a-f]+$/.test(e)||![3,4,6,8].includes(e.length))return;let t=e.length<=4?[...e].map((o)=>o+o).join(""):e,n=(o)=>Number.parseInt(t.slice(o,o+2),16)/255;return[n(0),n(2),n(4),t.length===8?n(6):1]}function dt(e){if(e===void 0)return 1;return ne(e.endsWith("%")?Number.parseFloat(e)/100:Number.parseFloat(e))}function pt(e,t,n){let o=n<0.5?n*(1+t):n+t-n*t,r=2*n-o,i=(a)=>{let s=(a%1+1)%1;if(s<0.16666666666666666)return r+(o-r)*6*s;if(s<0.5)return o;if(s<0.6666666666666666)return r+(o-r)*(0.6666666666666666-s)*6;return r};return[i(e+0.3333333333333333),i(e),i(e-0.3333333333333333)]}function Oe(e){if(typeof e!=="string")return;let t=e.trim().toLowerCase();if(t.startsWith("#"))return Ee(t.slice(1));if(t==="transparent")return[0,0,0,0];let n=mt(t);if(n)return Ee(n);let o=/^(rgba?|hsla?)\(([^)]*)\)$/.exec(t);if(!o?.[1]||o[2]===void 0)return;let r=o[2].split(/[\s,/]+/).filter(Boolean);if(r.length<3||r.slice(0,3).some((c)=>Number.isNaN(Number.parseFloat(c))))return;let i=dt(r[3]);if(o[1].startsWith("rgb")){let c=(h)=>ne(h.endsWith("%")?Number.parseFloat(h)/100:Number.parseFloat(h)/255);return[c(r[0]),c(r[1]),c(r[2]),i]}let a=Number.parseFloat(r[0])/360,[s,u,l]=pt(a,ne(Number.parseFloat(r[1])/100),ne(Number.parseFloat(r[2])/100));return[s,u,l,i]}var bt=["Unknown","Point","LineString","Polygon"];function pe(e,t){return{zoom:t,properties:e.properties,type:bt[e.type]??"Unknown"}}function X(e){return Oe(e)}function oe([e,t,n,o]){return`rgba(${Math.round(e*255)},${Math.round(t*255)},${Math.round(n*255)},${o})`}function Fe(e,t,n,o=1){let r=n-t;if(r===0)return 0;let i=e-t;return o===1?i/r:(o**i-1)/(o**r-1)}function be(e,t,n){if(typeof e==="number"&&typeof t==="number")return e+(t-e)*n;let o=X(e),r=X(t);if(o&&r)return oe([0,1,2,3].map((i)=>(o[i]??0)+((r[i]??0)-(o[i]??0))*n));if(Array.isArray(e)&&Array.isArray(t))return e.map((i,a)=>be(i,t[a],n));return n<0.5?e:t}function Be(e){return typeof e==="object"&&e!==null&&!Array.isArray(e)&&Array.isArray(e.stops)}function ht(e,t){let n=e.property===void 0?t.zoom:t.properties[e.property],o=e.stops,r=e.type??(e.property===void 0||typeof o[0]?.[0]==="number"?"exponential":"categorical");if(r==="identity")return n??e.default;if(r==="categorical")return o.find(([s])=>s===n)?.[1]??e.default;if(typeof n!=="number"||!o.length)return e.default??o[0]?.[1];let i=(s)=>typeof s[0]==="object"&&s[0]!==null?Number(s[0].zoom):Number(s[0]),a=o[0];if(!a)return e.default;if(n<=i(a))return a[1];for(let s=1;s<o.length;s+=1){let[u,l]=[o[s-1],o[s]];if(!u||!l)continue;if(n<i(l)){if(r==="interval")return u[1];return be(u[1],l[1],Fe(n,i(u),i(l),e.base??1))}}return o.at(-1)?.[1]}function re(e,t){if(t==="$type")return e.type;return typeof t==="string"?e.properties[t]:void 0}var gt=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"]);function ie(e){return Array.isArray(e)&&typeof e[0]==="string"&&gt.has(e[0])}var Je=new Set,Y=(e)=>e===void 0||e===null?"":String(e);function z(e,t){if(Be(e))return ht(e,t);if(!Array.isArray(e))return e;let[n,...o]=e;if(typeof n!=="string")return e;let r=(s)=>z(o[s]??null,t),i=(s)=>Number(r(s)),a=()=>o.map((s,u)=>i(u));switch(n){case"literal":return o[0];case"zoom":return t.zoom;case"get":return re(t,r(0));case"has":return re(t,r(0))!==void 0;case"!has":return re(t,r(0))===void 0;case"properties":return t.properties;case"id":return null;case"geometry-type":return t.type;case"concat":return o.map((s,u)=>Y(r(u))).join("");case"format":return o.map((s,u)=>s!==null&&typeof s==="object"&&!Array.isArray(s)?"":Y(r(u))).join("");case"image":return r(0);case"number-format":{let s=o[1]??{},u=i(0);if(!Number.isFinite(u))return"";return u.toLocaleString(s.locale,{minimumFractionDigits:s["min-fraction-digits"],maximumFractionDigits:s["max-fraction-digits"]})}case"to-number":{for(let s=0;s<o.length;s+=1){let u=r(s),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 Y(r(0));case"to-boolean":{let s=r(0);return!(s===""||s===0||s===!1||s===null||s===void 0||Number.isNaN(s))}case"to-color":case"number":case"string":case"boolean":{let s={"to-color":(u)=>X(u)!==void 0,number:(u)=>typeof u==="number",string:(u)=>typeof u==="string",boolean:(u)=>typeof u==="boolean"};for(let u=0;u<o.length;u+=1){let l=r(u);if(s[n]?.(l))return l}return o.length?r(o.length-1):null}case"typeof":{let s=r(0);if(s===null||s===void 0)return"null";return Array.isArray(s)?"array":typeof s}case"length":{let s=r(0);return typeof s==="string"||Array.isArray(s)?s.length:0}case"at":{let s=r(1);return Array.isArray(s)?s[i(0)]??null:null}case"upcase":return Y(r(0)).toUpperCase();case"downcase":return Y(r(0)).toLowerCase();case"coalesce":for(let s=0;s<o.length;s+=1){let u=r(s);if(u!==void 0&&u!==null)return u}return null;case"!":return!r(0);case"all":return o.every((s,u)=>Boolean(r(u)));case"any":return o.some((s,u)=>Boolean(r(u)));case"==":return r(0)===r(1);case"!=":return r(0)!==r(1);case"<":return r(0)<r(1);case"<=":return r(0)<=r(1);case">":return r(0)>r(1);case">=":return r(0)>=r(1);case"in":{let s=r(1),u=r(0);if(typeof s==="string")return s.includes(String(u));return Array.isArray(s)&&s.includes(u)}case"case":{for(let s=0;s+1<o.length;s+=2)if(r(s))return r(s+1);return r(o.length-1)}case"match":{let s=r(0);for(let u=1;u+1<o.length;u+=2){let l=o[u];if(Array.isArray(l)?l.includes(s):l===s)return r(u+1)}return r(o.length-1)}case"step":{let s=i(0),u=r(1);for(let l=2;l+1<o.length;l+=2)if(s>=Number(o[l]))u=r(l+1);else break;return u}case"interpolate":case"interpolate-hcl":case"interpolate-lab":{let s=o[0],u=i(1),l=Array.isArray(s)&&s[0]==="exponential"?Number(s[1]):1,c=[];for(let m=2;m+1<o.length;m+=2)c.push([Number(o[m]),o[m+1]??null]);let h=c[0];if(!h)return null;if(u<=h[0])return z(h[1],t);for(let m=1;m<c.length;m+=1){let[C,f]=[c[m-1],c[m]];if(C&&f&&u<f[0])return be(z(C[1],t),z(f[1],t),Fe(u,C[0],f[0],l))}return z(c.at(-1)?.[1]??null,t)}case"rgb":case"rgba":return oe([i(0)/255,i(1)/255,i(2)/255,o.length>3?i(3):1]);case"+":return a().reduce((s,u)=>s+u,0);case"*":return a().reduce((s,u)=>s*u,1);case"-":return o.length===1?-i(0):i(0)-i(1);case"/":return i(0)/i(1);case"%":return i(0)%i(1);case"^":return i(0)**i(1);case"min":return Math.min(...a());case"max":return Math.max(...a());case"abs":return Math.abs(i(0));case"round":return Math.sign(i(0))*Math.round(Math.abs(i(0)));case"floor":return Math.floor(i(0));case"ceil":return Math.ceil(i(0));case"sqrt":return Math.sqrt(i(0));case"ln":return Math.log(i(0));case"log10":return Math.log10(i(0));case"log2":return Math.log2(i(0));case"pi":return Math.PI;case"e":return Math.E;default:if(!Je.has(n))Je.add(n),console.warn(`isard: the style expression "${n}" is not supported`);return null}}var yt=new Set(["==","!=","<","<=",">",">="]);function wt(e){let[t,n,...o]=e;if(typeof t!=="string"||typeof n!=="string"||o.some(Array.isArray))return!1;if(yt.has(t))return e.length===3;if(t==="in")return e.length!==3||!Array.isArray(e[2]);return t==="!in"||t==="has"||t==="!has"}function xt(e,t){let[n,o,...r]=e,i=re(t,o);switch(n){case"==":return i===r[0];case"!=":return i!==r[0];case"<":return i<r[0];case"<=":return i<=r[0];case">":return i>r[0];case">=":return i>=r[0];case"in":return r.includes(i);case"!in":return!r.includes(i);case"has":return i!==void 0;case"!has":return i===void 0;default:return!0}}var De=new WeakMap;function Ue(e){if(!Array.isArray(e))return()=>Boolean(e);let t=De.get(e);if(t)return t;let n,o=e[0];if(o==="all"||o==="any"||o==="none"){let r=e.slice(1).map(Ue);if(o==="all")n=(i)=>r.every((a)=>a(i));else if(o==="any")n=(i)=>r.some((a)=>a(i));else n=(i)=>!r.some((a)=>a(i))}else if(wt(e))n=(r)=>xt(e,r);else n=(r)=>Boolean(z(e,r));return De.set(e,n),n}function he(e,t){if(e===void 0||e===null)return!0;return Ue(e)(t)}function G(e){if(e!==void 0&&Be(e))return e.property!==void 0;if(!Array.isArray(e))return!1;if(["get","has","!has","geometry-type","properties","id"].includes(e[0]))return!0;return e.some((t)=>G(t))}function ge(e,t){if(e===void 0||e===null)return"";if(typeof e==="string")return e.replace(/\{([^}]+)\}/g,(o,r)=>{let i=t.properties[r];return i===void 0?"":String(i)});let n=z(e,t);if(Array.isArray(n))return n.filter((o)=>typeof o==="string").join("");return n===void 0||n===null?"":String(n)}function ze(e){return/Regular|Bold|Italic|Semibold|Light|Medium|Black/.test(e)?e:`${e} Regular`}function ye(e){let t=new Set,n=(a)=>{if(!Array.isArray(a))return;let s=(u)=>Array.isArray(u)&&u[0]==="zoom";if((a[0]==="interpolate"||a[0]==="interpolate-hcl"||a[0]==="interpolate-lab")&&s(a[2]))for(let u=3;u<a.length;u+=2)t.add(Number(a[u]));else if(a[0]==="step"&&s(a[1]))for(let u=3;u<a.length;u+=2){let l=Number(a[u]);t.add(l),t.add(l-0.01)}for(let u of a)n(u)};n(e);let o=[...t].filter(Number.isFinite);if(o.length===0)o.push(0);let[r,i]=[Math.min(...o),Math.max(...o)];for(let a=Math.ceil(r);a<=Math.floor(i);a+=1)o.push(a);return[...new Set(o)].sort((a,s)=>a-s).map((a)=>[a,Number(z(e,{zoom:a,properties:{},type:"Unknown"}))])}function $e(e,t){for(let n of e.sprites){let o=n.icons[t];if(o)return{icon:o,image:n.image}}return}var se=new Map,qe=96,ae=new q(qe);function vt(e){return Math.max(16,Math.ceil(qe/Math.max(1,e)))}var we=new Set,Q=new Set,ve=new Map,kt={},He=Ne(),xe=new q(64,(e)=>e.then((t)=>setTimeout(()=>t?.close(),0),()=>{return}));function At(e,t="auto"){let n=xe.get(e);if(n)return n;let o=(async()=>{let r=de(e);if(r){let s=await r;return s&&createImageBitmap(new Blob([s]))}let a=await fetch(e,W(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 o.catch(()=>xe.delete(e)),xe.set(e,o),o}function We(e,t="auto"){let n=ae.get(e);if(n)return n;let o=(async()=>{let r=de(e);if(r){let i=await r;return i&&me(i)}for(let i=0;;i+=1){let s=await fetch(e,W(e,{priority:t}));if(s.status===404||s.status===204)return;if(s.ok)return me(new Uint8Array(await s.arrayBuffer()));if(i>=2)throw Error(`${e}: ${s.status}`);await new Promise((u)=>setTimeout(u,400*(i+1)))}})();return o.catch(()=>ae.delete(e)),ae.set(e,o),o}function Mt(e,t,n,o){let r=Math.max(0,Math.min(t-1,e.maxzoom)),i=t-r,a=2**Math.max(0,i),[s,u]=i>=0?[Math.floor(n/a),Math.floor(o/a)]:[n,o],l=e.tiles.replace("{z}",String(r)).replace("{x}",String(s)).replace("{y}",String(u)),c=1/a;return{url:l,vz:r,vx:s,vy:u,part:c,ox:n%a*c,oy:o%a*c}}var w=(e,t,n,o,r)=>{let i=e[t]?.[n];if(i===void 0)return r;let a=Array.isArray(i)&&!ie(i)?i:z(i,o);return a===void 0||a===null?r:a};function Z(e,t){let n=X(e)??[0,0,0,1];return oe([n[0],n[1],n[2],n[3]*t])}function Ve(e,t){if(e.layout?.visibility==="none")return!1;return t>=(e.minzoom??0)&&t<(e.maxzoom??24)}function St(e,t){if(e.patterns.has(t))return e.patterns.get(t);let n=$e(e,t),o;if(n&&n.icon.width>0&&n.icon.height>0){let{icon:r}=n;o=new OffscreenCanvas(r.width,r.height),o.getContext("2d")?.drawImage(n.image,r.x,r.y,r.width,r.height,0,0,r.width,r.height)}return e.patterns.set(t,o),o}var ke=new Map;function Pt(e){let t=ke.get(e)?.pop()??new OffscreenCanvas(e,e),n=t.getContext("2d",{willReadFrequently:!0});if(!n)throw Error("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}}function Ct(e){let t=ke.get(e.width)??[];if(ke.set(e.width,t),t.length<4)t.push(e)}function Lt(e,t,n){if(n)return Promise.resolve(e.transferToImageBitmap());return createImageBitmap(t.getImageData(0,0,e.width,e.height),{premultiplyAlpha:"none"})}async function Rt(e,t,n,o,r,i,a){let s=Mt(e,t,n,o),u=await We(s.url,a);if(Q.has(i))return;let{canvas:l,g:c}=Pt(r);try{return await Tt(e,s,u,l,c,t,n,o,r,i,a)}finally{Ct(l)}}async function Tt(e,t,n,o,r,i,a,s,u,l,c){let h=Math.max(0,i-1),m=u/256,C=!1,f=!1;for(let b of e.layers){if(!Ve(b,h))continue;let k={zoom:h,properties:{},type:"Unknown"};if(b.type==="background"){let v=w(b,"paint","background-color",k,"#000"),p=Number(w(b,"paint","background-opacity",k,1));if(r.fillStyle=Z(v,p),r.fillRect(0,0,u,u),(X(v)??[0,0,0,1])[3]*p>=1)f=!0;C=!0;continue}if(b.type==="raster"){let v=b.source===void 0?void 0:e.rasters[b.source];if(!v)continue;let p=Math.max(0,Math.min(i-(v.tileSize>=512?1:0),v.maxzoom)),g=2**(i-p),M=v.tiles.replace("{z}",String(p)).replace("{x}",String(Math.floor(a/g))).replace("{y}",String(Math.floor(s/g))),y=await At(M,c).catch(()=>{return});if(Q.has(l))return;if(!y)continue;let[L,A]=[y.width/g,y.height/g];r.globalAlpha=Number(w(b,"paint","raster-opacity",k,1)),r.drawImage(y,a%g*L,s%g*A,L,A,0,0,u,u),r.globalAlpha=1,C=!0;continue}let d=n?.get(b["source-layer"]??"");if(!d)continue;let R=u/(d.extent*t.part),[O,j]=[t.ox*d.extent,t.oy*d.extent],J=(v,p)=>{r.beginPath();for(let g of v.geometry){for(let M=0;M+1<g.length;M+=2){let[y,L]=[((g[M]??0)-O)*R,((g[M+1]??0)-j)*R];if(M===0)r.moveTo(y,L);else r.lineTo(y,L)}if(p)r.closePath()}},P=new Map,x=(v,p,g,M)=>{let y=P.get(p);if(y===void 0)y=G(b[v]?.[p]),P.set(p,y);return w(b,v,p,y?g:k,M)};for(let v of d.features){let p=pe(v,h);if(!he(b.filter,p))continue;if(b.type==="fill-extrusion"&&v.type===3)J(v,!0),r.fillStyle=Z(x("paint","fill-extrusion-color",p,"#000"),Number(x("paint","fill-extrusion-opacity",p,1))),r.fill("evenodd"),C=!0;else if(b.type==="fill"&&v.type===3){let g=Number(x("paint","fill-opacity",p,1)),M=x("paint","fill-pattern",p,void 0);J(v,!0);let y=typeof M==="string"?$e(e,M)?.icon:void 0,L=y&&St(e,M);if(y&&L){let A=r.createPattern(L,"repeat");if(A)A.setTransform(new DOMMatrix().scale(m/(y.pixelRatio??1))),r.globalAlpha=g,r.fillStyle=A,r.fill("evenodd"),r.globalAlpha=1}else{r.fillStyle=Z(x("paint","fill-color",p,"#000"),g),r.fill("evenodd");let A=x("paint","fill-outline-color",p,void 0);if(A!==void 0)r.strokeStyle=Z(A,g),r.lineWidth=m,r.setLineDash([]),r.stroke()}C=!0}else if(b.type==="line"&&v.type!==1){let g=Number(x("paint","line-width",p,1));if(g<=0)continue;let M=Number(x("paint","line-gap-width",p,0));r.strokeStyle=Z(x("paint","line-color",p,"#000"),Number(x("paint","line-opacity",p,1))),r.lineWidth=(M>0?M+2*g:g)*m,r.lineCap=String(x("layout","line-cap",p,"butt")),r.lineJoin=String(x("layout","line-join",p,"miter"));let y=x("paint","line-dasharray",p,void 0);r.setLineDash(Array.isArray(y)?y.map((L)=>Number(L)*g*m):[]),J(v,v.type===3),r.stroke(),C=!0}else if(b.type==="circle"&&v.type===1){let g=Number(x("paint","circle-radius",p,5))*m;r.fillStyle=Z(x("paint","circle-color",p,"#000"),Number(x("paint","circle-opacity",p,1)));let M=Number(x("paint","circle-stroke-width",p,0))*m;r.strokeStyle=Z(x("paint","circle-stroke-color",p,"#000"),Number(x("paint","circle-stroke-opacity",p,1))),r.lineWidth=M;for(let y of v.geometry)for(let L=0;L+1<y.length;L+=2)if(r.beginPath(),r.arc(((y[L]??0)-O)*R,((y[L+1]??0)-j)*R,g,0,2*Math.PI),r.fill(),M>0)r.stroke();C=!0}}}if(!C&&!n)return null;return Lt(o,r,f)}function je(e,t,n){let o=Boolean(w(e,"layout",`${t}-allow-overlap`,n,!1)),r=Boolean(w(e,"layout",`${t}-ignore-placement`,n,!1));if(o&&r)return!0;if(o)return"allow";return r?"ignore":!1}function Nt(e,t){return Array.isArray(e)?[Number(e[0]??t[0]),Number(e[1]??t[1])]:t}function It(e){let t=(Array.isArray(e)?e:[e]).map((a)=>Number(a)||0),[n=0,o=n,r=n,i=o]=t;return[n,o,r,i]}function Et(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 o=[];if(!(n>0)||!(t>0))return o;let r=Math.min(t/2,n/2),i=0;for(let a=2;a+1<e.length;a+=2){let[s,u,l,c]=[e[a-2]??0,e[a-1]??0,e[a]??0,e[a+1]??0],h=Math.hypot(l-s,c-u);while(h>0&&r<=i+h){let m=(r-i)/h;o.push([s+(l-s)*m,u+(c-u)*m,s,u,l,c]),r+=t}i+=h}return o}function K(e,t,n,o,r,i){let a=2**e;return[Ae((t+r/o)/a),Me((n+i/o)/a)]}function Ot(e,t,n,o,r){let i=w(e,"layout","icon-rotation-alignment",n,"auto"),a=String(w(e,"layout","icon-text-fit",n,"none")),s=w(e,"layout","icon-text-fit-padding",n,[0,0,0,0]);return{image:t,size:G(e.layout?.["icon-size"])?Number(w(e,"layout","icon-size",n,1)):r(e),anchor:String(w(e,"layout","icon-anchor",n,"center")),offset:Nt(w(e,"layout","icon-offset",n,[0,0]),[0,0]),rotate:Number(w(e,"layout","icon-rotate",n,0))||0,alignment:i==="map"||i==="auto"&&o==="line"?"map":"viewport",overlap:je(e,"icon",n),optional:Boolean(w(e,"layout","icon-optional",n,!1)),fit:a==="width"||a==="height"||a==="both"?a:"none",padding:It(s),color:String(w(e,"paint","icon-color",n,"#000")),opacity:Number(w(e,"paint","icon-opacity",n,1))}}async function Jt(e,t,n,o,r,i,a=t){let s=e.tiles.replace("{z}",String(t)).replace("{x}",String(n)).replace("{y}",String(o)),u=await We(s,i);if(!u||Q.has(r))return[];let l=[],c=new Map,h=(f)=>{let b=c.get(f);if(b===void 0){let k=f.layout?.["text-size"]??16;b=ie(k)?ye(k):k,c.set(f,b)}return b},m=new Map,C=(f)=>{let b=m.get(f);if(b===void 0){let k=f.layout?.["icon-size"]??1;b=ie(k)?ye(k):k,m.set(f,b)}return b};return e.layers.forEach((f,b)=>{let k=f.layout??{};if(f.type!=="symbol"||!Ve(f,a))return;if(k["text-field"]===void 0&&k["icon-image"]===void 0)return;let d=u.get(f["source-layer"]??"");if(!d)return;let R={zoom:a,properties:{},type:"Unknown"},O=w(f,"layout","symbol-placement",R,"point")==="line"?"line":"point",j=O==="line"&&w(f,"layout","text-rotation-alignment",R,"auto")!=="viewport";for(let J of d.features){let P=pe(J,a);if(!he(f.filter,P))continue;let x=ge(k["text-field"],P).trim(),v=ge(k["icon-image"],P).trim();if(!x&&!v)continue;let p=w(f,"layout","text-transform",P,"none");if(p==="uppercase")x=x.toUpperCase();else if(p==="lowercase")x=x.toLowerCase();let g=w(f,"layout","text-font",P,["Noto Sans Regular"]),M=ze(Array.isArray(g)&&typeof g[0]==="string"?g[0]:"Noto Sans Regular"),y=w(f,"layout","text-offset",P,[0,0]),L={layer:b,text:x,font:M,size:G(f.layout?.["text-size"])?Number(w(f,"layout","text-size",P,16)):h(f),color:String(w(f,"paint","text-color",P,"#000")),haloColor:String(w(f,"paint","text-halo-color",P,"rgba(0,0,0,0)")),haloWidth:Number(w(f,"paint","text-halo-width",P,0)),anchor:String(w(f,"layout","text-anchor",P,"center")),offset:Array.isArray(y)?[Number(y[0]??0),Number(y[1]??0)]:[0,0],maxWidth:Number(w(f,"layout","text-max-width",P,10)),lineHeight:Number(w(f,"layout","text-line-height",P,1.2)),overlap:je(f,"text",P),...j?{textAlong:j}:{},...w(f,"layout","text-optional",P,!1)?{textOptional:!0}:{},...v?{icon:Ot(f,v,P,O,C)}:{}};if(J.type===1)for(let A of J.geometry)for(let E=0;E+1<A.length;E+=2){let[I,S]=[A[E]??0,A[E+1]??0];if(I<0||S<0||I>=d.extent||S>=d.extent)continue;let[N,T]=K(t,n,o,d.extent,I,S);l.push({...L,lon:N,lat:T})}else if(!x&&O==="line"){let A=Number(w(f,"layout","symbol-spacing",P,250))*d.extent/(512*2**(a-t));for(let E of J.geometry)for(let[I=0,S=0,N=0,T=0,D=0,H=0]of Et(E,Math.max(A,1))){if(I<0||S<0||I>=d.extent||S>=d.extent)continue;let[F,B]=K(t,n,o,d.extent,I,S),[U,ue]=K(t,n,o,d.extent,D,H),[le,ce]=K(t,n,o,d.extent,N,T);l.push({...L,lon:F,lat:B,along:[U-le,ue-ce]})}}else{let A,E=0;for(let S of J.geometry){let N=0;for(let T=2;T+1<S.length;T+=2)N+=Math.hypot((S[T]??0)-(S[T-2]??0),(S[T+1]??0)-(S[T-1]??0));if(N>E)E=N,A=S}if(!A||E<d.extent/32)continue;let I=E/2;for(let S=2;S+1<A.length;S+=2){let[N,T,D,H]=[A[S-2]??0,A[S-1]??0,A[S]??0,A[S+1]??0],F=Math.hypot(D-N,H-T);if(F>=I&&F>0){let[B,U]=[N+(D-N)*I/F,T+(H-T)*I/F];if(B<0||U<0||B>=d.extent||U>=d.extent)break;let[ue,le]=K(t,n,o,d.extent,B,U),[ce,_e]=K(t,n,o,d.extent,D,H),[Ze,Ke]=K(t,n,o,d.extent,N,T);l.push({...L,lon:ue,lat:le,...O==="line"?{along:[ce-Ze,_e-Ke]}:{}});break}I-=F}}}}),l}var V=(e,t=[])=>self.postMessage(e,t);self.onmessage=async({data:e})=>{if(e.type==="headers"){Pe(e.rules);return}if(e.type==="init"){if(e.workers!==void 0)ae.capacity=vt(e.workers);se.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"){for(let n of se.get(e.key)?.sprites??[])n.image.close();se.delete(e.key);return}if(e.type==="abort"){if(we.has(e.id))Q.add(e.id);ve.get(e.id)?.abort();return}if(e.type==="heights"||e.type==="reproject"){await Dt(e);return}we.add(e.id);let t=se.get(e.key);try{if(!t)throw Error(`no renderer ${e.key}`);if(e.type==="render"){let n=await Rt(t,e.z,e.x,e.y,e.size,e.id,e.priority);if(n)V({id:e.id,image:n},[n]);else V({id:e.id,missing:!0})}else V({id:e.id,labels:await Jt(t,e.z,e.x,e.y,e.id,e.priority,e.zoom)})}catch(n){V({id:e.id,error:String(n)})}finally{we.delete(e.id),Q.delete(e.id)}};async function Dt(e){let t=new AbortController;ve.set(e.id,t);try{if(e.type==="heights"){let n=await Ie(e.url,e.encoding,e.floor,t.signal,kt);if(n)V({id:e.id,heights:n},[n.buffer]);else V({id:e.id,missing:!0})}else{He.cache.capacity=e.cached;let n=await He.draw(e.job,t.signal);if(n)V({id:e.id,image:n},[n]);else V({id:e.id,missing:!0})}}catch(n){V({id:e.id,error:String(n)})}finally{ve.delete(e.id)}}export{vt as cacheShare,Et as lineAnchors,Lt as tileImage};
1
+ class le{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 o=this.buf[this.pos++]??0,r=o&127;if(n<4)e|=r<<7*n;else if(n===4)e|=(r&15)<<28,t|=r>>4;else t|=r<<7*n-32;if(o<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 le(this.buf,this.pos,t);return this.pos=t,n}string(){let e=this.varint(),t=Math.min(this.pos+e,this.end),n=et.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 et=new TextDecoder,tt=(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},nt=(e)=>{let t=[],n,[o,r]=[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 u=0;u<i&&e.more;u+=1){if(o+=e.sint(),r+=e.sint(),a===1)n=[],t.push(n);n?.push(o,r)}}return t},fe=(e,t)=>{let n=new Map,o=new le(e);while(o.more){let r=o.varint();if(r>>3!==3){o.skip(r&7);continue}let s=o.sub(),a="",i=4096,u=[],c=[],l=[];while(s.more){let d=s.varint();switch(d>>3){case 1:a=s.string();break;case 2:l.push(s.sub());break;case 3:u.push(s.string());break;case 4:c.push(tt(s.sub()));break;case 5:i=s.varint();break;default:s.skip(d&7)}}if(t&&!t.has(a))continue;let b=[];for(let d of l){let v=1,f={},h=[];while(d.more){let y=d.varint();switch(y>>3){case 2:{let m=d.sub();while(m.more){let I=u[m.varint()],T=c[m.varint()];if(I!==void 0&&T!==void 0)f[I]=T}break}case 3:v=Math.min(3,Math.max(1,d.varint()));break;case 4:h=nt(d.sub());break;default:d.skip(y&7)}}b.push({type:v,properties:f,geometry:h})}n.set(a,{extent:i,features:b})}return n};var Se=[];var Me=(e)=>{Se=e};var H=(e,t={})=>{let n=String(e),o=Se.filter(([s])=>n.startsWith(s));if(o.length===0)return t;let r=new Headers(t.headers);return o.forEach(([,s])=>{Object.entries(s).forEach(([a,i])=>{r.set(a,i)})}),{...t,headers:r}};var Y=(e)=>typeof e==="object"&&e!==null&&!Array.isArray(e);class q{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,o]of this.entries){if(this.entries.size<=this.capacity)break;this.entries.delete(n),this.evict?.(o,n)}}delete(e){return this.entries.delete(e)}values(){return this.entries.values()}clear(){this.entries.clear()}}var rt=127,ot=16384,st=["unknown","mvt","png","jpeg","webp","avif"],it=(e)=>(4**e-1)/3,at=(e,t,n)=>{if(e>26)throw Error(`isard: PMTiles level ${e} past 26`);let o=2**e;if(t<0||n<0||t>=o||n>=o)throw Error(`isard: PMTiles tile ${e}/${t}/${n} out of its level`);let[r,s]=[t,n],a=0;for(let i=o/2;i>=1;i/=2){let u=(r&i)>0?1:0,c=(s&i)>0?1:0;if(a+=i*i*(3*u^c),c===0){if(u===1)[r,s]=[i-1-r,i-1-s];[r,s]=[s,r]}}return it(e)+a};class Re{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 Ce=(e)=>{let t=new Re(e),n=t.next();if(n>e.length)throw Error("isard: PMTiles directory larger than its bytes");let o=[],r=0;for(let s=0;s<n;s+=1)r+=t.next(),o.push({tileId:r,offset:0,length:0,runLength:1});for(let s of o)s.runLength=t.next();for(let s of o)s.length=t.next();return o.forEach((s,a)=>{let i=t.next(),u=o[a-1];s.offset=i===0&&u?u.offset+u.length:i-1}),o},ut=(e,t)=>{let[n,o]=[0,e.length-1];while(n<=o){let s=n+o>>1,a=e[s];if(!a)break;if(a.tileId===t)return a;if(a.tileId<t)n=s+1;else o=s-1}let r=e[o];if(!r)return;if(r.runLength===0||t-r.tileId<r.runLength)return r;return},ct=(e)=>{if(e.length<rt||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=(r)=>Number(t.getBigUint64(r,!0)),o=(r)=>t.getInt32(r,!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:st[t.getUint8(99)]??"unknown",minZoom:t.getUint8(100),maxZoom:t.getUint8(101),bounds:[o(102),o(106),o(110),o(114)],center:[o(119),o(123),t.getUint8(118)]}},te=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())},lt=67108864;class Le{source;head;leaves=new q(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 o=await fetch(this.source,H(this.source,{headers:{Range:`bytes=${e}-${e+Math.max(t,1)-1}`},...n?{signal:n}:{}}));if(!o.ok)throw Error(`${this.source}: HTTP ${o.status}`);if(o.status===206)return new Uint8Array(await o.arrayBuffer());if(Number(o.headers.get("Content-Length"))>lt)throw await o.body?.cancel(),Error(`${this.source}: the server ignores range requests (HTTP 206 expected)`);let s=o.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,ot),t=ct(e),{rootDirectoryOffset:n,rootDirectoryLength:o}=t,r=n+o<=e.length?e.subarray(n,n+o):await this.range(n,o),s=Ce(await te(r,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 te(t,e.internalCompression)),o=JSON.parse(n);return Y(o)?o:{}}leaf(e,t){let n=e.leafDirectoryOffset+t.offset,o=this.leaves.get(n);if(o)return o;let r=this.range(n,t.length).then(async(s)=>Ce(await te(s,e.internalCompression)));return r.catch(()=>this.leaves.delete(n)),this.leaves.set(n,r),r}async tile(e,t,n,o){let{header:r,root:s}=await this.load();if(e<r.minZoom||e>r.maxZoom)return;let a=at(e,t,n),i=s;for(let u=0;u<4;u+=1){let c=ut(i,a);if(!c)return;if(c.runLength>0){let l=await this.range(r.tileDataOffset+c.offset,c.length,o);return te(l,r.tileCompression)}i=await this.leaf(r,c)}throw Error("isard: PMTiles directories nested too deep")}}var Pe=new q(16),ft=(e)=>{let t=Pe.get(e);if(t)return t;let n=new Le(e);return Pe.set(e,n),n};var me=(e,t)=>{let n=/^pmtiles:\/\/(.+)\/(\d+)\/(\d+)\/(\d+)$/.exec(e);if(!n)return!1;let[,o="",r,s,a]=n;return ft(o).tile(Number(r),Number(s),Number(a),t)};var mt=96,dt=(e,t,n,o,r,s)=>{let a=new Uint8ClampedArray(s*s*4),i=s/r,u=r+1;for(let c=0;c<s;c+=1){let l=(c+0.5)/i,b=Math.min(r-1,Math.floor(l)),d=l-b;for(let v=0;v<s;v+=1){let f=(v+0.5)/i,h=Math.min(r-1,Math.floor(f)),y=f-h,m=2*(b*u+h),I=m+2*u,T=(1-y)*(1-d),W=y*(1-d),O=(1-y)*d,R=y*d,M=T*o[m]+W*o[m+2]+O*o[I]+R*o[I+2],k=T*o[m+1]+W*o[m+3]+O*o[I+1]+R*o[I+3],p=M-0.5,w=k-0.5;if(!(p>-1&&w>-1&&p<t&&w<n))continue;let S=Math.floor(p),A=Math.floor(w),g=p-S,C=w-A,N=0,P=0,E=0,L=0;for(let B=0;B<4;B+=1){let J=S+(B&1),z=A+(B>>1);if(J<0||z<0||J>=t||z>=n)continue;let F=4*(z*t+J),V=(B&1?g:1-g)*(B>>1?C:1-C)*e[F+3];N+=V*e[F],P+=V*e[F+1],E+=V*e[F+2],L+=V}if(L<=0)continue;let D=4*(c*s+v);a[D]=N/L,a[D+1]=P/L,a[D+2]=E/L,a[D+3]=L}}return a},Ie=(e=mt)=>{let t=new Map,n=new Set,o=(c)=>{n.delete(c),c.then((l)=>l?.close(),()=>{return})},r=(c)=>{if(t.has(c))n.add(c);else o(c)},s=new q(e,r),a=(c)=>{let l=(t.get(c)??1)-1;if(l>0)t.set(c,l);else if(t.delete(c),n.has(c))o(c)},i=(c)=>{let l=()=>{let d=(async()=>{let v=await fetch(c,H(c));if(v.status===404||v.status===204||v.status===410)return null;if(!v.ok)throw Error(`isard: ${v.status} for a raster to reproject`);return createImageBitmap(await v.blob())})();return d.catch(()=>s.delete(c)),s.set(c,d),d},b=s.get(c)??l();return t.set(b,(t.get(b)??0)+1),b};return{draw:async(c,l)=>{let b=c.sources.map((d)=>[d,i(d.url)]);try{let d=await Promise.all(b.map(async([m,I])=>[m,await I]));if(l.throwIfAborted(),!d.some(([,m])=>m))return null;let f=new OffscreenCanvas(c.width,c.height).getContext("2d",{willReadFrequently:!0});if(!f)throw Error("isard: no 2D canvas to reproject the tiles");d.forEach(([m,I])=>{if(I)f.drawImage(I,m.x,m.y,m.w,m.h)});let h=f.getImageData(0,0,c.width,c.height).data,y=dt(h,c.width,c.height,c.mesh,c.n,c.size);return createImageBitmap(new ImageData(y,c.size,c.size),{premultiplyAlpha:"none"})}finally{b.forEach(([,d])=>{a(d)})}},cache:s,close:()=>{[...s.values()].forEach(r),s.clear()}}};var j=256,pt=(e,t,n=Number.NEGATIVE_INFINITY)=>{let o=e.length>>2,r=new Float32Array(o);if(t==="terrarium")for(let s=0,a=0;s<o;s+=1,a+=4){let i=e[a]*256+e[a+1]+e[a+2]/256-32768;r[s]=i>n?i:n}else for(let s=0,a=0;s<o;s+=1,a+=4){let i=-1e4+(e[a]*65536+e[a+1]*256+e[a+2])*0.1;r[s]=i>n?i:n}return r},Ne=async(e,t,n,o,r)=>{let s=await fetch(e,H(e,{signal:o}));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{r.canvas??=new OffscreenCanvas(j,j);let i=r.canvas.getContext("2d",{willReadFrequently:!0});if(!i)throw Error("no 2D context");return i.imageSmoothingEnabled=!1,i.clearRect(0,0,j,j),i.drawImage(a,0,0,j,j),pt(i.getImageData(0,0,j,j).data,t,n)}finally{a.close()}};var bt="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",de,ht=(e)=>{if(!de){let t=bt.split(" ");de=new Map(Array.from({length:Math.floor(t.length/2)},(n,o)=>[t[2*o]??"",t[2*o+1]??""]))}return de.get(e)},ne=(e)=>Number.isFinite(e)?Math.max(0,Math.min(1,e)):0,Ee=(e)=>{if(!/^[0-9a-f]+$/.test(e)||![3,4,6,8].includes(e.length))return;let t=e.length<=4?[...e].map((o)=>o+o).join(""):e,n=(o)=>Number.parseInt(t.slice(o,o+2),16)/255;return[n(0),n(2),n(4),t.length===8?n(6):1]},gt=(e)=>{if(e===void 0)return 1;return ne(e.endsWith("%")?Number.parseFloat(e)/100:Number.parseFloat(e))},yt=(e,t,n)=>{let o=n<0.5?n*(1+t):n+t-n*t,r=2*n-o,s=(a)=>{let i=(a%1+1)%1;if(i<0.16666666666666666)return r+(o-r)*6*i;if(i<0.5)return o;if(i<0.6666666666666666)return r+(o-r)*(0.6666666666666666-i)*6;return r};return[s(e+0.3333333333333333),s(e),s(e-0.3333333333333333)]},Te=(e)=>{if(typeof e!=="string")return;let t=e.trim().toLowerCase();if(t.startsWith("#"))return Ee(t.slice(1));if(t==="transparent")return[0,0,0,0];let n=ht(t);if(n)return Ee(n);let o=/^(rgba?|hsla?)\(([^)]*)\)$/.exec(t);if(!o?.[1]||o[2]===void 0)return;let r=o[2].split(/[\s,/]+/).filter(Boolean);if(r.length<3||r.slice(0,3).some((l)=>Number.isNaN(Number.parseFloat(l))))return;let s=gt(r[3]);if(o[1].startsWith("rgb")){let l=(b)=>ne(b.endsWith("%")?Number.parseFloat(b)/100:Number.parseFloat(b)/255);return[l(r[0]??""),l(r[1]??""),l(r[2]??""),s]}let a=Number.parseFloat(r[0]??"")/360,[i,u,c]=yt(a,ne(Number.parseFloat(r[1]??"")/100),ne(Number.parseFloat(r[2]??"")/100));return[i,u,c,s]};var wt=["Unknown","Point","LineString","Polygon"],be=(e,t)=>({zoom:t,properties:e.properties,type:wt[e.type]??"Unknown"}),X=(e)=>Te(e),oe=([e,t,n,o])=>`rgba(${Math.round(e*255)},${Math.round(t*255)},${Math.round(n*255)},${o})`,De=(e,t,n,o=1)=>{let r=n-t;if(r===0)return 0;let s=e-t;return o===1?s/r:(o**s-1)/(o**r-1)},he=(e,t,n)=>{if(typeof e==="number"&&typeof t==="number")return e+(t-e)*n;let o=X(e),r=X(t);if(o&&r){let s=(a)=>o[a]+(r[a]-o[a])*n;return oe([s(0),s(1),s(2),s(3)])}if(Array.isArray(e)&&Array.isArray(t))return e.map((s,a)=>he(s,t[a],n));return n<0.5?e:t},Fe=(e)=>typeof e==="object"&&e!==null&&!Array.isArray(e)&&Array.isArray(e.stops),xt=(e,t)=>{let n=e.property===void 0?t.zoom:t.properties[e.property],o=e.stops,r=e.type??(e.property===void 0||typeof o[0]?.[0]==="number"?"exponential":"categorical");if(r==="identity")return n??e.default;if(r==="categorical")return o.find(([l])=>l===n)?.[1]??e.default;if(typeof n!=="number"||!o.length)return e.default??o[0]?.[1];let s=([l])=>{if(Array.isArray(l))return Number.NaN;return Y(l)?Number(l.zoom):Number(l)},a=o[0];if(!a)return e.default;if(n<=s(a))return a[1];let i=o.findIndex((l,b)=>b>0&&Boolean(o[b-1])&&Boolean(l)&&n<s(l)),[u,c]=[o[i-1],o[i]];if(i<0||!u||!c)return o.at(-1)?.[1];if(r==="interval")return u[1];return he(u[1],c[1],De(n,s(u),s(c),e.base??1))},pe=(e)=>e,Oe={"<":(e,t)=>e<t,"<=":(e,t)=>e<=t,">":(e,t)=>e>t,">=":(e,t)=>e>=t},Ue=(e,t,n)=>{let o=(a)=>typeof a==="object"&&a!==null?String(a):a,[r,s]=[o(t),o(n)];return typeof r==="string"&&typeof s==="string"?Oe[e](r,s):Oe[e](Number(r),Number(s))},re=(e,t)=>{if(t==="$type")return e.type;return typeof t==="string"?e.properties[t]:void 0},vt=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"]),se=(e)=>Array.isArray(e)&&typeof e[0]==="string"&&vt.has(e[0]),Be=new Set,G=(e)=>e===void 0||e===null?"":String(e),U=(e,t)=>{if(Fe(e))return xt(e,t);if(!Array.isArray(e))return e;let[n,...o]=e;if(typeof n!=="string")return e;let r=(i)=>U(o[i]??null,t),s=(i)=>Number(r(i)),a=()=>o.map((i,u)=>s(u));switch(n){case"literal":return o[0];case"zoom":return t.zoom;case"get":return re(t,r(0));case"has":return re(t,r(0))!==void 0;case"!has":return re(t,r(0))===void 0;case"properties":return t.properties;case"id":return null;case"geometry-type":return t.type;case"concat":return o.map((i,u)=>G(r(u))).join("");case"format":return o.map((i,u)=>i!==null&&typeof i==="object"&&!Array.isArray(i)?"":G(r(u))).join("");case"image":return r(0);case"number-format":{let i=Y(o[1])?o[1]:{},u=(l)=>{let b=i[l];return typeof b==="number"?b:void 0},c=s(0);if(!Number.isFinite(c))return"";return c.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<o.length;i+=1){let u=r(i),c=typeof u==="string"&&u.trim()===""?Number.NaN:Number(u);if(u!==null&&u!==void 0&&!Number.isNaN(c))return c}return 0}case"to-string":return G(r(0));case"to-boolean":{let i=r(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)=>X(u)!==void 0,number:(u)=>typeof u==="number",string:(u)=>typeof u==="string",boolean:(u)=>typeof u==="boolean"};for(let u=0;u<o.length;u+=1){let c=r(u);if(i[n]?.(c))return c}return o.length?r(o.length-1):null}case"typeof":{let i=r(0);if(i===null||i===void 0)return"null";return Array.isArray(i)?"array":typeof i}case"length":{let i=r(0);return typeof i==="string"||Array.isArray(i)?i.length:0}case"at":{let i=r(1);return Array.isArray(i)?i[s(0)]??null:null}case"upcase":return G(r(0)).toUpperCase();case"downcase":return G(r(0)).toLowerCase();case"coalesce":for(let i=0;i<o.length;i+=1){let u=r(i);if(u!==void 0&&u!==null)return u}return null;case"!":return!r(0);case"all":return o.every((i,u)=>Boolean(r(u)));case"any":return o.some((i,u)=>Boolean(r(u)));case"==":return r(0)===r(1);case"!=":return r(0)!==r(1);case"<":case"<=":case">":case">=":return Ue(n,r(0),r(1));case"in":{let i=r(1),u=r(0);if(typeof i==="string")return i.includes(String(u));return Array.isArray(i)&&i.includes(u)}case"case":{let i=o.findIndex((u,c)=>c%2===0&&c+1<o.length&&Boolean(r(c)));return i<0?r(o.length-1):r(i+1)}case"match":{let i=r(0),u=o.findIndex((c,l)=>l%2===1&&l+1<o.length&&(Array.isArray(c)?pe(c).includes(i):c===i));return u<0?r(o.length-1):r(u+1)}case"step":{let i=s(0),u=r(1);for(let c=2;c+1<o.length;c+=2)if(i>=Number(o[c]))u=r(c+1);else break;return u}case"interpolate":case"interpolate-hcl":case"interpolate-lab":{let i=o[0],u=s(1),c=Array.isArray(i)&&i[0]==="exponential"?Number(i[1]):1,l=Array.from({length:Math.floor((o.length-2)/2)},(h,y)=>[Number(o[2+2*y]),o[3+2*y]??null]),b=l[0];if(!b)return null;if(u<=b[0])return U(b[1],t);let d=l.findIndex((h,y)=>y>0&&u<h[0]),[v,f]=[l[d-1],l[d]];if(d<0||!v||!f)return U(l.at(-1)?.[1]??null,t);return he(U(v[1],t),U(f[1],t),De(u,v[0],f[0],c))}case"rgb":case"rgba":return oe([s(0)/255,s(1)/255,s(2)/255,o.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 o.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(!Be.has(n))Be.add(n),console.warn(`isard: the style expression "${n}" is not supported`);return null}},kt=new Set(["==","!=","<","<=",">",">="]),At=(e)=>{let[t,n,...o]=e;if(typeof t!=="string"||typeof n!=="string"||o.some(Array.isArray))return!1;if(kt.has(t))return e.length===3;if(t==="in")return e.length!==3||!Array.isArray(e[2]);return t==="!in"||t==="has"||t==="!has"},St=(e,t)=>{let[n,o,...r]=e,s=re(t,o);switch(n){case"==":return s===r[0];case"!=":return s!==r[0];case"<":case"<=":case">":case">=":return Ue(n,s,r[0]);case"in":return pe(r).includes(s);case"!in":return!pe(r).includes(s);case"has":return s!==void 0;case"!has":return s===void 0;default:return!0}},Je=new WeakMap,ze=(e)=>{if(!Array.isArray(e))return()=>Boolean(e);let t=Je.get(e);if(t)return t;let o=(()=>{let r=e[0];if(r==="all"||r==="any"||r==="none"){let s=e.slice(1).map(ze);if(r==="all")return(a)=>s.every((i)=>i(a));if(r==="any")return(a)=>s.some((i)=>i(a));return(a)=>!s.some((i)=>i(a))}if(At(e))return(s)=>St(e,s);return(s)=>Boolean(U(e,s))})();return Je.set(e,o),o},ge=(e,t)=>{if(e===void 0||e===null)return!0;return ze(e)(t)},Mt=new Set(["get","has","!has","geometry-type","properties","id"]),Q=(e)=>{if(e!==void 0&&Fe(e))return e.property!==void 0;if(!Array.isArray(e))return!1;if(Mt.has(e[0]))return!0;return e.some((t)=>Q(t))},ye=(e,t)=>{if(e===void 0||e===null)return"";if(typeof e==="string")return e.replace(/\{([^}]+)\}/g,(o,r)=>{let s=t.properties[r];return s===void 0?"":String(s)});let n=U(e,t);if(Array.isArray(n))return n.filter((o)=>typeof o==="string").join("");return n===void 0||n===null?"":String(n)},He=(e)=>/Regular|Bold|Italic|Semibold|Light|Medium|Black/.test(e)?e:`${e} Regular`,we=(e)=>{let t=new Set,n=(i)=>i.filter((u,c)=>c>=3&&c%2===1).map(Number),o=(i)=>{if(!Array.isArray(i))return;let u=(c)=>Array.isArray(c)&&c[0]==="zoom";if((i[0]==="interpolate"||i[0]==="interpolate-hcl"||i[0]==="interpolate-lab")&&u(i[2]))n(i).forEach((c)=>{t.add(c)});else if(i[0]==="step"&&u(i[1]))n(i).forEach((c)=>{t.add(c),t.add(c-0.01)});i.forEach(o)};o(e);let r=[...t].filter(Number.isFinite);if(r.length===0)r.push(0);let[s,a]=[Math.min(...r),Math.max(...r)];return r.push(...Array.from({length:Math.floor(a)-Math.ceil(s)+1},(i,u)=>Math.ceil(s)+u)),[...new Set(r)].sort((i,u)=>i-u).map((i)=>[i,Number(U(e,{zoom:i,properties:{},type:"Unknown"}))])};var $e=(e)=>e*360-180,qe=(e)=>Math.atan(Math.sinh(Math.PI*(1-2*e)))*180/Math.PI;var We=(e,t)=>{let n=e.sprites.find((r)=>Boolean(r.icons[t])),o=n?.icons[t];return n&&o?{icon:o,image:n.image}:void 0},ie=new Map,Ve=96,ae=new q(Ve),Ct=(e)=>Math.max(16,Math.ceil(Ve/Math.max(1,e))),xe=new Set,ee=new Set,ke=new Map,Pt={},_e=Ie(),ve=new q(64,(e)=>e.then((t)=>setTimeout(()=>t?.close(),0),()=>{return})),Rt=(e,t="auto")=>{let n=ve.get(e);if(n)return n;let o=(async()=>{let r=me(e);if(r){let i=await r;return i&&createImageBitmap(new Blob([i]))}let a=await fetch(e,H(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 o.catch(()=>ve.delete(e)),ve.set(e,o),o},je=(e,t="auto")=>{let n=ae.get(e);if(n)return n;let o=(async()=>{let r=me(e);if(r){let s=await r;return s&&fe(s)}for(let s=0;;s+=1){let i=await fetch(e,H(e,{priority:t}));if(i.status===404||i.status===204)return;if(i.ok)return fe(new Uint8Array(await i.arrayBuffer()));if(s>=2)throw Error(`${e}: ${i.status}`);await new Promise((u)=>setTimeout(u,400*(s+1)))}})();return o.catch(()=>ae.delete(e)),ae.set(e,o),o},Lt=(e,t,n,o)=>{let r=Math.max(0,Math.min(t-1,e.maxzoom)),s=t-r,a=2**Math.max(0,s),[i,u]=s>=0?[Math.floor(n/a),Math.floor(o/a)]:[n,o],c=e.tiles.replace("{z}",String(r)).replace("{x}",String(i)).replace("{y}",String(u)),l=1/a;return{url:c,vz:r,vx:i,vy:u,part:l,ox:n%a*l,oy:o%a*l}},x=(e,t,n,o,r)=>{let s=e[t]?.[n];if(s===void 0)return r;let a=Array.isArray(s)&&!se(s)?s:U(s,o);return a===void 0||a===null?r:a},Z=(e,t)=>{let n=X(e)??[0,0,0,1];return oe([n[0],n[1],n[2],n[3]*t])},Ze=(e,t)=>{if(e.layout?.visibility==="none")return!1;return t>=(e.minzoom??0)&&t<(e.maxzoom??24)},It=new Set(["butt","round","square"]),Nt=new Set(["bevel","miter","round"]),Et=(e)=>It.has(e),Tt=(e)=>Nt.has(e),Ot=(e)=>Et(e)?e:"butt",Bt=(e)=>Tt(e)?e:"miter",Jt=(e,t)=>{if(e.patterns.has(t))return e.patterns.get(t);let o=(()=>{let r=We(e,t);if(!r||!(r.icon.width>0)||!(r.icon.height>0))return;let{icon:s}=r,a=new OffscreenCanvas(s.width,s.height);return a.getContext("2d")?.drawImage(r.image,s.x,s.y,s.width,s.height,0,0,s.width,s.height),a})();return e.patterns.set(t,o),o},Ae=new Map,Dt=(e)=>{let t=Ae.get(e)?.pop()??new OffscreenCanvas(e,e),n=t.getContext("2d",{willReadFrequently:!0});if(!n)throw Error("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}},Ft=(e)=>{let t=Ae.get(e.width)??[];if(Ae.set(e.width,t),t.length<4)t.push(e)},Ut=(e,t,n)=>{if(n)return Promise.resolve(e.transferToImageBitmap());return createImageBitmap(t.getImageData(0,0,e.width,e.height),{premultiplyAlpha:"none"})},zt=async(e,t,n,o,r,s,a)=>{let i=Lt(e,t,n,o),u=await je(i.url,a);if(ee.has(s))return;let{canvas:c,g:l}=Dt(r);try{return await Ht(e,i,u,c,l,t,n,o,r,s,a)}finally{Ft(c)}},Ht=async(e,t,n,o,r,s,a,i,u,c,l)=>{let b=Math.max(0,s-1),d=u/256,v=!1,f=!1;for(let h of e.layers){if(!Ze(h,b))continue;let y={zoom:b,properties:{},type:"Unknown"};if(h.type==="background"){let k=x(h,"paint","background-color",y,"#000"),p=Number(x(h,"paint","background-opacity",y,1));if(r.fillStyle=Z(k,p),r.fillRect(0,0,u,u),(X(k)??[0,0,0,1])[3]*p>=1)f=!0;v=!0;continue}if(h.type==="raster"){let k=h.source===void 0?void 0:e.rasters[h.source];if(!k)continue;let p=Math.max(0,Math.min(s-(k.tileSize>=512?1:0),k.maxzoom)),w=2**(s-p),S=k.tiles.replace("{z}",String(p)).replace("{x}",String(Math.floor(a/w))).replace("{y}",String(Math.floor(i/w))),A=await Rt(S,l).catch(()=>{return});if(ee.has(c))return;if(!A)continue;let[g,C]=[A.width/w,A.height/w];r.globalAlpha=Number(x(h,"paint","raster-opacity",y,1)),r.drawImage(A,a%w*g,i%w*C,g,C,0,0,u,u),r.globalAlpha=1,v=!0;continue}let m=n?.get(h["source-layer"]??"");if(!m)continue;let I=u/(m.extent*t.part),[T,W]=[t.ox*m.extent,t.oy*m.extent],O=(k,p)=>{r.beginPath();for(let w of k.geometry){for(let S=0;S+1<w.length;S+=2){let[A,g]=[((w[S]??0)-T)*I,((w[S+1]??0)-W)*I];if(S===0)r.moveTo(A,g);else r.lineTo(A,g)}if(p)r.closePath()}},R=new Map,M=(k,p,w,S)=>{let A=R.get(p),g=A??Q(h[k]?.[p]);if(A===void 0)R.set(p,g);return x(h,k,p,g?w:y,S)};for(let k of m.features){let p=be(k,b);if(!ge(h.filter,p))continue;if(h.type==="fill-extrusion"&&k.type===3)O(k,!0),r.fillStyle=Z(M("paint","fill-extrusion-color",p,"#000"),Number(M("paint","fill-extrusion-opacity",p,1))),r.fill("evenodd"),v=!0;else if(h.type==="fill"&&k.type===3){let w=Number(M("paint","fill-opacity",p,1)),S=M("paint","fill-pattern",p,void 0);O(k,!0);let A=typeof S==="string"?We(e,S)?.icon:void 0,g=A&&typeof S==="string"&&Jt(e,S);if(A&&g){let C=r.createPattern(g,"repeat");if(C)C.setTransform(new DOMMatrix().scale(d/(A.pixelRatio??1))),r.globalAlpha=w,r.fillStyle=C,r.fill("evenodd"),r.globalAlpha=1}else{r.fillStyle=Z(M("paint","fill-color",p,"#000"),w),r.fill("evenodd");let C=M("paint","fill-outline-color",p,void 0);if(C!==void 0)r.strokeStyle=Z(C,w),r.lineWidth=d,r.setLineDash([]),r.stroke()}v=!0}else if(h.type==="line"&&k.type!==1){let w=Number(M("paint","line-width",p,1));if(w<=0)continue;let S=Number(M("paint","line-gap-width",p,0));r.strokeStyle=Z(M("paint","line-color",p,"#000"),Number(M("paint","line-opacity",p,1))),r.lineWidth=(S>0?S+2*w:w)*d,r.lineCap=Ot(M("layout","line-cap",p,"butt")),r.lineJoin=Bt(M("layout","line-join",p,"miter"));let A=M("paint","line-dasharray",p,void 0);r.setLineDash(Array.isArray(A)?A.map((g)=>Number(g)*w*d):[]),O(k,k.type===3),r.stroke(),v=!0}else if(h.type==="circle"&&k.type===1){let w=Number(M("paint","circle-radius",p,5))*d;r.fillStyle=Z(M("paint","circle-color",p,"#000"),Number(M("paint","circle-opacity",p,1)));let S=Number(M("paint","circle-stroke-width",p,0))*d;r.strokeStyle=Z(M("paint","circle-stroke-color",p,"#000"),Number(M("paint","circle-stroke-opacity",p,1))),r.lineWidth=S;for(let A of k.geometry)for(let g=0;g+1<A.length;g+=2)if(r.beginPath(),r.arc(((A[g]??0)-T)*I,((A[g+1]??0)-W)*I,w,0,2*Math.PI),r.fill(),S>0)r.stroke();v=!0}}}if(!v&&!n)return null;return Ut(o,r,f)},Ke=(e,t,n)=>{let o=Boolean(x(e,"layout",`${t}-allow-overlap`,n,!1)),r=Boolean(x(e,"layout",`${t}-ignore-placement`,n,!1));if(o&&r)return!0;if(o)return"allow";return r?"ignore":!1},Xe=(e,t)=>Array.isArray(e)?[Number(e[0]??t[0]),Number(e[1]??t[1])]:t,$t=(e)=>{let t=(Array.isArray(e)?e:[e]).map((a)=>Number(a)||0),[n=0,o=n,r=n,s=o]=t;return[n,o,r,s]},qt=(e,t)=>{if(t==="uppercase")return e.toUpperCase();if(t==="lowercase")return e.toLowerCase();return e},_t=(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 o=[];if(!(n>0)||!(t>0))return o;let r=Math.min(t/2,n/2),s=0;for(let a=2;a+1<e.length;a+=2){let[i,u,c,l]=[e[a-2]??0,e[a-1]??0,e[a]??0,e[a+1]??0],b=Math.hypot(c-i,l-u);while(b>0&&r<=s+b){let d=(r-s)/b;o.push([i+(c-i)*d,u+(l-u)*d,i,u,c,l]),r+=t}s+=b}return o},K=(e,t,n,o,r,s)=>{let a=2**e;return[$e((t+r/o)/a),qe((n+s/o)/a)]},Wt=(e,t,n,o,r)=>{let s=x(e,"layout","icon-rotation-alignment",n,"auto"),a=String(x(e,"layout","icon-text-fit",n,"none")),i=x(e,"layout","icon-text-fit-padding",n,[0,0,0,0]);return{image:t,size:Q(e.layout?.["icon-size"])?Number(x(e,"layout","icon-size",n,1)):r(e),anchor:String(x(e,"layout","icon-anchor",n,"center")),offset:Xe(x(e,"layout","icon-offset",n,[0,0]),[0,0]),rotate:Number(x(e,"layout","icon-rotate",n,0))||0,alignment:s==="map"||s==="auto"&&o==="line"?"map":"viewport",overlap:Ke(e,"icon",n),optional:Boolean(x(e,"layout","icon-optional",n,!1)),fit:a==="width"||a==="height"||a==="both"?a:"none",padding:$t(i),color:String(x(e,"paint","icon-color",n,"#000")),opacity:Number(x(e,"paint","icon-opacity",n,1))}},Vt=async(e,t,n,o,r,s,a=t)=>{let i=e.tiles.replace("{z}",String(t)).replace("{x}",String(n)).replace("{y}",String(o)),u=await je(i,s);if(!u||ee.has(r))return[];let c=[],l=new Map,b=(f)=>{let h=l.get(f);if(h!==void 0)return h;let y=f.layout?.["text-size"]??16,m=se(y)?we(y):y;return l.set(f,m),m},d=new Map,v=(f)=>{let h=d.get(f);if(h!==void 0)return h;let y=f.layout?.["icon-size"]??1,m=se(y)?we(y):y;return d.set(f,m),m};return e.layers.forEach((f,h)=>{let y=f.layout??{};if(f.type!=="symbol"||!Ze(f,a))return;if(y["text-field"]===void 0&&y["icon-image"]===void 0)return;let m=u.get(f["source-layer"]??"");if(!m)return;let I={zoom:a,properties:{},type:"Unknown"},T=x(f,"layout","symbol-placement",I,"point")==="line"?"line":"point",W=T==="line"&&x(f,"layout","text-rotation-alignment",I,"auto")!=="viewport";for(let O of m.features){let R=be(O,a);if(!ge(f.filter,R))continue;let M=ye(y["text-field"],R).trim(),k=ye(y["icon-image"],R).trim();if(!M&&!k)continue;let p=qt(M,x(f,"layout","text-transform",R,"none")),w=x(f,"layout","text-font",R,["Noto Sans Regular"]),S=He(Array.isArray(w)&&typeof w[0]==="string"?w[0]:"Noto Sans Regular"),A={layer:h,text:p,font:S,size:Q(f.layout?.["text-size"])?Number(x(f,"layout","text-size",R,16)):b(f),color:String(x(f,"paint","text-color",R,"#000")),haloColor:String(x(f,"paint","text-halo-color",R,"rgba(0,0,0,0)")),haloWidth:Number(x(f,"paint","text-halo-width",R,0)),anchor:String(x(f,"layout","text-anchor",R,"center")),offset:Xe(x(f,"layout","text-offset",R,[0,0]),[0,0]),maxWidth:Number(x(f,"layout","text-max-width",R,10)),lineHeight:Number(x(f,"layout","text-line-height",R,1.2)),overlap:Ke(f,"text",R),...W?{textAlong:W}:{},...x(f,"layout","text-optional",R,!1)?{textOptional:!0}:{},...k?{icon:Wt(f,k,R,T,v)}:{}};if(O.type===1)for(let g of O.geometry)for(let C=0;C+1<g.length;C+=2){let[N,P]=[g[C]??0,g[C+1]??0];if(N<0||P<0||N>=m.extent||P>=m.extent)continue;let[E,L]=K(t,n,o,m.extent,N,P);c.push({...A,lon:E,lat:L})}else if(!p&&T==="line"){let g=Number(x(f,"layout","symbol-spacing",R,250))*m.extent/(512*2**(a-t));for(let C of O.geometry)for(let[N=0,P=0,E=0,L=0,D=0,B=0]of _t(C,Math.max(g,1))){if(N<0||P<0||N>=m.extent||P>=m.extent)continue;let[J,z]=K(t,n,o,m.extent,N,P),[F,V]=K(t,n,o,m.extent,D,B),[ue,ce]=K(t,n,o,m.extent,E,L);c.push({...A,lon:J,lat:z,along:[F-ue,V-ce]})}}else{let g,C=0;for(let P of O.geometry){let E=0;for(let L=2;L+1<P.length;L+=2)E+=Math.hypot((P[L]??0)-(P[L-2]??0),(P[L+1]??0)-(P[L-1]??0));if(E>C)C=E,g=P}if(!g||C<m.extent/32)continue;let N=C/2;for(let P=2;P+1<g.length;P+=2){let[E,L,D,B]=[g[P-2]??0,g[P-1]??0,g[P]??0,g[P+1]??0],J=Math.hypot(D-E,B-L);if(J>=N&&J>0){let[z,F]=[E+(D-E)*N/J,L+(B-L)*N/J];if(z<0||F<0||z>=m.extent||F>=m.extent)break;let[V,ue]=K(t,n,o,m.extent,z,F),[ce,Ye]=K(t,n,o,m.extent,D,B),[Ge,Qe]=K(t,n,o,m.extent,E,L);c.push({...A,lon:V,lat:ue,...T==="line"?{along:[ce-Ge,Ye-Qe]}:{}});break}N-=J}}}}),c},_=(e,t=[])=>self.postMessage(e,t);self.onmessage=async({data:e})=>{if(e.type==="headers"){Me(e.rules);return}if(e.type==="init"){if(e.workers!==void 0)ae.capacity=Ct(e.workers);ie.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"){ie.get(e.key)?.sprites.forEach((n)=>{n.image.close()}),ie.delete(e.key);return}if(e.type==="abort"){if(xe.has(e.id))ee.add(e.id);ke.get(e.id)?.abort();return}if(e.type==="heights"||e.type==="reproject"){await jt(e);return}xe.add(e.id);let t=ie.get(e.key);try{if(!t)throw Error(`no renderer ${e.key}`);if(e.type==="render"){let n=await zt(t,e.z,e.x,e.y,e.size,e.id,e.priority);if(n)_({id:e.id,image:n},[n]);else _({id:e.id,missing:!0})}else _({id:e.id,labels:await Vt(t,e.z,e.x,e.y,e.id,e.priority,e.zoom)})}catch(n){_({id:e.id,error:String(n)})}finally{xe.delete(e.id),ee.delete(e.id)}};var jt=async(e)=>{let t=new AbortController;ke.set(e.id,t);try{if(e.type==="heights"){let n=await Ne(e.url,e.encoding,e.floor,t.signal,Pt);if(n)_({id:e.id,heights:n},[n.buffer]);else _({id:e.id,missing:!0})}else{_e.cache.capacity=e.cached;let n=await _e.draw(e.job,t.signal);if(n)_({id:e.id,image:n},[n]);else _({id:e.id,missing:!0})}}catch(n){_({id:e.id,error:String(n)})}finally{ke.delete(e.id)}};export{Ct as cacheShare,_t as lineAnchors,Ut as tileImage};
2
2
 
3
- //# debugId=5076A77936D7FFEB64756E2164756E21
3
+ //# debugId=0F7ADB5901D8D38D64756E2164756E21
4
4
  //# sourceMappingURL=basemap.worker.js.map