@deck.gl-community/geo-layers 9.2.8 → 9.3.0-beta.2

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 (82) hide show
  1. package/dist/global-grid-layer/global-grid-cluster-layer.d.ts.map +1 -1
  2. package/dist/global-grid-layer/global-grid-cluster-layer.js +1 -0
  3. package/dist/global-grid-layer/global-grid-cluster-layer.js.map +1 -1
  4. package/dist/index.cjs +1799 -7
  5. package/dist/index.cjs.map +4 -4
  6. package/dist/index.d.ts +7 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +3 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/shared-tile-2d-layer/deck-tile-traversal.d.ts +5 -0
  11. package/dist/shared-tile-2d-layer/deck-tile-traversal.d.ts.map +1 -0
  12. package/dist/shared-tile-2d-layer/deck-tile-traversal.js +173 -0
  13. package/dist/shared-tile-2d-layer/deck-tile-traversal.js.map +1 -0
  14. package/dist/shared-tile-2d-layer/deck-tileset-adapter.d.ts +26 -0
  15. package/dist/shared-tile-2d-layer/deck-tileset-adapter.d.ts.map +1 -0
  16. package/dist/shared-tile-2d-layer/deck-tileset-adapter.js +174 -0
  17. package/dist/shared-tile-2d-layer/deck-tileset-adapter.js.map +1 -0
  18. package/dist/shared-tile-2d-layer/index.d.ts +4 -0
  19. package/dist/shared-tile-2d-layer/index.d.ts.map +1 -0
  20. package/dist/shared-tile-2d-layer/index.js +6 -0
  21. package/dist/shared-tile-2d-layer/index.js.map +1 -0
  22. package/dist/shared-tile-2d-layer/shared-tile-2d-layer.d.ts +151 -0
  23. package/dist/shared-tile-2d-layer/shared-tile-2d-layer.d.ts.map +1 -0
  24. package/dist/shared-tile-2d-layer/shared-tile-2d-layer.js +422 -0
  25. package/dist/shared-tile-2d-layer/shared-tile-2d-layer.js.map +1 -0
  26. package/dist/shared-tile-2d-layer/shared-tile-2d-view.d.ts +57 -0
  27. package/dist/shared-tile-2d-layer/shared-tile-2d-view.d.ts.map +1 -0
  28. package/dist/shared-tile-2d-layer/shared-tile-2d-view.js +253 -0
  29. package/dist/shared-tile-2d-layer/shared-tile-2d-view.js.map +1 -0
  30. package/dist/shared-tile-2d-layer/url-template.d.ts +9 -0
  31. package/dist/shared-tile-2d-layer/url-template.d.ts.map +1 -0
  32. package/dist/shared-tile-2d-layer/url-template.js +25 -0
  33. package/dist/shared-tile-2d-layer/url-template.js.map +1 -0
  34. package/dist/tile-grid-layer/tile-grid-layer.d.ts +47 -0
  35. package/dist/tile-grid-layer/tile-grid-layer.d.ts.map +1 -0
  36. package/dist/tile-grid-layer/tile-grid-layer.js +94 -0
  37. package/dist/tile-grid-layer/tile-grid-layer.js.map +1 -0
  38. package/dist/tile-source-layer/tile-source-layer.d.ts +2 -2
  39. package/dist/tile-source-layer/tile-source-layer.d.ts.map +1 -1
  40. package/dist/tileset/adapter.d.ts +38 -0
  41. package/dist/tileset/adapter.d.ts.map +1 -0
  42. package/dist/tileset/adapter.js +5 -0
  43. package/dist/tileset/adapter.js.map +1 -0
  44. package/dist/tileset/index.cjs +721 -0
  45. package/dist/tileset/index.cjs.map +7 -0
  46. package/dist/tileset/index.d.ts +8 -0
  47. package/dist/tileset/index.d.ts.map +1 -0
  48. package/dist/tileset/index.js +7 -0
  49. package/dist/tileset/index.js.map +1 -0
  50. package/dist/tileset/tile-2d-header.d.ts +71 -0
  51. package/dist/tileset/tile-2d-header.d.ts.map +1 -0
  52. package/dist/tileset/tile-2d-header.js +168 -0
  53. package/dist/tileset/tile-2d-header.js.map +1 -0
  54. package/dist/tileset/tileset-2d.d.ts +210 -0
  55. package/dist/tileset/tileset-2d.d.ts.map +1 -0
  56. package/dist/tileset/tileset-2d.js +531 -0
  57. package/dist/tileset/tileset-2d.js.map +1 -0
  58. package/dist/tileset/types.d.ts +44 -0
  59. package/dist/tileset/types.d.ts.map +1 -0
  60. package/dist/tileset/types.js +5 -0
  61. package/dist/tileset/types.js.map +1 -0
  62. package/dist/utils/memoize.d.ts +2 -0
  63. package/dist/utils/memoize.d.ts.map +1 -0
  64. package/dist/utils/memoize.js +36 -0
  65. package/dist/utils/memoize.js.map +1 -0
  66. package/package.json +17 -11
  67. package/src/global-grid-layer/global-grid-cluster-layer.ts +1 -1
  68. package/src/index.ts +14 -0
  69. package/src/shared-tile-2d-layer/deck-tile-traversal.ts +247 -0
  70. package/src/shared-tile-2d-layer/deck-tileset-adapter.ts +262 -0
  71. package/src/shared-tile-2d-layer/index.ts +7 -0
  72. package/src/shared-tile-2d-layer/shared-tile-2d-layer.ts +681 -0
  73. package/src/shared-tile-2d-layer/shared-tile-2d-view.ts +339 -0
  74. package/src/shared-tile-2d-layer/url-template.ts +40 -0
  75. package/src/tile-grid-layer/tile-grid-layer.ts +158 -0
  76. package/src/tile-source-layer/tile-source-layer.ts +2 -2
  77. package/src/tileset/adapter.ts +47 -0
  78. package/src/tileset/index.ts +22 -0
  79. package/src/tileset/tile-2d-header.ts +210 -0
  80. package/src/tileset/tileset-2d.ts +705 -0
  81. package/src/tileset/types.ts +38 -0
  82. package/src/utils/memoize.ts +38 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/index.ts", "../src/tile-source-layer/tile-source-layer.ts", "../src/global-grid-layer/global-grid-layer.ts", "../src/global-grid-systems/utils/geometry-utils.ts", "../src/global-grid-systems/grids/a5-grid.ts", "../src/global-grid-systems/utils/hex-utils.ts", "../src/global-grid-systems/h3-js-bigint/h3-js-bigint.ts", "../src/global-grid-systems/grids/h3-grid.ts", "../src/global-grid-systems/s2-geometry/s2-token.ts", "../src/global-grid-systems/s2-geometry/s2-geometry.ts", "../src/global-grid-systems/s2-geometry/s2-to-boundary.ts", "../src/global-grid-systems/grids/s2-grid.ts", "../src/global-grid-systems/grids/geohash-grid.ts", "../src/global-grid-systems/grids/quadkey-grid.ts"],
4
- "sourcesContent": ["// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport type {TileSourceLayerProps} from './tile-source-layer/tile-source-layer';\nexport {TileSourceLayer} from './tile-source-layer/tile-source-layer';\n\nexport {GlobalGridLayer, type GlobalGridLayerProps} from './global-grid-layer/global-grid-layer';\n\nexport {type GlobalGrid} from './global-grid-systems/grids/global-grid';\nexport {A5Grid} from './global-grid-systems/grids/a5-grid';\nexport {H3Grid} from './global-grid-systems/grids/h3-grid';\nexport {S2Grid} from './global-grid-systems/grids/s2-grid';\nexport {GeohashGrid} from './global-grid-systems/grids/geohash-grid';\nexport {QuadkeyGrid} from './global-grid-systems/grids/quadkey-grid';\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer, Layer} from '@deck.gl/core';\nimport type {TileLayerProps} from '@deck.gl/geo-layers';\nimport {TileLayer} from '@deck.gl/geo-layers';\nimport {BitmapLayer, GeoJsonLayer, PathLayer} from '@deck.gl/layers';\nimport type {TileSource} from '@loaders.gl/loader-utils';\n\n/* global window */\nconst devicePixelRatio = (typeof window !== 'undefined' && window.devicePixelRatio) || 1;\n\nexport type TileSourceLayerProps = TileLayerProps & {\n tileSource: TileSource<any>;\n showTileBorders?: boolean;\n};\n\n/**\n * A Deck.gl layer that renders a tile source\n * Autodiscovers type of content (vector tile, bitmap, ...)\n * Can render debug borders around tiles\n * TODO - Change debug border color based on zoom level\n */\nexport class TileSourceLayer extends CompositeLayer<TileSourceLayerProps> {\n static layerName = 'TileSourceLayer';\n static defaultProps = {\n ...TileLayer.defaultProps,\n showTileBorders: true\n };\n\n state: {\n tileSource: TileSource<any> | null;\n } = undefined!;\n\n initializeState() {\n this.setState({\n tileSource: null\n });\n }\n\n updateState({props, changeFlags}) {\n this.setState({\n tileSource: props.tileSource\n });\n }\n\n renderLayers() {\n const {tileSource, showTileBorders, metadata, onTilesLoad} = this.props as any;\n const minZoom = metadata?.minZoom || 0;\n const maxZoom = metadata?.maxZoom || 30;\n\n return [\n new TileLayer({\n // HACK: Trigger new layer via id prop to force clear tile cache\n id: String(tileSource.url),\n getTileData: tileSource.getTileData,\n // Assume the pmtiles file support HTTP/2, so we aren't limited by the browser to a certain number per domain.\n maxRequests: 20,\n\n pickable: true,\n onViewportLoad: onTilesLoad,\n autoHighlight: showTileBorders,\n highlightColor: [60, 60, 60, 40],\n minZoom,\n maxZoom,\n tileSize: 256,\n // TOOD - why is this needed?\n zoomOffset: devicePixelRatio === 1 ? -1 : 0,\n renderSubLayers: renderSubLayers as any,\n\n // Custom prop\n tileSource,\n showTileBorders\n })\n ];\n }\n}\n\nfunction renderSubLayers(\n props: TileSourceLayerProps & {tile: {index; bbox: {west; south; east; north}}}\n) {\n const {\n tileSource,\n showTileBorders,\n minZoom,\n maxZoom,\n tile: {\n index: {z: zoom},\n bbox: {west, south, east, north}\n }\n } = props as any;\n\n const layers: Layer[] = [];\n\n const borderColor = zoom <= minZoom || zoom >= maxZoom ? [255, 0, 0, 255] : [0, 0, 255, 255];\n\n switch (tileSource.mimeType) {\n case 'application/vnd.mapbox-vector-tile':\n layers.push(\n new GeoJsonLayer({\n id: `${props.id}-geojson`,\n data: props.data as any,\n pickable: true,\n getFillColor: [0, 190, 80, 255],\n lineWidthScale: 500,\n lineWidthMinPixels: 0.5\n })\n );\n break;\n\n case 'image/png':\n case 'image/jpeg':\n case 'image/webp':\n case 'image/avif':\n layers.push(\n new BitmapLayer(\n props as any,\n {\n data: null,\n image: props.data,\n bounds: [west, south, east, north],\n pickable: true\n } as any\n )\n );\n break;\n\n default:\n // eslint-disable-next-line no-console\n console.error('Unknown tile mimeType', tileSource?.mimeType);\n }\n\n // Debug tile borders\n if (showTileBorders) {\n layers.push(\n new PathLayer({\n id: `${props.id}-border`,\n data: [\n [\n [west, north],\n [west, south],\n [east, south],\n [east, north],\n [west, north]\n ]\n ],\n getPath: (d) => d,\n getColor: borderColor as any,\n widthMinPixels: 4\n })\n );\n }\n\n return layers;\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {type AccessorFunction, type DefaultProps} from '@deck.gl/core';\nimport {_GeoCellLayer, type _GeoCellLayerProps} from '@deck.gl/geo-layers';\nimport {GlobalGrid} from '../global-grid-systems/grids/global-grid';\nimport {flattenPolygon} from '../global-grid-systems/utils/geometry-utils';\n\n/** All properties supported by GlobalGridLayer. */\nexport type GlobalGridLayerProps<DataT = unknown> = _GlobalGridLayerProps<DataT> &\n _GeoCellLayerProps<DataT>;\n\n/** Properties added by GlobalGridLayer. */\ntype _GlobalGridLayerProps<DataT> = {\n /** The DGGS decoder to use. */\n globalGrid: GlobalGrid;\n /** Called for each data object to retrieve the DGGS cell identifier. By default, it reads `cellId` property of data object. */\n getCellId?: AccessorFunction<DataT, string | bigint>;\n};\n\n/** Render filled and/or stroked polygons based on the specified DGGS geospatial indexing system. */\nexport class GlobalGridLayer<DataT = any, ExtraProps extends {} = {}> extends _GeoCellLayer<\n DataT,\n Required<_GlobalGridLayerProps<DataT>> & ExtraProps\n> {\n static layerName = 'GlobalGridLayer';\n static defaultProps: DefaultProps<GlobalGridLayerProps> = {\n getCellId: {type: 'accessor', value: (d: any) => d.cellId},\n globalGrid: {type: 'object', compare: true, value: undefined!}\n };\n\n initializeState(): void {\n this.props.globalGrid?.initialize?.();\n }\n\n indexToBounds(): Partial<_GeoCellLayer['props']> | null {\n const {data, getCellId} = this.props;\n\n return {\n data,\n _normalize: false,\n _windingOrder: 'CCW',\n positionFormat: 'XY',\n getPolygon: (x: DataT, objectInfo) => {\n const {globalGrid} = this.props;\n const cell = getCellId(x, objectInfo);\n const boundary = globalGrid.cellToBoundary(cell);\n boundary.push(boundary[0]);\n return flattenPolygon(boundary);\n }\n };\n }\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {type CoordPair} from '../h3-js-bigint/h3-js-bigint';\n\n// normalize longitudes w.r.t center (refLng), when not provided first vertex\nexport function normalizeLongitudes(vertices: CoordPair[], refLng?: number): void {\n refLng = refLng === undefined ? vertices[0][0] : refLng;\n for (const pt of vertices) {\n const deltaLng = pt[0] - refLng;\n if (deltaLng > 180) {\n pt[0] -= 360;\n } else if (deltaLng < -180) {\n pt[0] += 360;\n }\n }\n}\n\nexport function flattenPolygon(vertices: number[][]): Float64Array {\n const positions = new Float64Array(vertices.length * 2);\n let i = 0;\n for (const pt of vertices) {\n positions[i++] = pt[0];\n positions[i++] = pt[1];\n }\n return positions;\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// import {type Bounds2D} from '@math.gl/types';\nimport {type GlobalGrid} from './global-grid';\nimport {cellToBoundary, cellToLonLat, lonLatToCell} from 'a5-js';\nimport {hexToBigInt} from '../utils/hex-utils';\n\n// TODO - internal types in a5-js\ntype Degrees = number & {\n __brand: 'Degrees';\n};\ntype LonLat = [longitude: Degrees, latitude: Degrees] & {\n __brand: 'LonLat';\n};\n\n/**\n * \"Standardized\" API for working with A5 DGGS tokens.\n * @note Copy of same type in math.gl. They are structurally identical. Will be replaced by an import in the future.\n */\nexport const A5Grid = {\n name: 'A5',\n hasNumericRepresentation: true,\n\n tokenToCell: (token: string) => hexToBigInt(token),\n lngLatToCell: (lngLat: [number, number], resolution: number) =>\n lonLatToCell(lngLat as LonLat, resolution),\n\n cellToToken: (cell: string | bigint) => (typeof cell === 'string' ? cell : cell.toString(16)),\n cellToLngLat: (cell: string | bigint) => cellToLonLat(getBigInt(cell)),\n cellToBoundary: (cell: string | bigint) => cellToBoundary(getBigInt(cell))\n} as const satisfies GlobalGrid;\n\n/** Helper function to convert cells to bigints */\nconst getBigInt = (value: string | bigint): bigint => {\n return typeof value === 'string' ? hexToBigInt(value) : value;\n};\n", "/**\n * Converts a hexadecimal string (with or without \u201C0x\u201D prefix) to a bigint.\n * @param hex - The hex string representation (e.g., \"0x1a2b\", \"FF\", \"00ff\")\n * @returns The corresponding bigint value.\n * @throws {Error} If the input is not a valid hex string.\n */\nexport function hexToBigInt(hex: string): bigint {\n if (typeof hex !== 'string') {\n throw new Error(`hexToBigInt: expected string, got ${typeof hex}`);\n }\n\n let s = hex.trim();\n if (s.startsWith('0x') || s.startsWith('0X')) {\n s = s.slice(2);\n }\n\n if (s === '') {\n throw new Error(`hexToBigInt: empty hex string`);\n }\n\n // validate: only hex digits\n if (!/^[0-9A-Fa-f]+$/.test(s)) {\n throw new Error(`hexToBigInt: invalid hex string \u201C${hex}\u201D`);\n }\n\n // Optional: normalize even length by prepending a zero if odd\n if (s.length % 2 === 1) {\n s = `0${s}`;\n }\n\n // Use BigInt conversion from string with 0x prefix\n try {\n return BigInt(`0x${s}`);\n } catch (e) {\n throw new Error(\n `hexToBigInt: cannot convert hex string \u201C${hex}\u201D to bigint: ${(e as Error).message}`\n );\n }\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// A thin wrapper around h3-js that support BigInts\n// Note: incurs some overhead as we need to convert between BigInt and SplitLong\n\nimport {\n type CoordPair,\n type SplitLong,\n latLngToCell,\n cellToBoundary as _cellToBoundary,\n cellToLatLng as _cellToLatLng,\n cellsToMultiPolygon as _cellsToMultiPolygon,\n h3IndexToSplitLong as _h3IndexToSplitLong\n // splitLongToH3Index as _splitLongToH3Index\n} from 'h3-js';\n\nexport {type CoordPair, type SplitLong, latLngToCell};\n\nexport type H3IndexInput = bigint | string | SplitLong;\n\nconst scratchSplitLong: SplitLong = [0, 0];\n\nexport function h3IndexToSplitLong(h3Index: H3IndexInput, target?: SplitLong): SplitLong {\n if (typeof h3Index === 'bigint') {\n return bigIntToSplitLong(h3Index, target ?? [0, 0]);\n }\n return _h3IndexToSplitLong(h3Index);\n}\n\nexport function h3IndexToBigInt(h3Index: H3IndexInput): bigint {\n if (typeof h3Index === 'bigint') {\n return h3Index;\n }\n const splitLong = h3IndexToSplitLong(h3Index, scratchSplitLong);\n return splitLongToBigInt(splitLong);\n}\n\nexport function cellToLatLng(h3Index: H3IndexInput): [number, number] {\n const splitLong = h3IndexToSplitLong(h3Index, scratchSplitLong);\n const latLng = _cellToLatLng(splitLong);\n return latLng;\n}\n\nexport function cellToBoundary(h3Index: H3IndexInput, formatAsGeoJson?: boolean): CoordPair[] {\n const splitLong = h3IndexToSplitLong(h3Index, scratchSplitLong);\n const vertices = _cellToBoundary(splitLong, formatAsGeoJson);\n return vertices;\n}\n\nexport function cellsToMultiPolygon(\n h3Indexes: H3IndexInput[],\n formatAsGeoJson?: boolean\n): CoordPair[][][] {\n const splitLongs = h3Indexes.map((h3Index) => h3IndexToSplitLong(h3Index));\n const polygons = _cellsToMultiPolygon(splitLongs, formatAsGeoJson);\n return polygons;\n}\n\n// HELPERS\n\n/**\n * Splits a bigint into a 2-element array of 32-bit numbers.\n * @param value - The bigint to split.\n * @returns A 2-element array containing the high and low 32-bit numbers.\n */\nfunction bigIntToSplitLong(value: bigint, target: SplitLong = [0, 0]): SplitLong {\n // Mask lower 32 bits\n target[0] = Number(value & 0xffffffffn); // BigInt & BigInt \u21D2 BigInt :contentReference[oaicite:2]{index=2}\n // Shift right to get upper 32 bits\n target[1] = Number((value >> 32n) & 0xffffffffn); // BigInt >> BigInt \u21D2 BigInt :contentReference[oaicite:3]{index=3}\n return target;\n}\n\n/**\n * Joins two 32-bit numbers into a bigint.\n * @param high - The high 32-bit number.\n * @param low - The low 32-bit number.\n * @returns The combined bigint.\n */\nfunction splitLongToBigInt([low, high]: SplitLong): bigint {\n // Shift high half back and OR with low half\n return (BigInt(high) << 32n) | BigInt(low); // BigInt << BigInt \u21D2 BigInt; BigInt | BigInt \u21D2 BigInt :contentReference[oaicite:4]{index=4}\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {type GlobalGrid} from './global-grid';\nimport {\n latLngToCell,\n cellToBoundary,\n cellToLatLng,\n cellsToMultiPolygon,\n h3IndexToBigInt\n} from '../h3-js-bigint/h3-js-bigint';\n\n/**\n * \"Standardized\" API for working with H3 DGGS tokens.\n * @note Inspired by similar work in math.gl. May replace by an import in the future.\n */\nexport const H3Grid = {\n name: 'H3',\n hasNumericRepresentation: true,\n\n // See `main/bundle.ts`, installs a check for the H3 library.\n initialize: () => {},\n\n tokenToCell: (token: string) => h3IndexToBigInt(token),\n\n lngLatToToken: (lngLat: [number, number], resolution: number) =>\n latLngToCell(lngLat[1], lngLat[0], resolution),\n lngLatToCell: (lngLat: [number, number], resolution: number) =>\n h3IndexToBigInt(latLngToCell(lngLat[1], lngLat[0], resolution)),\n\n cellToLngLat: (cell: string | bigint) => reverseLatLngInPlace(cellToLatLng(cell)),\n cellToBoundary: (cell: string | bigint) => cellToBoundary(cell),\n cellsToBoundaryMultiPolygon: (cells: string[] | bigint[]) => cellsToMultiPolygon(cells, true)\n} as const satisfies GlobalGrid;\n\n// HELPERS\n\n/** Reverse the latitude and longitude in place to avoid minting new arrays. */\nfunction reverseLatLngInPlace(latLng: [number, number]): [number, number] {\n const temp = latLng[0];\n latLng[0] = latLng[1];\n latLng[1] = temp;\n return latLng;\n}\n", "// math.gl\n// SPDX-License-Identifier: MIT and Apache-2.0\n// Copyright (c) vis.gl contributors\n\n// s2-geometry is a pure JavaScript port of Google/Niantic's S2 Geometry library\n// which is perfect since it works in the browser.\n\n// const MAXIMUM_TOKEN_LENGTH = 16;\n\n// INDEX CALCULATIONS\n\n/**\n * Given an S2 token (String) this function convert the token to 64 bit id (Index)\n * 'X' is the empty cell\n * https://github.com/google/s2-geometry-library-java/blob/c04b68bf3197a9c34082327eeb3aec7ab7c85da1/src/com/google/common/geometry/S2CellId.java#L439\n */\nexport function getS2IndexFromToken(token: string): bigint {\n if (token === 'X') {\n token = '';\n }\n // pad token with zeros to make the length 16\n const paddedToken = token.padEnd(16, '0');\n return BigInt(`0x${paddedToken}`);\n}\n\n/**\n * Convert a 64 bit number to a string token\n * 'X' is the empty cell\n */\nexport function getS2TokenFromIndex(cellId: bigint): string {\n if (cellId === 0n) {\n return 'X';\n }\n let numZeroDigits = countTrailingZeros(cellId);\n\n const remainder = numZeroDigits % 4;\n numZeroDigits = (numZeroDigits - remainder) / 4;\n const trailingZeroHexChars = numZeroDigits;\n numZeroDigits *= 4;\n\n const x = cellId >> BigInt(numZeroDigits);\n const hexString = x.toString(16).replace(/0+$/, '');\n const zeroString = Array(17 - trailingZeroHexChars - hexString.length).join('0');\n return zeroString + hexString;\n}\n\nexport function getS2ChildIndex(s2Index: bigint, index: number): bigint {\n // Shift sentinel bit 2 positions to the right.\n const newLsb = lsb(s2Index) >> 2n;\n // Insert child index before the sentinel bit.\n const childCellId: bigint = s2Index + BigInt(2 * index + 1 - 4) * newLsb;\n return childCellId;\n}\n\n/**\n * Return the lowest-numbered bit that is on for this cell id\n * @private\n */\nfunction lsb(cellId: bigint): bigint {\n return cellId & (cellId + 1n); // eslint-disable-line\n}\n\nfunction countTrailingZeros(n: bigint): number {\n let count = 0;\n while (n % 2n === 0n) {\n n /= 2n;\n count++;\n }\n return count;\n}\n", "// math.gl\n// SPDX-License-Identifier: MIT and ISC\n// Copyright (c) vis.gl contributors\n\n// math.gl, MIT license\n/*\nAdapted from s2-geometry under ISC License (ISC)\nCopyright (c) 2012-2016, Jon Atkins <github@jonatkins.com>\nCopyright (c) 2016, AJ ONeal <aj@daplie.com>\nPermission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n*/\n\nexport type S2Cell = {\n face: number;\n ij: [number, number];\n level: number;\n};\n\nexport function getS2Cell(s2Index: bigint): S2Cell {\n const key = toHilbertQuadkey(s2Index);\n const s2cell = fromHilbertQuadKey(key);\n return s2cell;\n}\n\n//\n// Functional Style\n//\nconst FACE_BITS = 3;\nconst MAX_LEVEL = 30;\nconst POS_BITS = 2 * MAX_LEVEL + 1; // 61 (60 bits of data, 1 bit lsb marker)\nconst RADIAN_TO_DEGREE = 180 / Math.PI;\n\n/*\n Original function taken from deck.gl doesn't support the case of (face <= 5)\n It's fixed here.\n*/\nexport function fromHilbertQuadKey(hilbertQuadkey: string): S2Cell {\n const parts = hilbertQuadkey.split('/');\n const face = parseInt(parts[0], 10);\n const position = parts[1];\n /*\n Fix for the case of level==0 that corresponds to (face <= 5)\n const maxLevel = position.length;\n let level;\n */\n const maxLevel = face > 5 ? position.length : 0;\n let level = 0;\n\n const point = [0, 0] as [number, number];\n\n for (let i = maxLevel - 1; i >= 0; i--) {\n level = maxLevel - i;\n const bit = position[i];\n let rx = 0;\n let ry = 0;\n if (bit === '1') {\n ry = 1;\n } else if (bit === '2') {\n rx = 1;\n ry = 1;\n } else if (bit === '3') {\n rx = 1;\n }\n\n const val = Math.pow(2, level - 1);\n rotateAndFlipQuadrant(val, point, rx, ry);\n\n point[0] += val * rx;\n point[1] += val * ry;\n }\n\n if (face % 2 === 1) {\n const t = point[0];\n point[0] = point[1];\n point[1] = t;\n }\n\n return {face, ij: point, level};\n}\n\nexport function toHilbertQuadkey(id: bigint): string {\n let bin = id.toString(2);\n\n while (bin.length < FACE_BITS + POS_BITS) {\n // eslint-disable-next-line prefer-template\n bin = '0' + bin;\n }\n\n // MUST come AFTER binstr has been left-padded with '0's\n const lsbIndex = bin.lastIndexOf('1');\n // substr(start, len)\n // substring(start, end) // includes start, does not include end\n const faceB = bin.substring(0, 3);\n // posB will always be a multiple of 2 (or it's invalid)\n const posB = bin.substring(3, lsbIndex);\n const levelN = posB.length / 2;\n\n const faceS = BigInt(`0b${faceB}`).toString(10);\n\n /*\n Here is a fix for the case when posB is an empty string that causes an exception in Long.fromString\n\n let posS = Long.fromString(posB, true, 2).toString(4);\n */\n let posS = '0';\n if (levelN !== 0) {\n // posB is not an empty string< because levelN!==0\n posS = BigInt(`0b${posB}`).toString(4);\n\n while (posS.length < levelN) {\n // eslint-disable-next-line prefer-template\n posS = '0' + posS;\n }\n }\n // Note, posS will be \"0\" for the level==0\n // TODO: Is it ok?\n\n return `${faceS}/${posS}`;\n}\n\nexport function IJToST(\n ij: [number, number],\n order: number,\n offsets: [number, number]\n): [number, number] {\n const maxSize = 1 << order;\n\n return [(ij[0] + offsets[0]) / maxSize, (ij[1] + offsets[1]) / maxSize];\n}\n\nfunction singleSTtoUV(st: number): number {\n if (st >= 0.5) {\n return (1 / 3.0) * (4 * st * st - 1);\n }\n return (1 / 3.0) * (1 - 4 * (1 - st) * (1 - st));\n}\n\nexport function STToUV(st: [number, number]): [number, number] {\n return [singleSTtoUV(st[0]), singleSTtoUV(st[1])];\n}\n\nexport function FaceUVToXYZ(face: number, [u, v]: [number, number]): [number, number, number] {\n switch (face) {\n case 0:\n return [1, u, v];\n case 1:\n return [-u, 1, v];\n case 2:\n return [-u, -v, 1];\n case 3:\n return [-1, -v, -u];\n case 4:\n return [v, -1, -u];\n case 5:\n return [v, u, -1];\n default:\n throw new Error('Invalid face');\n }\n}\n\nexport function XYZToLngLat([x, y, z]: [number, number, number]): [number, number] {\n const lat = Math.atan2(z, Math.sqrt(x * x + y * y));\n const lng = Math.atan2(y, x);\n\n return [lng * RADIAN_TO_DEGREE, lat * RADIAN_TO_DEGREE];\n}\n\nfunction rotateAndFlipQuadrant(n: number, point: [number, number], rx: number, ry: number): void {\n if (ry === 0) {\n if (rx === 1) {\n point[0] = n - 1 - point[0];\n point[1] = n - 1 - point[1];\n }\n\n const x = point[0];\n point[0] = point[1];\n point[1] = x;\n }\n}\n", "// math.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {IJToST, STToUV, FaceUVToXYZ, XYZToLngLat, getS2Cell} from './s2-geometry';\n\nconst MAX_RESOLUTION = 100;\n\nexport function getS2GeoBounds(s2Index: bigint): Float64Array {\n const s2Cell = getS2Cell(s2Index);\n return getS2GeoBoundsFromCell(s2Cell);\n}\n\n/**\n * The S2 cell edge is curved: http://s2geometry.io/\n * This is more prominent at lower levels\n * resolution is the number of segments to generate per edge.\n * We exponentially reduce resolution as level increases so it doesn't affect perf\n * when there are a large number of cells\n */\n// eslint-disable-next-line max-statements\nexport function getS2GeoBoundsFromCell({\n face,\n ij,\n level\n}: {\n face: number;\n ij: [number, number];\n level: number;\n}): Float64Array {\n const offsets = [\n [0, 0],\n [0, 1],\n [1, 1],\n [1, 0],\n [0, 0]\n ];\n\n const resolution = Math.max(1, Math.ceil(MAX_RESOLUTION * Math.pow(2, -level)));\n const result = new Float64Array(4 * resolution * 2 + 2);\n let ptIndex = 0;\n let prevLng = 0;\n\n for (let i = 0; i < 4; i++) {\n const offset = offsets[i].slice(0) as [number, number];\n const nextOffset = offsets[i + 1];\n const stepI = (nextOffset[0] - offset[0]) / resolution;\n const stepJ = (nextOffset[1] - offset[1]) / resolution;\n\n for (let j = 0; j < resolution; j++) {\n offset[0] += stepI;\n offset[1] += stepJ;\n // Cell can be represented by coordinates IJ, ST, UV, XYZ\n // http://s2geometry.io/devguide/s2cell_hierarchy#coordinate-systems\n const st = IJToST(ij, level, offset);\n const uv = STToUV(st);\n const xyz = FaceUVToXYZ(face, uv);\n const lngLat = XYZToLngLat(xyz);\n\n // Adjust longitude for Web Mercator projection\n if (Math.abs(lngLat[1]) > 89.999) {\n lngLat[0] = prevLng;\n }\n const deltaLng = lngLat[0] - prevLng;\n lngLat[0] += deltaLng > 180 ? -360 : deltaLng < -180 ? 360 : 0;\n\n result[ptIndex++] = lngLat[0];\n result[ptIndex++] = lngLat[1];\n prevLng = lngLat[0];\n }\n }\n // close the loop\n result[ptIndex++] = result[0];\n result[ptIndex++] = result[1];\n return result;\n}\n", "// math.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {type Bounds2D} from '@math.gl/types';\nimport {type GlobalGrid} from './global-grid';\n\nimport {getS2IndexFromToken, getS2TokenFromIndex} from '../s2-geometry/s2-token';\nimport {getS2GeoBounds} from '../s2-geometry/s2-to-boundary';\nimport {getS2Cell, IJToST, STToUV, FaceUVToXYZ, XYZToLngLat} from '../s2-geometry/s2-geometry';\n\n/** Decoder for the S2 DGGS */\nexport const S2Grid = {\n name: 'S2',\n hasNumericRepresentation: true,\n\n tokenToCell: (cell: string): bigint => getS2IndexFromToken(cell),\n cellToToken: (cell: string | bigint): string => getS2TokenFromIndex(getBigInt(cell)),\n cellToLngLat: (cell: string | bigint): [number, number] => getS2LngLat(getBigInt(cell)),\n cellToBoundary: (cell: string | bigint): [number, number][] => getS2Boundary(getBigInt(cell))\n\n // cellToBoundaryPolygonFlat: (cell: bigint): number[] => getS2BoundaryFlat(cell),\n // cellToBounds: (cell: bigint): Bounds2D => getS2Bounds(cell)\n} as const satisfies GlobalGrid;\n\n/** S2 functions operate on bigints */\nconst getBigInt = (value: string | bigint): bigint => {\n return typeof value === 'string' ? getS2IndexFromToken(value) : value;\n};\n\n/**\n * Retrieve S2 geometry center\n */\nexport function getS2LngLat(cell: bigint): [number, number] {\n const s2Cell = getS2Cell(cell);\n\n const st = IJToST(s2Cell.ij, s2Cell.level, [0.5, 0.5]);\n const uv = STToUV(st);\n const xyz = FaceUVToXYZ(s2Cell.face, uv);\n const lngLat = XYZToLngLat(xyz);\n\n return lngLat;\n}\n\n/**\n * Get a polygon with corner coordinates for an s2 cell\n * @param - This can be an S2 key or token\n * @return {Float64Array} - a simple polygon in flat array format: [lng0, lat0, lng1, lat1, ...]\n * - the polygon is closed, i.e. last coordinate is a copy of the first coordinate\n */\nfunction getS2BoundaryFlat(cell: bigint): number[] {\n const float64Array = getS2GeoBounds(cell);\n // TODO - inefficient\n return Array.from(float64Array);\n}\n\nfunction getS2Boundary(cell: bigint): [number, number][] {\n const flatBoundary = getS2BoundaryFlat(cell);\n const boundary: [number, number][] = [];\n for (let i = 0; i < flatBoundary.length; i += 2) {\n boundary.push([flatBoundary[i], flatBoundary[i + 1]]);\n }\n return boundary;\n}\n\nexport function getS2Bounds(cell: bigint): Bounds2D {\n const flatBoundary = getS2Boundary(cell);\n\n // We know that we have at least one point, no Infinity will be returned.\n let xmin = Infinity;\n let ymin = Infinity;\n let xmax = -Infinity;\n let ymax = -Infinity;\n\n for (const [x, y] of flatBoundary) {\n if (x < xmin) xmin = x;\n if (x > xmax) xmax = x;\n if (y < ymin) ymin = y;\n if (y > ymax) ymax = y;\n }\n\n return [\n [xmin, ymin],\n [xmax, ymax]\n ];\n}\n", "// math.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {type Bounds2D} from '@math.gl/types';\nimport {type GlobalGrid} from './global-grid';\n\n/** Decoder for the geohash global grid system */\nexport const GeohashGrid = {\n name: 'geohash',\n hasNumericRepresentation: false,\n\n cellToLngLat: (geohash: string | bigint): [number, number] =>\n getGeohashLngLat(getString(geohash)),\n cellToBoundary: (geohash: string | bigint): [number, number][] =>\n getGeohashBoundary(getString(geohash))\n // cellToBoundaryPolygonFlat: (geohash: bigint): number[] => getGeohashBoundaryFlat(geohash),\n // cellToBounds: (geohash: bigint): Bounds2D => getGeohashBounds(geohash)\n} as const satisfies GlobalGrid;\n\nconst getString = (geohash: string | bigint): string => {\n if (typeof geohash !== 'string') {\n throw new Error('geohash must be a string');\n }\n return geohash;\n};\n\nconst BASE32_CODES = '0123456789bcdefghjkmnpqrstuvwxyz';\nconst BASE32_CODES_DICT: Record<string, number> = {};\nfor (let i = 0; i < BASE32_CODES.length; i++) {\n BASE32_CODES_DICT[BASE32_CODES.charAt(i)] = i;\n}\n\nconst MIN_LAT = -90;\nconst MAX_LAT = 90;\nconst MIN_LON = -180;\nconst MAX_LON = 180;\n\n/** Return center lng,lat of geohash cell */\nfunction getGeohashLngLat(geohash: string): [number, number] {\n const [[s, w], [n, e]] = getGeohashBounds(geohash);\n return [(e + w) / 2, (n + s) / 2];\n}\n\n/** Return boundary polygon of geohash cell as lng,lat array */\nfunction getGeohashBoundary(geohash: string): [number, number][] {\n const [[s, w], [n, e]] = getGeohashBounds(geohash);\n return [\n [e, n],\n [e, s],\n [w, s],\n [w, n],\n [e, n]\n ];\n}\n\n/** Return boundary polygon of geohash cell as flat array */\nexport function getGeohashBoundaryFlat(geohash: string): number[] {\n const [[s, w], [n, e]] = getGeohashBounds(geohash);\n return [e, n, e, s, w, s, w, n, e, n];\n}\n\n/**\n * @note Adapted from ngeohash decode_bbox\n */\n/* eslint-disable max-depth */\nexport function getGeohashBounds(geohash: string): Bounds2D {\n let isLon = true;\n let maxLat = MAX_LAT;\n let minLat = MIN_LAT;\n let maxLon = MAX_LON;\n let minLon = MIN_LON;\n let mid: number;\n\n let hashValue = 0;\n for (let i = 0, l = geohash.length; i < l; i++) {\n const code = geohash[i].toLowerCase();\n hashValue = BASE32_CODES_DICT[code];\n\n for (let bits = 4; bits >= 0; bits--) {\n const bit = (hashValue >> bits) & 1;\n if (isLon) {\n mid = (maxLon + minLon) / 2;\n if (bit === 1) {\n minLon = mid;\n } else {\n maxLon = mid;\n }\n } else {\n mid = (maxLat + minLat) / 2;\n if (bit === 1) {\n minLat = mid;\n } else {\n maxLat = mid;\n }\n }\n isLon = !isLon;\n }\n }\n\n return [\n [minLat, minLon],\n [maxLat, maxLon]\n ];\n}\n", "// math.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {type Bounds2D} from '@math.gl/types';\nimport {type GlobalGrid} from './global-grid';\n\nconst TILE_SIZE = 512;\n\n/** Decoder for the quadkey DGGS */\nexport const QuadkeyGrid = {\n name: 'quadkey',\n hasNumericRepresentation: true,\n\n // cellToToken: (cell: bigint): string => quadkeyCellToToken(cell),\n // tokenToCell: (cell: string): bigint => quadKeyToBigint(cell),\n\n cellToLngLat: (cell: string | bigint): [number, number] => quadkeyCellToLngLat(getString(cell)),\n cellToBoundary: (cell: string | bigint): [number, number][] =>\n quadkeyCellToBoundary(getString(cell))\n\n // cellToBoundaryPolygonFlat: (cell: string | bigint): number[] => getQuadkeyBoundaryFlat(cell),\n // cellToBounds: (cell: string | bigint): Bounds2D => getQuadkeyBounds(cell)\n} as const satisfies GlobalGrid;\n\n/** Quadkey only supports strings */\nconst getString = (cell: string | bigint): string => {\n if (typeof cell !== 'string') {\n throw new Error('geohash must be a string');\n }\n return cell;\n};\n\nfunction quadkeyCellToLngLat(quadkey: string): [number, number] {\n const [topLeft, bottomRight] = quadkeyToWorldBounds(quadkey);\n const [w, n] = worldToLngLat(topLeft);\n const [e, s] = worldToLngLat(bottomRight);\n return [(e + w) / 2, (s + n) / 2];\n}\n\nfunction quadkeyCellToBoundary(quadkey: string): [number, number][] {\n const [topLeft, bottomRight] = quadkeyToWorldBounds(quadkey);\n const [w, n] = worldToLngLat(topLeft);\n const [e, s] = worldToLngLat(bottomRight);\n return [\n [e, n],\n [e, s],\n [w, s],\n [w, n],\n [e, n]\n ];\n}\n\nexport function quadkeyCellToBoundaryFlat(quadkey: string): number[] {\n const [topLeft, bottomRight] = quadkeyToWorldBounds(quadkey);\n const [w, n] = worldToLngLat(topLeft);\n const [e, s] = worldToLngLat(bottomRight);\n return [e, n, e, s, w, s, w, n, e, n];\n}\n\nexport function quadkeyCellToBounds(quadkey: string): Bounds2D {\n const [topLeft, bottomRight] = quadkeyToWorldBounds(quadkey);\n const [w, n] = worldToLngLat(topLeft);\n const [e, s] = worldToLngLat(bottomRight);\n return [\n [w, s],\n [e, n]\n ];\n}\n\nexport function quadkeyToWorldBounds(quadkey: string): [[number, number], [number, number]] {\n let x = 0;\n let y = 0;\n let mask = 1 << quadkey.length;\n const scale = mask / TILE_SIZE;\n\n for (let i = 0; i < quadkey.length; i++) {\n mask >>= 1;\n const q = parseInt(quadkey[i], 10);\n if (q % 2) x |= mask;\n if (q > 1) y |= mask;\n }\n return [\n [x / scale, TILE_SIZE - y / scale],\n [(x + 0.99) / scale, TILE_SIZE - (y + 0.99) / scale]\n ];\n}\n\n// CONSTANTS\nconst PI = Math.PI;\nconst PI_4 = PI / 4;\nconst RADIANS_TO_DEGREES = 180 / PI;\n\n/**\n * Unproject world point [x,y] on map onto {lat, lon} on sphere\n *\n * @param xy - array with [x,y] members\n * representing point on projected map plane\n * @return - array with [x,y] of point on sphere.\n * Has toArray method if you need a GeoJSON Array.\n * Per cartographic tradition, lat and lon are specified as degrees.\n */\nfunction worldToLngLat(xy: number[]): [number, number] {\n const [x, y] = xy;\n const lambda2 = (x / TILE_SIZE) * (2 * PI) - PI;\n const phi2 = 2 * (Math.atan(Math.exp((y / TILE_SIZE) * (2 * PI) - PI)) - PI_4);\n return [lambda2 * RADIANS_TO_DEGREES, phi2 * RADIANS_TO_DEGREES];\n}\n\n// EXPERIMENTAL BIGINT ENCODING FOR QUADKEYS\n\n/**\n * Encodes a QuadKey string into a bigint.\n * @param quadkey - The QuadKey string.\n * @returns The bigint representation of the QuadKey.\n */\nexport function quadKeyToBigint(quadkey: string): bigint {\n let result = 0n;\n for (const digit of quadkey) {\n const value = BigInt(parseInt(digit, 4));\n result = (result << 2n) | value;\n }\n const zoom = quadkey.length;\n // Shift the result to align with the most significant bits\n const shift = 64 - 5 - zoom * 2; // Reserve 5 bits for zoom level\n result = result << BigInt(shift);\n // Append the zoom level in the least significant 5 bits\n return result | BigInt(zoom);\n}\n\n/**\n * Decodes a bigint-encoded QuadKey back into its string representation.\n * @param encoded - The bigint representation of the QuadKey with embedded zoom level.\n * @returns The decoded QuadKey string.\n */\nexport function bigintToQuadKey(encoded: bigint): string {\n const zoom = Number(encoded & 0b11111n); // Extract the last 5 bits for zoom level\n const shift = BigInt(64 - 5 - zoom * 2); // Calculate the shift to align the QuadKey bits\n const quadkeyBits = (encoded >> shift) & ((1n << BigInt(zoom * 2)) - 1n); // Extract QuadKey bits\n let quadkey = '';\n for (let i = zoom - 1; i >= 0; i--) {\n const digit = Number((quadkeyBits >> BigInt(i * 2)) & 0b11n);\n quadkey += digit.toString();\n }\n return quadkey;\n}\n\n/**\n * Checks if the child QuadKey is contained within the parent QuadKey.\n * @param parent - The bigint representation of the parent QuadKey.\n * @param child - The bigint representation of the child QuadKey.\n * @returns True if the child is contained within the parent; otherwise, false.\n */\nexport function isContained(parent: bigint, child: bigint): boolean {\n const parentZoom = Number(parent & 0b11111n); // Extract zoom level from parent\n const childZoom = Number(child & 0b11111n); // Extract zoom level from child\n\n if (parentZoom >= childZoom) return false;\n\n const parentShift = BigInt(64 - 5 - parentZoom * 2);\n const childShift = BigInt(64 - 5 - childZoom * 2);\n\n const parentPrefix = (parent >> parentShift) & ((1n << BigInt(parentZoom * 2)) - 1n);\n const childPrefix = (child >> childShift) & ((1n << BigInt(parentZoom * 2)) - 1n);\n\n return parentPrefix === childPrefix;\n}\n\n/**\n * Decodes a bigint-encoded QuadKey into tile X, tile Y, and zoom level.\n * @param encoded - The bigint representation of the QuadKey with embedded zoom level.\n * @returns An object containing tileX, tileY, and zoom.\n */\nexport function decodeBigintQuadKey(encoded: bigint): {tileX: number; tileY: number; zoom: number} {\n const zoom = Number(encoded & 0b11111n); // Extract the last 5 bits for zoom level\n const quadKeyBits = encoded >> 5n; // Remove the zoom level bits\n\n let tileX = 0;\n let tileY = 0;\n\n for (let i = 0; i < zoom; i++) {\n const shift = BigInt((zoom - i - 1) * 2);\n const digit = Number((quadKeyBits >> shift) & 0b11n);\n const mask = 1 << (zoom - i - 1);\n if (digit & 1) tileX |= mask;\n if (digit & 2) tileY |= mask;\n }\n\n return {tileX, tileY, zoom};\n}\n"],
5
- "mappings": "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",
6
- "names": ["import_geo_layers", "_h3IndexToSplitLong", "_cellToLatLng", "cellToBoundary", "_cellToBoundary", "_cellsToMultiPolygon", "cellToBoundary", "getBigInt", "getString"]
3
+ "sources": ["../src/index.ts", "../src/tile-source-layer/tile-source-layer.ts", "../src/shared-tile-2d-layer/shared-tile-2d-layer.ts", "../src/tileset/tileset-2d.ts", "../src/tileset/tile-2d-header.ts", "../src/shared-tile-2d-layer/shared-tile-2d-view.ts", "../src/utils/memoize.ts", "../src/shared-tile-2d-layer/deck-tile-traversal.ts", "../src/shared-tile-2d-layer/deck-tileset-adapter.ts", "../src/shared-tile-2d-layer/url-template.ts", "../src/tile-grid-layer/tile-grid-layer.ts", "../src/global-grid-layer/global-grid-layer.ts", "../src/global-grid-systems/utils/geometry-utils.ts", "../src/global-grid-systems/grids/a5-grid.ts", "../src/global-grid-systems/utils/hex-utils.ts", "../src/global-grid-systems/h3-js-bigint/h3-js-bigint.ts", "../src/global-grid-systems/grids/h3-grid.ts", "../src/global-grid-systems/s2-geometry/s2-token.ts", "../src/global-grid-systems/s2-geometry/s2-geometry.ts", "../src/global-grid-systems/s2-geometry/s2-to-boundary.ts", "../src/global-grid-systems/grids/s2-grid.ts", "../src/global-grid-systems/grids/geohash-grid.ts", "../src/global-grid-systems/grids/quadkey-grid.ts"],
4
+ "sourcesContent": ["// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport type {TileSourceLayerProps} from './tile-source-layer/tile-source-layer';\nexport {TileSourceLayer} from './tile-source-layer/tile-source-layer';\nexport type {\n SharedTile2DLayerProps,\n SharedTile2DLayerPickingInfo\n} from './shared-tile-2d-layer/index';\nexport {SharedTile2DLayer, sharedTile2DDeckAdapter} from './shared-tile-2d-layer/index';\nexport type {SharedTileset2DProps, SharedTileset2DBaseProps} from './tileset/index';\nexport type {\n SharedTileset2DAdapter,\n SharedTileset2DTraversalContext,\n SharedTileset2DTileContext\n} from './tileset/index';\nexport {SharedTileset2D, SharedTile2DHeader} from './tileset/index';\nexport type {TileGridLayerProps} from './tile-grid-layer/tile-grid-layer';\nexport {TileGridLayer} from './tile-grid-layer/tile-grid-layer';\n\nexport {GlobalGridLayer, type GlobalGridLayerProps} from './global-grid-layer/global-grid-layer';\n\nexport {type GlobalGrid} from './global-grid-systems/grids/global-grid';\nexport {A5Grid} from './global-grid-systems/grids/a5-grid';\nexport {H3Grid} from './global-grid-systems/grids/h3-grid';\nexport {S2Grid} from './global-grid-systems/grids/s2-grid';\nexport {GeohashGrid} from './global-grid-systems/grids/geohash-grid';\nexport {QuadkeyGrid} from './global-grid-systems/grids/quadkey-grid';\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer, Layer} from '@deck.gl/core';\nimport type {TileLayerProps} from '@deck.gl/geo-layers';\nimport {TileLayer} from '@deck.gl/geo-layers';\nimport {BitmapLayer, GeoJsonLayer, PathLayer} from '@deck.gl/layers';\nimport type {TileSource} from '@loaders.gl/loader-utils';\n\n/* global window */\nconst devicePixelRatio = (typeof window !== 'undefined' && window.devicePixelRatio) || 1;\n\nexport type TileSourceLayerProps = TileLayerProps & {\n tileSource: TileSource;\n showTileBorders?: boolean;\n};\n\n/**\n * A Deck.gl layer that renders a tile source\n * Autodiscovers type of content (vector tile, bitmap, ...)\n * Can render debug borders around tiles\n * TODO - Change debug border color based on zoom level\n */\nexport class TileSourceLayer extends CompositeLayer<TileSourceLayerProps> {\n static layerName = 'TileSourceLayer';\n static defaultProps = {\n ...TileLayer.defaultProps,\n showTileBorders: true\n };\n\n state: {\n tileSource: TileSource | null;\n } = undefined!;\n\n initializeState() {\n this.setState({\n tileSource: null\n });\n }\n\n updateState({props, changeFlags}) {\n this.setState({\n tileSource: props.tileSource\n });\n }\n\n renderLayers() {\n const {tileSource, showTileBorders, metadata, onTilesLoad} = this.props as any;\n const minZoom = metadata?.minZoom || 0;\n const maxZoom = metadata?.maxZoom || 30;\n\n return [\n new TileLayer({\n // HACK: Trigger new layer via id prop to force clear tile cache\n id: String(tileSource.url),\n getTileData: tileSource.getTileData,\n // Assume the pmtiles file support HTTP/2, so we aren't limited by the browser to a certain number per domain.\n maxRequests: 20,\n\n pickable: true,\n onViewportLoad: onTilesLoad,\n autoHighlight: showTileBorders,\n highlightColor: [60, 60, 60, 40],\n minZoom,\n maxZoom,\n tileSize: 256,\n // TOOD - why is this needed?\n zoomOffset: devicePixelRatio === 1 ? -1 : 0,\n renderSubLayers: renderSubLayers as any,\n\n // Custom prop\n tileSource,\n showTileBorders\n })\n ];\n }\n}\n\nfunction renderSubLayers(\n props: TileSourceLayerProps & {tile: {index; bbox: {west; south; east; north}}}\n) {\n const {\n tileSource,\n showTileBorders,\n minZoom,\n maxZoom,\n tile: {\n index: {z: zoom},\n bbox: {west, south, east, north}\n }\n } = props as any;\n\n const layers: Layer[] = [];\n\n const borderColor = zoom <= minZoom || zoom >= maxZoom ? [255, 0, 0, 255] : [0, 0, 255, 255];\n\n switch (tileSource.mimeType) {\n case 'application/vnd.mapbox-vector-tile':\n layers.push(\n new GeoJsonLayer({\n id: `${props.id}-geojson`,\n data: props.data as any,\n pickable: true,\n getFillColor: [0, 190, 80, 255],\n lineWidthScale: 500,\n lineWidthMinPixels: 0.5\n })\n );\n break;\n\n case 'image/png':\n case 'image/jpeg':\n case 'image/webp':\n case 'image/avif':\n layers.push(\n new BitmapLayer(\n props as any,\n {\n data: null,\n image: props.data,\n bounds: [west, south, east, north],\n pickable: true\n } as any\n )\n );\n break;\n\n default:\n // eslint-disable-next-line no-console\n console.error('Unknown tile mimeType', tileSource?.mimeType);\n }\n\n // Debug tile borders\n if (showTileBorders) {\n layers.push(\n new PathLayer({\n id: `${props.id}-border`,\n data: [\n [\n [west, north],\n [west, south],\n [east, south],\n [east, north],\n [west, north]\n ]\n ],\n getPath: (d) => d,\n getColor: borderColor as any,\n widthMinPixels: 4\n })\n );\n }\n\n return layers;\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {\n CompositeLayer,\n type CompositeLayerProps,\n Layer,\n type LayersList,\n type LayerProps,\n type UpdateParameters,\n type PickingInfo,\n type GetPickingInfoParams,\n type DefaultProps,\n type FilterContext,\n type Viewport,\n _flatten as flatten\n} from '@deck.gl/core';\nimport {GeoJsonLayer} from '@deck.gl/layers';\nimport {Matrix4} from '@math.gl/core';\nimport type {TileSource} from '@loaders.gl/loader-utils';\n\nimport {\n SharedTileset2D,\n SharedTile2DHeader,\n type TileLoadProps,\n type ZRange,\n type RefinementStrategy,\n STRATEGY_DEFAULT\n} from '../tileset/index';\nimport {SharedTile2DView} from './shared-tile-2d-view';\nimport {sharedTile2DDeckAdapter} from './deck-tileset-adapter';\nimport {type URLTemplate, getURLFromTemplate} from './url-template';\n\n/** Tests whether a value looks like a loaders.gl {@link TileSource}. */\nfunction isTileSource(value: unknown): value is TileSource {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'getTileData' in value &&\n typeof (value as TileSource).getTileData === 'function' &&\n 'getMetadata' in value &&\n typeof (value as TileSource).getMetadata === 'function'\n );\n}\n\n/** Tests whether a value is a supported URL-template input for tiled requests. */\nfunction isURLTemplate(value: unknown): value is URLTemplate {\n return (\n value === null ||\n typeof value === 'string' ||\n (Array.isArray(value) && value.every((url) => typeof url === 'string'))\n );\n}\n\n/** Prop-type validator for `data` inputs accepted by {@link SharedTile2DLayer}. */\nconst tile2DDataType = {\n type: 'object' as const,\n value: null as URLTemplate | SharedTileset2D | TileSource,\n validate: (value, propType) =>\n (propType.optional && value === null) ||\n value instanceof SharedTileset2D ||\n isTileSource(value) ||\n isURLTemplate(value),\n equal: (value1, value2) => value1 === value2\n};\n\n/** Default prop values for {@link SharedTile2DLayer}. */\nconst defaultProps: DefaultProps<SharedTile2DLayerProps> = {\n TilesetClass: SharedTileset2D,\n data: tile2DDataType,\n dataComparator: tile2DDataType.equal,\n renderSubLayers: {type: 'function', value: (props: any) => new GeoJsonLayer(props)},\n getTileData: {type: 'function', optional: true, value: null},\n onViewportLoad: {type: 'function', optional: true, value: null},\n onTileLoad: {type: 'function', value: () => {}},\n onTileUnload: {type: 'function', value: () => {}},\n onTileError: {type: 'function', value: () => {}},\n extent: {type: 'array', optional: true, value: null, compare: true},\n tileSize: 512,\n maxZoom: null,\n minZoom: 0,\n maxCacheSize: null,\n maxCacheByteSize: null,\n refinementStrategy: STRATEGY_DEFAULT,\n zRange: null,\n maxRequests: 6,\n debounceTime: 0,\n zoomOffset: 0\n};\n\n/** Internal defaults used to detect whether layer props were explicitly overridden. */\nconst TILE2D_LAYER_DEFAULT_OPTION_VALUES = {\n maxCacheSize: null,\n maxCacheByteSize: null,\n maxZoom: null,\n minZoom: 0,\n tileSize: 512,\n refinementStrategy: STRATEGY_DEFAULT,\n extent: null,\n maxRequests: 6,\n debounceTime: 0,\n zoomOffset: 0\n} as const;\n\n/** Props for {@link SharedTile2DLayer}. */\nexport type SharedTile2DLayerProps<DataT = unknown> = CompositeLayerProps & {\n /** URL template, shared tileset, or loaders.gl TileSource backing the layer. */\n data: URLTemplate | SharedTileset2D<DataT, any> | TileSource;\n /** Tileset class used when the layer creates its own internal tileset. */\n TilesetClass?: typeof SharedTileset2D;\n /** Sub-layer factory invoked for each loaded tile. */\n renderSubLayers?: (\n props: SharedTile2DLayerProps<DataT> & {\n id: string;\n data: DataT;\n _offset: number;\n tile: SharedTile2DHeader<DataT>;\n }\n ) => Layer | null | LayersList;\n /** Optional tile loader used with URL-template data. */\n getTileData?: ((props: TileLoadProps) => Promise<DataT> | DataT) | null;\n /** Callback fired when the current viewport's selected tiles are loaded. */\n onViewportLoad?: ((tiles: SharedTile2DHeader<DataT>[]) => void) | null;\n /** Callback fired when any tile loads. */\n onTileLoad?: (tile: SharedTile2DHeader<DataT>) => void;\n /** Callback fired when any tile is evicted. */\n onTileUnload?: (tile: SharedTile2DHeader<DataT>) => void;\n /** Callback fired when any tile fails to load. */\n onTileError?: (err: any, tile?: SharedTile2DHeader<DataT>) => void;\n /** Bounding box limiting tile generation. */\n extent?: number[] | null;\n /** Tile size in pixels. */\n tileSize?: number;\n /** Maximum zoom level to request. */\n maxZoom?: number | null;\n /** Minimum zoom level to request. */\n minZoom?: number | null;\n /** Maximum tile count kept in cache. */\n maxCacheSize?: number | null;\n /** Maximum byte size kept in cache. */\n maxCacheByteSize?: number | null;\n /** Placeholder refinement strategy. */\n refinementStrategy?: RefinementStrategy;\n /** Elevation bounds used during geospatial tile selection. */\n zRange?: ZRange | null;\n /** Maximum concurrent requests. */\n maxRequests?: number;\n /** Debounce interval before issuing queued requests. */\n debounceTime?: number;\n /** Integer zoom offset applied during tile selection. */\n zoomOffset?: number;\n};\n\n/** Picking info returned from {@link SharedTile2DLayer}. */\nexport type SharedTile2DLayerPickingInfo<\n DataT = any,\n SubLayerPickingInfo = PickingInfo\n> = SubLayerPickingInfo & {\n /** Picked tile when a tile sub-layer is hit. */\n tile?: SharedTile2DHeader<DataT>;\n /** Tile that produced the picked sub-layer. */\n sourceTile: SharedTile2DHeader<DataT>;\n /** Concrete sub-layer instance that handled the pick. */\n sourceTileSubLayer: Layer;\n};\n\n/** Internal mutable state owned by {@link SharedTile2DLayer}. */\ntype SharedTile2DLayerState<DataT> = {\n /** Shared or owned tileset used by the layer. */\n tileset: SharedTileset2D<DataT, any> | null;\n /** Per-viewport traversal state. */\n tilesetViews: Map<string, SharedTile2DView<DataT>>;\n /** Whether the layer owns and should finalize the tileset. */\n ownsTileset: boolean;\n /** Cached aggregate load state. */\n isLoaded: boolean;\n /** Last frame number observed for each viewport. */\n frameNumbers: Map<string, number>;\n /** Cached sub-layers per tile id. */\n tileLayers: Map<string, Layer[]>;\n /** Subscription disposer for tileset events. */\n unsubscribeTilesetEvents: (() => void) | null;\n};\n\n/** Composite layer that can reuse a shared {@link SharedTileset2D} across layers and views. */\nexport class SharedTile2DLayer<DataT = any, ExtraPropsT extends {} = {}> extends CompositeLayer<\n ExtraPropsT & Required<SharedTile2DLayerProps<DataT>>\n> {\n /** Layer default props consumed by deck.gl prop management. */\n static defaultProps: DefaultProps = defaultProps;\n /** Stable layer name used in logs and devtools. */\n static layerName = 'SharedTile2DLayer';\n\n /** Viewports currently known to this layer during multi-view rendering. */\n private _knownViewports: Map<string, Viewport> = new Map();\n\n /** Internal layer state shared across render passes. */\n state = null as unknown as SharedTile2DLayerState<DataT>;\n\n /** Initializes layer-owned tileset state. */\n initializeState(): void {\n this._knownViewports.clear();\n if (this.context.viewport) {\n this._knownViewports.set(this.context.viewport.id || 'default', this.context.viewport);\n }\n this.state = {\n tileset: null,\n tilesetViews: new Map(),\n ownsTileset: false,\n isLoaded: false,\n frameNumbers: new Map(),\n tileLayers: new Map(),\n unsubscribeTilesetEvents: null\n };\n }\n\n /** Finalizes owned resources and detaches from any shared tileset. */\n finalizeState(): void {\n this.state.unsubscribeTilesetEvents?.();\n for (const tilesetView of this.state.tilesetViews.values()) {\n tilesetView.finalize();\n }\n if (this.state.ownsTileset) {\n this.state.tileset?.finalize();\n }\n }\n\n /** Returns whether all visible sub-layers for all tracked views are loaded. */\n get isLoaded(): boolean {\n const {tilesetViews, tileLayers} = this.state;\n if (!tilesetViews.size) {\n return false;\n }\n return Boolean(\n Array.from(tilesetViews.values()).every((tilesetView) =>\n tilesetView.selectedTiles?.every((tile) => {\n const cachedLayers = tileLayers.get(tile.id);\n return (\n tile.isLoaded &&\n (!tile.content || !cachedLayers || cachedLayers.every((layer) => layer.isLoaded))\n );\n })\n )\n );\n }\n\n /** Triggers updates whenever props, data, or update triggers change. */\n shouldUpdateState({changeFlags}: UpdateParameters<this>): boolean {\n return changeFlags.somethingChanged;\n }\n\n /** Creates, reuses, or reconfigures the backing shared tileset and per-view state. */\n updateState({changeFlags}: UpdateParameters<this>): void {\n if (this.context.viewport) {\n this._knownViewports.set(this._getViewportKey(), this.context.viewport);\n }\n const propsChanged = Boolean(\n changeFlags.propsOrDataChanged || changeFlags.updateTriggersChanged\n );\n const dataChanged =\n changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged &&\n (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getTileData));\n\n let {tileset, ownsTileset} = this.state;\n const nextExternalTileset = this.props.data instanceof SharedTileset2D ? this.props.data : null;\n if (nextExternalTileset && !nextExternalTileset.adapter) {\n nextExternalTileset.setOptions({adapter: sharedTile2DDeckAdapter});\n }\n const nextOwnsTileset = !nextExternalTileset;\n const nextTileset = this._resolveTileset(tileset, ownsTileset, nextExternalTileset);\n\n const tilesetChanged = nextTileset !== tileset || nextOwnsTileset !== ownsTileset;\n\n if (tilesetChanged) {\n this._releaseTileset(tileset, ownsTileset);\n tileset = nextTileset;\n ownsTileset = nextOwnsTileset;\n this.setState({\n tileset,\n tilesetViews: new Map(),\n ownsTileset,\n tileLayers: new Map(),\n frameNumbers: new Map(),\n unsubscribeTilesetEvents: nextTileset.subscribe({\n onTileLoad: this._onTileLoad.bind(this),\n onTileError: this._onTileError.bind(this),\n onTileUnload: this._onTileUnload.bind(this),\n onUpdate: () => this.setNeedsUpdate(),\n onError: (error) => this.raiseError(error, 'loading TileSource metadata')\n })\n });\n } else {\n this._updateExistingTileset(propsChanged, ownsTileset, Boolean(dataChanged), nextTileset);\n }\n\n this._updateTileset();\n }\n\n /** Resolves whether to reuse a shared tileset, reuse an owned tileset, or create a new one. */\n private _resolveTileset(\n currentTileset: SharedTileset2D<DataT, any> | null,\n ownsCurrentTileset: boolean,\n nextExternalTileset: SharedTileset2D<DataT, any> | null\n ): SharedTileset2D<DataT, any> {\n if (nextExternalTileset) {\n return nextExternalTileset;\n }\n if (currentTileset && ownsCurrentTileset) {\n return currentTileset;\n }\n return new this.props.TilesetClass(this._getTilesetOptions());\n }\n\n /** Tears down subscriptions and per-view state for the outgoing tileset. */\n private _releaseTileset(tileset: SharedTileset2D<DataT, any> | null, ownsTileset: boolean): void {\n this.state.unsubscribeTilesetEvents?.();\n for (const tilesetView of this.state.tilesetViews.values()) {\n tilesetView.finalize();\n }\n if (ownsTileset) {\n tileset?.finalize();\n }\n }\n\n /** Applies prop updates to an existing tileset without replacing it. */\n private _updateExistingTileset(\n propsChanged: boolean,\n ownsTileset: boolean,\n dataChanged: boolean,\n tileset: SharedTileset2D<DataT, any>\n ): void {\n if (!propsChanged) {\n return;\n }\n if (ownsTileset) {\n tileset.setOptions(this._getTilesetOptions());\n if (dataChanged) {\n tileset.reloadAll();\n return;\n }\n }\n this.state.tileLayers.clear();\n }\n\n /** Resolves the current tileset configuration from layer props. */\n _getTilesetOptions(): Record<string, unknown> {\n const {\n tileSize,\n maxCacheSize,\n maxCacheByteSize,\n refinementStrategy,\n extent,\n maxZoom,\n minZoom,\n maxRequests,\n debounceTime,\n zoomOffset\n } = this.props;\n\n const tileSource = isTileSource(this.props.data) ? this.props.data : undefined;\n const options = {\n tileSource,\n adapter: sharedTile2DDeckAdapter,\n getTileData: tileSource ? undefined : this.getTileData.bind(this),\n onTileLoad: () => {},\n onTileError: () => {},\n onTileUnload: () => {}\n } as Record<string, unknown>;\n\n this._assignTilesetOptionIfExplicit(\n options,\n 'maxCacheSize',\n maxCacheSize,\n TILE2D_LAYER_DEFAULT_OPTION_VALUES.maxCacheSize\n );\n this._assignTilesetOptionIfExplicit(\n options,\n 'maxCacheByteSize',\n maxCacheByteSize,\n TILE2D_LAYER_DEFAULT_OPTION_VALUES.maxCacheByteSize\n );\n this._assignTilesetOptionIfExplicit(\n options,\n 'maxZoom',\n maxZoom,\n TILE2D_LAYER_DEFAULT_OPTION_VALUES.maxZoom\n );\n this._assignTilesetOptionIfExplicit(\n options,\n 'minZoom',\n minZoom,\n TILE2D_LAYER_DEFAULT_OPTION_VALUES.minZoom\n );\n this._assignTilesetOptionIfExplicit(\n options,\n 'tileSize',\n tileSize,\n TILE2D_LAYER_DEFAULT_OPTION_VALUES.tileSize\n );\n this._assignTilesetOptionIfExplicit(\n options,\n 'refinementStrategy',\n refinementStrategy,\n TILE2D_LAYER_DEFAULT_OPTION_VALUES.refinementStrategy\n );\n this._assignTilesetOptionIfExplicit(\n options,\n 'extent',\n extent,\n TILE2D_LAYER_DEFAULT_OPTION_VALUES.extent\n );\n this._assignTilesetOptionIfExplicit(\n options,\n 'maxRequests',\n maxRequests,\n TILE2D_LAYER_DEFAULT_OPTION_VALUES.maxRequests\n );\n this._assignTilesetOptionIfExplicit(\n options,\n 'debounceTime',\n debounceTime,\n TILE2D_LAYER_DEFAULT_OPTION_VALUES.debounceTime\n );\n this._assignTilesetOptionIfExplicit(\n options,\n 'zoomOffset',\n zoomOffset,\n TILE2D_LAYER_DEFAULT_OPTION_VALUES.zoomOffset\n );\n\n return options;\n }\n\n /** Updates per-view traversal state for all known viewports. */\n private _updateTileset(): void {\n const {zRange, modelMatrix} = this.props;\n let anyTilesetChanged = false;\n\n for (const [viewportKey, viewport] of this._knownViewports) {\n this._prunePlaceholderViewportView(viewportKey);\n const tilesetView = this._getOrCreateTilesetView(viewportKey);\n const frameNumber = tilesetView.update(viewport, {zRange, modelMatrix});\n const previousFrameNumber = this.state.frameNumbers.get(viewportKey);\n const tilesetChanged = previousFrameNumber !== frameNumber;\n anyTilesetChanged ||= tilesetChanged;\n\n if (tilesetView.isLoaded && tilesetChanged) {\n this._onViewportLoad(tilesetView);\n }\n if (tilesetChanged) {\n this.state.frameNumbers.set(viewportKey, frameNumber);\n }\n }\n\n const nextIsLoaded = this.isLoaded;\n const loadingStateChanged = this.state.isLoaded !== nextIsLoaded;\n if (loadingStateChanged) {\n for (const tilesetView of this.state.tilesetViews.values()) {\n if (tilesetView.isLoaded) {\n this._onViewportLoad(tilesetView);\n }\n }\n }\n\n if (anyTilesetChanged) {\n this.setState({frameNumbers: new Map(this.state.frameNumbers)});\n }\n this.state.isLoaded = nextIsLoaded;\n }\n\n /** Emits the viewport-load callback for one view. */\n _onViewportLoad(tilesetView: SharedTile2DView<DataT>): void {\n if (tilesetView.selectedTiles) {\n this.props.onViewportLoad?.(tilesetView.selectedTiles);\n }\n }\n\n /** Clears cached sub-layers when a tile loads. */\n _onTileLoad(tile: SharedTile2DHeader<DataT>): void {\n this.state.tileLayers.delete(tile.id);\n this.props.onTileLoad(tile);\n this.setNeedsUpdate();\n }\n\n /** Clears cached sub-layers when a tile errors. */\n _onTileError(error: any, tile: SharedTile2DHeader<DataT>): void {\n this.state.tileLayers.delete(tile.id);\n this.props.onTileError(error, tile);\n this.setNeedsUpdate();\n }\n\n /** Removes cached sub-layers when a tile is evicted. */\n _onTileUnload(tile: SharedTile2DHeader<DataT>): void {\n this.state.tileLayers.delete(tile.id);\n this.props.onTileUnload(tile);\n }\n\n /** Calls the URL-template loader path for a tile when the layer owns the tileset. */\n getTileData(tile: TileLoadProps): Promise<DataT> | DataT | null {\n const {data, getTileData, fetch} = this.props;\n const {signal} = tile;\n if (!isURLTemplate(data)) {\n return null;\n }\n tile.url = getURLFromTemplate(data, tile);\n if (getTileData) {\n return getTileData(tile);\n }\n if (fetch && tile.url) {\n return fetch(tile.url, {propName: 'data', layer: this, signal});\n }\n return null;\n }\n\n /** Default tile sub-layer renderer, delegating to `renderSubLayers`. */\n renderSubLayers(\n props: SharedTile2DLayer['props'] & {\n id: string;\n data: DataT;\n _offset: number;\n tile: SharedTile2DHeader<DataT>;\n }\n ): Layer | null | LayersList {\n return this.props.renderSubLayers(props);\n }\n\n /** Hook for subclasses to provide extra sub-layer props per tile. */\n getSubLayerPropsByTile(_tile: SharedTile2DHeader<DataT>): Partial<LayerProps> | null {\n return null;\n }\n\n /** Adds tile references to picking info returned from sub-layers. */\n getPickingInfo(params: GetPickingInfoParams): SharedTile2DLayerPickingInfo<DataT> {\n const {sourceLayer} = params;\n if (!sourceLayer) {\n throw new Error('SharedTile2DLayer picking info requires a source layer.');\n }\n const sourceTile: SharedTile2DHeader<DataT> = (sourceLayer.props as any).tile;\n const info = params.info as SharedTile2DLayerPickingInfo<DataT>;\n if (info.picked) {\n info.tile = sourceTile;\n }\n info.sourceTile = sourceTile;\n info.sourceTileSubLayer = sourceLayer;\n return info;\n }\n\n /** Forwards auto-highlight updates to the picked sub-layer. */\n protected _updateAutoHighlight(info: SharedTile2DLayerPickingInfo<DataT>): void {\n info.sourceTileSubLayer.updateAutoHighlight(info);\n }\n\n /** Renders cached or newly generated sub-layers for each loaded tile. */\n renderLayers(): Layer | null | LayersList {\n const {tileset, tileLayers} = this.state;\n if (!tileset) {\n return null;\n }\n return tileset.tiles.map((tile) => {\n const subLayerProps = this.getSubLayerPropsByTile(tile);\n let layers = tileLayers.get(tile.id);\n if (!tile.isLoaded && !tile.content) {\n return layers;\n }\n if (!layers) {\n const rendered = this.renderSubLayers({\n ...this.props,\n ...this.getSubLayerProps({\n id: tile.id,\n updateTriggers: this.props.updateTriggers\n }),\n data: tile.content,\n _offset: 0,\n tile\n });\n layers = this._flattenTileLayers(rendered).map((layer) =>\n layer.clone({tile, ...subLayerProps})\n );\n tileLayers.set(tile.id, layers);\n } else if (\n subLayerProps &&\n layers[0] &&\n Object.keys(subLayerProps).some(\n (propName) => layers[0].props[propName] !== subLayerProps[propName]\n )\n ) {\n layers = layers.map((layer) => layer.clone(subLayerProps));\n tileLayers.set(tile.id, layers);\n }\n return layers;\n });\n }\n\n /** Filters tile sub-layers based on the active view-specific visibility state. */\n filterSubLayer({layer, cullRect}: FilterContext) {\n const {tile} = (layer as Layer<{tile: SharedTile2DHeader<DataT>}>).props;\n const tilesetView = this._getOrCreateTilesetView(this._getViewportKey());\n return tilesetView.isTileVisible(\n tile,\n cullRect,\n this.props.modelMatrix ? new Matrix4(this.props.modelMatrix) : null\n );\n }\n\n /** Returns the active viewport key used to isolate per-view traversal state. */\n private _getViewportKey(): string {\n return this.context.viewport?.id || 'default';\n }\n\n /** Copies a tileset option only when the layer prop was explicitly set. */\n private _assignTilesetOptionIfExplicit(\n options: Record<string, unknown>,\n key: string,\n value: unknown,\n defaultValue: unknown\n ): void {\n if (!this._isDefaultOptionValue(value, defaultValue)) {\n options[key] = value;\n }\n }\n\n /** Tests whether a layer prop still has its default value. */\n private _isDefaultOptionValue(value: unknown, defaultValue: unknown): boolean {\n if (Array.isArray(value) || Array.isArray(defaultValue)) {\n return (\n Array.isArray(value) &&\n Array.isArray(defaultValue) &&\n value.length === defaultValue.length &&\n value.every((entry, index) => entry === defaultValue[index])\n );\n }\n return value === defaultValue;\n }\n\n /** Drops the bootstrap placeholder viewport after a real viewport is known. */\n private _prunePlaceholderViewportView(viewportKey: string): void {\n const placeholderViewportKey = 'DEFAULT-INITIAL-VIEWPORT';\n if (viewportKey !== placeholderViewportKey) {\n const placeholderView = this.state.tilesetViews.get(placeholderViewportKey);\n if (placeholderView) {\n placeholderView.finalize();\n this.state.tilesetViews.delete(placeholderViewportKey);\n this.state.frameNumbers.delete(placeholderViewportKey);\n }\n }\n }\n\n /** Returns the per-viewport traversal state, creating it on demand. */\n private _getOrCreateTilesetView(viewportKey: string): SharedTile2DView<DataT> {\n let tilesetView = this.state.tilesetViews.get(viewportKey);\n if (!tilesetView) {\n const tileset = this.state.tileset;\n if (!tileset) {\n throw new Error('SharedTile2DLayer tileset was not initialized.');\n }\n tilesetView = new SharedTile2DView(tileset);\n this.state.tilesetViews.set(viewportKey, tilesetView);\n }\n return tilesetView;\n }\n\n /** Registers additional viewports in multi-view rendering scenarios. */\n activateViewport(viewport: Viewport): void {\n const viewportKey = viewport.id || 'default';\n const previousViewport = this._knownViewports.get(viewportKey);\n this._knownViewports.set(viewportKey, viewport);\n if (!previousViewport || !viewport.equals(previousViewport)) {\n this.setNeedsUpdate();\n }\n super.activateViewport(viewport);\n }\n\n /** Normalizes nested render output into a flat tile sub-layer array. */\n private _flattenTileLayers(\n rendered: Layer | null | LayersList\n ): Layer<{tile?: SharedTile2DHeader<DataT>}>[] {\n return flatten(rendered as any, Boolean) as Layer<{tile?: SharedTile2DHeader<DataT>}>[];\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {RequestScheduler, type TileSource, type TileSourceMetadata} from '@loaders.gl/loader-utils';\nimport type {Matrix4} from '@math.gl/core';\nimport {Stats} from '@probe.gl/stats';\nimport {SharedTile2DHeader} from './tile-2d-header';\nimport type {SharedTileset2DAdapter, SharedTileset2DTileContext} from './adapter';\nimport type {TileIndex, TileLoadProps, ZRange} from './types';\n\nexport const STRATEGY_NEVER = 'never';\nexport const STRATEGY_REPLACE = 'no-overlap';\nexport const STRATEGY_DEFAULT = 'best-available';\n\n/** Function form of a refinement strategy. */\nexport type RefinementStrategyFunction = (tiles: SharedTile2DHeader[]) => void;\n/** Strategy controlling how parent and child placeholder tiles are displayed while content loads. */\nexport type RefinementStrategy =\n | typeof STRATEGY_NEVER\n | typeof STRATEGY_REPLACE\n | typeof STRATEGY_DEFAULT\n | RefinementStrategyFunction;\n\n/** Core configuration shared by all {@link SharedTileset2D} instances. */\nexport type Tileset2DProps<DataT = any, ViewStateT = unknown> = {\n /** Callback used to load tile payloads. */\n getTileData: (props: TileLoadProps) => Promise<DataT | null> | DataT | null;\n /** Adapter used to compute tile traversal and tile metadata. */\n adapter?: SharedTileset2DAdapter<ViewStateT> | null;\n /** Bounding box limiting tile generation. */\n extent?: number[] | null;\n /** Tile size in pixels. */\n tileSize?: number;\n /** Maximum zoom level to request. */\n maxZoom?: number | null;\n /** Minimum zoom level to request. */\n minZoom?: number | null;\n /** Maximum number of tiles kept in cache. */\n maxCacheSize?: number | null;\n /** Maximum bytes kept in cache. */\n maxCacheByteSize?: number | null;\n /** Placeholder refinement strategy. */\n refinementStrategy?: RefinementStrategy;\n /** Elevation range used by geospatial tile selection. */\n zRange?: ZRange | null;\n /** Maximum concurrent tile requests. */\n maxRequests?: number;\n /** Debounce interval applied before issuing queued requests. */\n debounceTime?: number;\n /** Integer zoom offset applied when choosing tile levels. */\n zoomOffset?: number;\n /** Callback fired when a tile loads successfully. */\n onTileLoad?: (tile: SharedTile2DHeader<DataT>) => void;\n /** Callback fired when a tile is evicted from cache. */\n onTileUnload?: (tile: SharedTile2DHeader<DataT>) => void;\n /** Callback fired when a tile request fails. */\n onTileError?: (err: any, tile: SharedTile2DHeader<DataT>) => void;\n};\n\nexport const DEFAULT_TILESET2D_PROPS: Omit<Required<Tileset2DProps>, 'getTileData'> = {\n adapter: null,\n extent: null,\n tileSize: 512,\n maxZoom: null,\n minZoom: null,\n maxCacheSize: 100,\n maxCacheByteSize: null,\n refinementStrategy: 'best-available',\n zRange: null,\n maxRequests: 6,\n debounceTime: 0,\n zoomOffset: 0,\n onTileLoad: () => {},\n onTileUnload: () => {},\n onTileError: () => {}\n};\n\n/** Subscription callbacks emitted by {@link SharedTileset2D}. */\ntype Tile2DListener<DataT = any> = {\n /** Fired after a tile loads successfully. */\n onTileLoad?: (tile: SharedTile2DHeader<DataT>) => void;\n /** Fired after a tile request fails. */\n onTileError?: (error: any, tile: SharedTile2DHeader<DataT>) => void;\n /** Fired after a tile is evicted from cache. */\n onTileUnload?: (tile: SharedTile2DHeader<DataT>) => void;\n /** Fired when metadata or effective configuration changes. */\n onUpdate?: () => void;\n /** Fired when asynchronous metadata initialization fails. */\n onError?: (error: Error) => void;\n /** Fired after live tileset counters are recomputed. */\n onStatsChange?: (stats: Stats) => void;\n};\n\n/** Per-consumer tile sets retained by the shared cache. */\ntype ConsumerState<DataT = any> = {\n /** Tiles selected for this consumer's most recent traversal. */\n selectedTiles: Set<SharedTile2DHeader<DataT>>;\n /** Tiles currently marked render-visible for this consumer. */\n visibleTiles: Set<SharedTile2DHeader<DataT>>;\n};\n\n/** Options for creating a shared tile cache that can be reused by multiple layers and views. */\nexport type SharedTileset2DProps<DataT = any, ViewStateT = unknown> = Omit<\n Tileset2DProps<DataT, ViewStateT>,\n 'getTileData'\n> & {\n /** Optional tile loader used when not sourcing data from a loaders.gl TileSource. */\n getTileData?: (props: TileLoadProps) => Promise<DataT | null> | DataT | null;\n /** Optional loaders.gl TileSource backing this shared tileset. */\n tileSource?: TileSource;\n};\n\n/** Shared tile cache and loading engine for one or more {@link SharedTile2DLayer} instances. */\nexport class SharedTileset2D<DataT = any, ViewStateT = unknown> {\n /** Live counters describing shared tileset state. */\n readonly stats: Stats;\n /** Effective runtime options after defaults and metadata overrides have been applied. */\n protected opts: Required<SharedTileset2DProps<DataT, ViewStateT>>;\n /** Cached metadata returned by the backing TileSource, if any. */\n protected sourceMetadata: TileSourceMetadata | null = null;\n /** Scheduler shared across all tile requests for this tileset. */\n private _requestScheduler: RequestScheduler;\n /** Shared tile cache keyed by tile id. */\n private _cache: Map<string, SharedTile2DHeader<DataT>>;\n /** Tracks whether parent/child links need rebuilding. */\n private _dirty: boolean;\n /** Cached tiles sorted by zoom for traversal and rendering. */\n private _tiles: SharedTile2DHeader<DataT>[];\n /** Running total of cached payload byte size. */\n private _cacheByteSize: number;\n /** Cumulative number of tiles evicted from the shared cache. */\n private _unloadedTileCount: number;\n /** Subscribers watching tileset lifecycle events. */\n private _listeners = new Set<Tile2DListener<DataT>>();\n /** Selected and visible tiles tracked per consumer. */\n private _consumers = new Map<symbol, ConsumerState<DataT>>();\n /** Option names explicitly set by the caller. */\n private _explicitOptionKeys = new Set<string>();\n /** Caller-provided options before metadata-derived overrides are applied. */\n private _baseOpts: Partial<SharedTileset2DProps<DataT, ViewStateT>> = {};\n /** Derived overrides sourced from TileSource metadata. */\n private _sourceMetadataOverrides: Partial<SharedTileset2DProps<DataT, ViewStateT>> = {};\n /** Resolved maximum zoom level used by traversal. */\n private _maxZoom?: number;\n /** Resolved minimum zoom level used by traversal. */\n private _minZoom?: number;\n /** Most recent traversal context used to derive tile metadata. */\n private _lastTileContext: SharedTileset2DTileContext<ViewStateT> | null = null;\n\n /** Creates a tileset from either `getTileData` or a loaders.gl `TileSource`. */\n constructor(opts: SharedTileset2DProps<DataT, ViewStateT>) {\n this.stats = new Stats({\n id: 'SharedTileset2D',\n stats: [\n {name: 'Tiles In Cache'},\n {name: 'Cache Size'},\n {name: 'Visible Tiles'},\n {name: 'Selected Tiles'},\n {name: 'Loading Tiles'},\n {name: 'Unloaded Tiles'},\n {name: 'Consumers'}\n ]\n });\n this.opts = {\n ...DEFAULT_TILESET2D_PROPS,\n ...opts,\n getTileData: opts.getTileData || (() => null),\n tileSource: opts.tileSource\n } as Required<SharedTileset2DProps<DataT, ViewStateT>>;\n\n this._requestScheduler = new RequestScheduler({\n throttleRequests: this.opts.maxRequests > 0 || this.opts.debounceTime > 0,\n maxRequests: this.opts.maxRequests,\n debounceTime: this.opts.debounceTime\n });\n\n this._cache = new Map();\n this._tiles = [];\n this._dirty = false;\n this._cacheByteSize = 0;\n this._unloadedTileCount = 0;\n\n if (!this.opts.tileSource && !opts.getTileData) {\n throw new Error('SharedTileset2D requires either `getTileData` or `tileSource`.');\n }\n\n this.setOptions(opts);\n this._updateStats();\n\n if (this.opts.tileSource) {\n this._initializeTileSource(this.opts.tileSource).catch(() => {});\n }\n }\n\n /** Convenience factory for wrapping a loaders.gl `TileSource`. */\n static fromTileSource<DataT = any>(\n tileSource: TileSource,\n opts: Omit<SharedTileset2DProps<DataT>, 'tileSource' | 'getTileData'> = {}\n ): SharedTileset2D<DataT> {\n return new SharedTileset2D<DataT>({...opts, tileSource});\n }\n\n /** All tiles currently present in the shared cache. */\n get tiles(): SharedTile2DHeader<DataT>[] {\n return this._tiles;\n }\n\n /** Estimated byte size of all tile content currently retained in cache. */\n get cacheByteSize(): number {\n return this._cacheByteSize;\n }\n\n /** Union of tiles selected by all attached consumers. */\n get selectedTiles(): SharedTile2DHeader<DataT>[] {\n return Array.from(this._getSelectedTilesUnion());\n }\n\n /** Union of tiles contributing to the visible result across all consumers and views, including unloaded selected tiles. */\n get visibleTiles(): SharedTile2DHeader<DataT>[] {\n const union = this._getVisibleTilesUnion();\n for (const tile of this._getSelectedTilesUnion()) {\n union.add(tile);\n }\n return Array.from(union);\n }\n\n /** Tiles currently loading anywhere in the shared cache. */\n get loadingTiles(): SharedTile2DHeader<DataT>[] {\n return Array.from(this._cache.values()).filter((tile) => tile.isLoading);\n }\n\n /** Tiles retained in cache that do not currently have loaded content. */\n get unloadedTiles(): SharedTile2DHeader<DataT>[] {\n return Array.from(this._cache.values()).filter((tile) => !tile.isLoaded);\n }\n\n /** Maximum resolved zoom level after applying metadata and explicit options. */\n get maxZoom(): number | undefined {\n return this._maxZoom;\n }\n\n /** Minimum resolved zoom level after applying metadata and explicit options. */\n get minZoom(): number | undefined {\n return this._minZoom;\n }\n\n /** Active refinement strategy for placeholder handling. */\n get refinementStrategy(): RefinementStrategy {\n return this.opts.refinementStrategy || STRATEGY_DEFAULT;\n }\n\n /** Adapter currently used for traversal and tile metadata. */\n get adapter(): SharedTileset2DAdapter<ViewStateT> | null {\n return this.opts.adapter;\n }\n\n /** Subscribes to tileset lifecycle events. */\n subscribe(listener: Tile2DListener<DataT>): () => void {\n this._listeners.add(listener);\n return () => this._listeners.delete(listener);\n }\n\n /** Registers a consumer so cache pruning can account for its selected tiles. */\n attachConsumer(id: symbol): void {\n this._consumers.set(id, {selectedTiles: new Set(), visibleTiles: new Set()});\n this._updateStats();\n }\n\n /** Unregisters a consumer and prunes unused requests and tiles. */\n detachConsumer(id: symbol): void {\n this._consumers.delete(id);\n this._pruneRequests();\n this._resizeCache();\n this._updateStats();\n }\n\n /** Updates tileset options and reapplies TileSource metadata overrides. */\n setOptions(opts: Partial<SharedTileset2DProps<DataT, ViewStateT>>): void {\n this._rememberExplicitOptions(opts);\n this._baseOpts = {...this._baseOpts, ...opts};\n this._applyResolvedOptions();\n }\n\n /** Aborts in-flight requests and clears the shared cache. */\n finalize(): void {\n for (const tile of this._cache.values()) {\n if (tile.isLoading) {\n tile.abort();\n }\n }\n this._cache.clear();\n this._tiles = [];\n this._consumers.clear();\n this._cacheByteSize = 0;\n this._unloadedTileCount = 0;\n this._updateStats();\n }\n\n /** Marks all retained tiles stale and drops unused cached tiles. */\n reloadAll(): void {\n const selectedTiles = this._getSelectedTilesUnion();\n for (const id of this._cache.keys()) {\n const tile = this._cache.get(id);\n if (tile && !selectedTiles.has(tile)) {\n this._cache.delete(id);\n } else if (tile) {\n tile.setNeedsReload();\n }\n }\n this._cacheByteSize = this._getCacheByteSize();\n this.prepareTiles();\n this._updateStats();\n }\n\n /** Updates the selected and visible tile sets for one consumer. */\n updateConsumer(\n id: symbol,\n selectedTiles: SharedTile2DHeader<DataT>[],\n visibleTiles: SharedTile2DHeader<DataT>[]\n ): void {\n this._consumers.set(id, {\n selectedTiles: new Set(selectedTiles),\n visibleTiles: new Set(visibleTiles)\n });\n this._pruneRequests();\n this._resizeCache();\n this._updateStats();\n }\n\n /** Rebuilds parent/child links if the cache changed since the last traversal. */\n prepareTiles(): void {\n if (this._dirty) {\n this._rebuildTree();\n this._syncTiles();\n this._dirty = false;\n }\n }\n\n /** Returns tile indices needed to cover a viewport. */\n getTileIndices({\n viewState,\n maxZoom,\n minZoom,\n zRange,\n modelMatrix,\n modelMatrixInverse\n }: {\n viewState: ViewStateT;\n maxZoom?: number;\n minZoom?: number;\n zRange: ZRange | null;\n modelMatrix?: Matrix4 | null;\n modelMatrixInverse?: Matrix4 | null;\n }): TileIndex[] {\n const {adapter, tileSize, extent, zoomOffset} = this.opts;\n if (!adapter) {\n throw new Error('SharedTileset2D requires an adapter before tile traversal can be used.');\n }\n this._lastTileContext = {viewState, tileSize};\n return adapter.getTileIndices({\n viewState,\n maxZoom,\n minZoom,\n zRange,\n tileSize,\n extent: normalizeBounds(extent),\n modelMatrix,\n modelMatrixInverse,\n zoomOffset\n });\n }\n\n /** Returns the stable cache id for a tile index. */\n getTileId(index: TileIndex): string {\n return `${index.x}-${index.y}-${index.z}`;\n }\n\n /** Returns the zoom level represented by a tile index. */\n getTileZoom(index: TileIndex): number {\n return index.z;\n }\n\n /** Returns derived metadata used to initialize a tile header. */\n getTileMetadata(index: TileIndex): Record<string, any> {\n if (!this._lastTileContext) {\n throw new Error('SharedTileset2D metadata requested before traversal context was set.');\n }\n if (!this.opts.adapter) {\n throw new Error('SharedTileset2D requires an adapter before tile metadata can be derived.');\n }\n return {bbox: this.opts.adapter.getTileBoundingBox(this._lastTileContext, index)};\n }\n\n /** Returns the parent tile index in the quadtree. */\n getParentIndex(index: TileIndex): TileIndex {\n return {x: Math.floor(index.x / 2), y: Math.floor(index.y / 2), z: index.z - 1};\n }\n\n /** Returns a cached tile and optionally creates and loads it on demand. */\n getTile(index: TileIndex, create: true): SharedTile2DHeader<DataT>;\n getTile(index: TileIndex, create?: false): SharedTile2DHeader<DataT> | undefined;\n getTile(index: TileIndex, create?: boolean): SharedTile2DHeader<DataT> | undefined {\n const id = this.getTileId(index);\n let tile = this._cache.get(id);\n let needsReload = false;\n\n if (!tile && create) {\n tile = new SharedTile2DHeader(index);\n Object.assign(tile, this.getTileMetadata(tile.index));\n Object.assign(tile, {id, zoom: this.getTileZoom(tile.index)});\n needsReload = true;\n this._cache.set(id, tile);\n this._dirty = true;\n this._updateStats();\n } else if (tile && tile.needsReload) {\n needsReload = true;\n }\n\n if (tile) {\n this._touchTile(id, tile);\n }\n\n if (tile && needsReload) {\n tile\n .loadData({\n getData: this.opts.getTileData,\n requestScheduler: this._requestScheduler,\n onLoad: this._handleTileLoad.bind(this),\n onError: this._handleTileError.bind(this)\n })\n .catch(() => {});\n this._updateStats();\n }\n\n return tile;\n }\n\n /** Loads metadata from a TileSource and reapplies derived option overrides. */\n private async _initializeTileSource(tileSource: TileSource): Promise<void> {\n try {\n this.sourceMetadata = await tileSource.getMetadata();\n this._sourceMetadataOverrides = this._getMetadataOverrides(this.sourceMetadata);\n this._applyResolvedOptions();\n this._notifyUpdate();\n } catch (error: any) {\n const normalizedError =\n error instanceof Error ? error : new Error(`TileSource metadata error: ${String(error)}`);\n this._notifyError(normalizedError);\n }\n }\n\n /** Tracks which options were explicitly set by the caller. */\n private _rememberExplicitOptions(opts: Partial<SharedTileset2DProps<DataT, ViewStateT>>): void {\n for (const key of Object.keys(opts)) {\n this._explicitOptionKeys.add(key);\n }\n }\n\n /** Resolves defaults, metadata overrides, and caller options into runtime settings. */\n private _applyResolvedOptions(): void {\n const resolvedOpts = {\n ...DEFAULT_TILESET2D_PROPS,\n ...this._sourceMetadataOverrides,\n ...this._baseOpts\n } as Required<SharedTileset2DProps<DataT, ViewStateT>>;\n\n if (resolvedOpts.tileSource) {\n const tileSource = resolvedOpts.tileSource;\n resolvedOpts.getTileData = (loadProps: TileLoadProps) =>\n tileSource.getTileData(loadProps) as Promise<DataT | null> | DataT | null;\n }\n\n this.opts = resolvedOpts;\n this._maxZoom =\n typeof this.opts.maxZoom === 'number' && Number.isFinite(this.opts.maxZoom)\n ? Math.floor(this.opts.maxZoom)\n : undefined;\n this._minZoom =\n typeof this.opts.minZoom === 'number' && Number.isFinite(this.opts.minZoom)\n ? Math.ceil(this.opts.minZoom)\n : undefined;\n }\n\n /** Maps TileSource metadata into supported tileset options. */\n private _getMetadataOverrides(\n metadata: TileSourceMetadata | null\n ): Partial<SharedTileset2DProps<DataT, ViewStateT>> {\n if (!metadata) {\n return {};\n }\n const overrides: Partial<SharedTileset2DProps<DataT, ViewStateT>> = {};\n if (!this._explicitOptionKeys.has('minZoom') && Number.isFinite(metadata.minZoom)) {\n overrides.minZoom = metadata.minZoom;\n }\n if (!this._explicitOptionKeys.has('maxZoom') && Number.isFinite(metadata.maxZoom)) {\n overrides.maxZoom = metadata.maxZoom;\n }\n if (!this._explicitOptionKeys.has('extent') && metadata.boundingBox) {\n overrides.extent = [\n metadata.boundingBox[0][0],\n metadata.boundingBox[0][1],\n metadata.boundingBox[1][0],\n metadata.boundingBox[1][1]\n ];\n }\n return overrides;\n }\n\n /** Handles successful tile loads. */\n private _handleTileLoad(tile: SharedTile2DHeader<DataT>): void {\n this.opts.onTileLoad?.(tile);\n this._cacheByteSize = this._getCacheByteSize();\n this._resizeCache();\n for (const listener of this._listeners) {\n listener.onTileLoad?.(tile);\n }\n this._updateStats();\n }\n\n /** Handles tile load failures. */\n private _handleTileError(error: any, tile: SharedTile2DHeader<DataT>): void {\n this.opts.onTileError?.(error, tile);\n for (const listener of this._listeners) {\n listener.onTileError?.(error, tile);\n }\n this._updateStats();\n }\n\n /** Handles tile eviction from cache. */\n private _handleTileUnload(tile: SharedTile2DHeader<DataT>): void {\n this._unloadedTileCount++;\n this.opts.onTileUnload?.(tile);\n for (const listener of this._listeners) {\n listener.onTileUnload?.(tile);\n }\n this._updateStats();\n }\n\n /** Notifies listeners that metadata or effective options changed. */\n private _notifyUpdate(): void {\n for (const listener of this._listeners) {\n listener.onUpdate?.();\n }\n }\n\n /** Notifies listeners about asynchronous metadata errors. */\n private _notifyError(error: Error): void {\n for (const listener of this._listeners) {\n listener.onError?.(error);\n }\n }\n\n /** Recomputes absolute counter stats and notifies listeners. */\n private _updateStats(): void {\n this._setStatCount('Tiles In Cache', this._cache.size);\n this._setStatCount('Cache Size', this.cacheByteSize);\n this._setStatCount('Visible Tiles', this.visibleTiles.length);\n this._setStatCount('Selected Tiles', this.selectedTiles.length);\n this._setStatCount('Loading Tiles', this.loadingTiles.length);\n this._setStatCount('Unloaded Tiles', this._unloadedTileCount);\n this._setStatCount('Consumers', this._consumers.size);\n\n for (const listener of this._listeners) {\n listener.onStatsChange?.(this.stats);\n }\n }\n\n /** Writes an absolute count into a probe.gl stat. */\n private _setStatCount(name: string, value: number): void {\n this.stats.get(name).reset().addCount(value);\n }\n\n /** Returns the union of selected tiles across all consumers. */\n private _getSelectedTilesUnion(): Set<SharedTile2DHeader<DataT>> {\n const union = new Set<SharedTile2DHeader<DataT>>();\n for (const consumer of this._consumers.values()) {\n for (const tile of consumer.selectedTiles) {\n union.add(tile);\n }\n }\n return union;\n }\n\n /** Returns the union of visible tiles across all consumers. */\n private _getVisibleTilesUnion(): Set<SharedTile2DHeader<DataT>> {\n const union = new Set<SharedTile2DHeader<DataT>>();\n for (const consumer of this._consumers.values()) {\n for (const tile of consumer.visibleTiles) {\n union.add(tile);\n }\n }\n return union;\n }\n\n /** Moves a touched tile to the back of the cache map for LRU eviction ordering. */\n private _touchTile(id: string, tile: SharedTile2DHeader<DataT>): void {\n this._cache.delete(id);\n this._cache.set(id, tile);\n }\n\n /** Computes the total byte size of all cached tile content. */\n private _getCacheByteSize(): number {\n let byteLength = 0;\n for (const tile of this._cache.values()) {\n byteLength += tile.byteLength;\n }\n return byteLength;\n }\n\n /** Cancels low-priority requests when consumers no longer need them. */\n private _pruneRequests(): void {\n const {maxRequests = 0} = this.opts;\n const selectedTiles = this._getSelectedTilesUnion();\n const visibleTiles = this._getVisibleTilesUnion();\n const abortCandidates: SharedTile2DHeader<DataT>[] = [];\n let ongoingRequestCount = 0;\n\n for (const tile of this._cache.values()) {\n if (tile.isLoading) {\n ongoingRequestCount++;\n if (!selectedTiles.has(tile) && !visibleTiles.has(tile)) {\n abortCandidates.push(tile);\n }\n }\n }\n\n while (maxRequests > 0 && ongoingRequestCount > maxRequests && abortCandidates.length > 0) {\n const tile = abortCandidates.shift();\n if (tile) {\n tile.abort();\n }\n ongoingRequestCount--;\n }\n }\n\n /** Rebuilds parent and child links for all cached tiles. */\n private _rebuildTree(): void {\n for (const tile of this._cache.values()) {\n tile.parent = null;\n if (tile.children) {\n tile.children.length = 0;\n }\n }\n for (const tile of this._cache.values()) {\n const parent = this._getNearestAncestor(tile);\n tile.parent = parent;\n if (parent?.children) {\n parent.children.push(tile);\n }\n }\n }\n\n /** Updates the sorted tile list used by traversal and rendering. */\n private _syncTiles(): void {\n this._tiles = Array.from(this._cache.values()).sort((t1, t2) => t1.zoom - t2.zoom);\n }\n\n /** Evicts unused cached tiles when configured cache limits are exceeded. */\n private _resizeCache(): void {\n const maxCacheSize = this.opts.maxCacheSize ?? 100;\n const maxCacheByteSize = this.opts.maxCacheByteSize ?? Infinity;\n const visibleTiles = this._getVisibleTilesUnion();\n const selectedTiles = this._getSelectedTilesUnion();\n const overflown = this._cache.size > maxCacheSize || this._cacheByteSize > maxCacheByteSize;\n\n if (overflown) {\n for (const [id, tile] of this._cache) {\n if (!visibleTiles.has(tile) && !selectedTiles.has(tile)) {\n this._cache.delete(id);\n this._cacheByteSize = this._getCacheByteSize();\n this._handleTileUnload(tile);\n }\n if (this._cache.size <= maxCacheSize && this._cacheByteSize <= maxCacheByteSize) {\n break;\n }\n }\n this._dirty = true;\n }\n\n if (this._dirty) {\n this._rebuildTree();\n this._syncTiles();\n this._dirty = false;\n }\n }\n\n /** Finds the nearest cached ancestor tile for placeholder rendering. */\n private _getNearestAncestor(tile: SharedTile2DHeader<DataT>): SharedTile2DHeader<DataT> | null {\n const {_minZoom = 0} = this;\n let index = tile.index;\n while (this.getTileZoom(index) > _minZoom) {\n index = this.getParentIndex(index);\n const parent = this.getTile(index);\n if (parent) {\n return parent;\n }\n }\n return null;\n }\n}\n\nfunction normalizeBounds(extent: number[] | null | undefined) {\n return extent && extent.length === 4 ? (extent as [number, number, number, number]) : undefined;\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/* eslint-env browser */\nimport {RequestScheduler} from '@loaders.gl/loader-utils';\nimport type {TileBoundingBox, TileIndex, TileLoadProps} from './types';\n\n/** Parameters used by {@link SharedTile2DHeader.loadData}. */\nexport type Tile2DLoadDataProps<DataT = any> = {\n /** Shared request scheduler for throttling tile fetches. */\n requestScheduler: RequestScheduler;\n /** Application-provided tile data loader. */\n getData: (props: TileLoadProps) => Promise<DataT | null> | DataT | null;\n /** Callback fired after tile content resolves successfully. */\n onLoad: (tile: SharedTile2DHeader<DataT>) => void;\n /** Callback fired after tile content fails to load. */\n onError: (error: any, tile: SharedTile2DHeader<DataT>) => void;\n};\n\n/** Shared tile cache entry used by {@link SharedTileset2D}. */\nexport class SharedTile2DHeader<DataT = any> {\n /** x/y/z tile coordinate. */\n index: TileIndex;\n /** Closest cached ancestor tile in the current tree. */\n parent: SharedTile2DHeader | null;\n /** Cached child tiles beneath this tile. */\n children: SharedTile2DHeader[] | null;\n /** Loaded tile payload. */\n content: DataT | null;\n\n /** Stable tile cache id. */\n id!: string;\n /** Resolved zoom level for the tile. */\n zoom!: number;\n /** Optional application data associated with the tile. */\n userData?: Record<string, any>;\n /** Bounds represented as `[[minX, minY], [maxX, maxY]]` for loaders.gl compatibility. */\n boundingBox!: [min: number[], max: number[]];\n\n /** Abort controller for the current request, if one exists. */\n private _abortController: AbortController | null;\n /** Promise tracking the in-flight tile load, if any. */\n private _loader: Promise<void> | undefined;\n /** Monotonic request id used to ignore stale responses. */\n private _loaderId: number;\n /** Indicates whether the last request completed successfully. */\n private _isLoaded: boolean;\n /** Indicates whether the current request was cancelled. */\n private _isCancelled: boolean;\n /** Indicates whether the tile should be refreshed. */\n private _needsReload: boolean;\n /** Structured bounds assigned when the tile is created. */\n private _bbox!: TileBoundingBox;\n\n /** Creates a tile header for a specific tile index. */\n constructor(index: TileIndex) {\n this.index = index;\n this.parent = null;\n this.children = [];\n this.content = null;\n\n this._loader = undefined;\n this._abortController = null;\n this._loaderId = 0;\n this._isLoaded = false;\n this._isCancelled = false;\n this._needsReload = false;\n }\n\n /** Structured bounds for the tile in the active coordinate system. */\n get bbox(): TileBoundingBox {\n return this._bbox;\n }\n\n /** Initializes the tile bounds once during tile creation. */\n set bbox(value: TileBoundingBox) {\n if (this._bbox) return;\n\n this._bbox = value;\n if ('west' in value) {\n this.boundingBox = [\n [value.west, value.south],\n [value.east, value.north]\n ];\n } else {\n this.boundingBox = [\n [value.left, value.top],\n [value.right, value.bottom]\n ];\n }\n }\n\n /** Resolves to loaded content while a request is in flight, otherwise returns the cached content. */\n get data(): Promise<DataT | null> | DataT | null {\n const loader = this._loader;\n if (!this._isCancelled && loader !== undefined) {\n return loader.then(() => this.data);\n }\n return this.content;\n }\n\n /** Indicates whether tile content is available and up to date. */\n get isLoaded(): boolean {\n return this._isLoaded && !this._needsReload;\n }\n\n /** Indicates whether a tile request is currently in flight. */\n get isLoading(): boolean {\n return Boolean(this._loader) && !this._isCancelled;\n }\n\n /** Indicates whether the tile should be requested again. */\n get needsReload(): boolean {\n return this._needsReload || this._isCancelled;\n }\n\n /** Estimated byte size of the cached payload. */\n get byteLength(): number {\n const result = this.content ? (this.content as any).byteLength : 0;\n return Number.isFinite(result) ? result : 0;\n }\n\n /** Internal request pipeline used by {@link loadData}. */\n private async _loadData({\n getData,\n requestScheduler,\n onLoad,\n onError\n }: Tile2DLoadDataProps<DataT>): Promise<void> {\n const completeLoad = (tileData: DataT | null, error: unknown, loaderId: number): void => {\n if (loaderId !== this._loaderId) {\n return;\n }\n\n this._loader = undefined;\n this.content = tileData;\n\n if (this._isCancelled && !tileData) {\n this._isLoaded = false;\n return;\n }\n\n this._isLoaded = true;\n this._isCancelled = false;\n\n if (error) {\n onError(error, this);\n return;\n }\n onLoad(this);\n };\n\n const {index, id, bbox, userData, zoom} = this;\n const loaderId = this._loaderId;\n\n this._abortController = new AbortController();\n const {signal} = this._abortController;\n const requestToken = await requestScheduler.scheduleRequest(this, () => 1);\n\n if (!requestToken) {\n this._isCancelled = true;\n return;\n }\n if (this._isCancelled) {\n requestToken.done();\n return;\n }\n\n let tileData: DataT | null = null;\n let error;\n try {\n tileData = await getData({index, id, bbox, userData, zoom, signal});\n } catch (err) {\n error = err || true;\n } finally {\n requestToken.done();\n }\n\n completeLoad(tileData, error, loaderId);\n }\n\n /** Loads tile data through the shared scheduler. */\n loadData(opts: Tile2DLoadDataProps): Promise<void> {\n this._isLoaded = false;\n this._isCancelled = false;\n this._needsReload = false;\n this._loaderId++;\n this._loader = this._loadData(opts);\n return this._loader;\n }\n\n /** Marks the tile stale so it is refreshed on the next traversal. */\n setNeedsReload(): void {\n if (this.isLoading) {\n this.abort();\n this._loader = undefined;\n }\n this._needsReload = true;\n }\n\n /** Cancels an in-flight tile request. */\n abort(): void {\n if (this.isLoaded) {\n return;\n }\n this._isCancelled = true;\n this._abortController?.abort();\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {type Viewport} from '@deck.gl/core';\nimport {Matrix4, equals, type NumericArray} from '@math.gl/core';\n\nimport {memoize} from '../utils/memoize';\nimport {\n STRATEGY_DEFAULT,\n STRATEGY_NEVER,\n STRATEGY_REPLACE,\n SharedTile2DHeader,\n type SharedTileset2D\n} from '../tileset/index';\nimport {getCullBounds, sharedTile2DDeckAdapter, transformBox} from './deck-tileset-adapter';\n\n/** Bit flag marking a tile as visited during refinement traversal. */\nconst TILE_STATE_VISITED = 1;\n/** Bit flag marking a tile as visible during refinement traversal. */\nconst TILE_STATE_VISIBLE = 2;\n\n/** Built-in placeholder refinement handlers keyed by strategy name. */\nconst STRATEGIES = {\n [STRATEGY_DEFAULT]: updateTileStateDefault,\n [STRATEGY_REPLACE]: updateTileStateReplace,\n [STRATEGY_NEVER]: () => {}\n};\n\n/** View-specific visibility state cached per tile. */\ntype TileViewState = {\n /** Whether the tile was selected directly for the current viewport. */\n isSelected: boolean;\n /** Whether the tile should render in this viewport after refinement. */\n isVisible: boolean;\n /** Bit field used by refinement helpers while traversing ancestors and children. */\n state: number;\n};\n\n/** Per-viewport traversal state for the deck-facing shared tile layer. */\nexport class SharedTile2DView<DataT = any> {\n /** Unique consumer identifier used by the shared tileset cache. */\n readonly id = Symbol('tile-2d-view');\n\n /** Shared tileset queried by this view. */\n private _tileset: SharedTileset2D<DataT, Viewport>;\n /** Tiles selected during the latest traversal. */\n private _selectedTiles: SharedTile2DHeader<DataT>[] | null = null;\n /** Incremented whenever this view's visible tile set changes. */\n private _frameNumber = 0;\n /** Last viewport used to compute tile selection. */\n private _viewport: Viewport | null = null;\n /** Last z-range used during tile selection. */\n private _zRange: [number, number] | null = null;\n /** Last model matrix applied to tile selection. */\n private _modelMatrix = new Matrix4();\n /** Inverse of the current model matrix. */\n private _modelMatrixInverse = new Matrix4();\n /** Per-tile visibility and selection flags for this view. */\n private _state = new Map<SharedTile2DHeader<DataT>, TileViewState>();\n\n /** Creates a viewport-specific view of a shared tileset. */\n constructor(tileset: SharedTileset2D<DataT, Viewport>) {\n this._tileset = tileset;\n if (!this._tileset.adapter) {\n this._tileset.setOptions({adapter: sharedTile2DDeckAdapter});\n }\n this._tileset.attachConsumer(this.id);\n }\n\n /** Releases this view and detaches it from the shared tileset. */\n finalize(): void {\n this._tileset.detachConsumer(this.id);\n this._selectedTiles = null;\n this._state.clear();\n }\n\n /** Tiles selected for the last viewport update. */\n get selectedTiles(): SharedTile2DHeader<DataT>[] | null {\n return this._selectedTiles;\n }\n\n /** Indicates whether all selected tiles are fully loaded for this view. */\n get isLoaded(): boolean {\n return this._selectedTiles !== null && this._selectedTiles.every((tile) => tile.isLoaded);\n }\n\n /** Indicates whether any selected tile needs to be re-requested. */\n get needsReload(): boolean {\n return this._selectedTiles !== null && this._selectedTiles.some((tile) => tile.needsReload);\n }\n\n /** Updates tile selection and visibility for a viewport and returns the current frame number. */\n update(\n viewport: Viewport,\n {\n zRange,\n modelMatrix\n }: {\n zRange: [number, number] | null;\n modelMatrix: NumericArray | null;\n } = {zRange: null, modelMatrix: null}\n ): number {\n const modelMatrixAsMatrix4 = modelMatrix ? new Matrix4(modelMatrix) : new Matrix4();\n const isModelMatrixNew = !modelMatrixAsMatrix4.equals(this._modelMatrix);\n\n if (\n !this._viewport ||\n !viewport.equals(this._viewport) ||\n !equals(this._zRange, zRange) ||\n isModelMatrixNew\n ) {\n if (isModelMatrixNew) {\n this._modelMatrixInverse = modelMatrixAsMatrix4.clone().invert();\n this._modelMatrix = modelMatrixAsMatrix4;\n }\n this._viewport = viewport;\n this._zRange = zRange;\n const tileIndices = this._tileset.getTileIndices({\n viewState: viewport,\n maxZoom: this._tileset.maxZoom,\n minZoom: this._tileset.minZoom,\n zRange,\n modelMatrix: this._modelMatrix,\n modelMatrixInverse: this._modelMatrixInverse\n });\n this._selectedTiles = tileIndices.map((index) => this._tileset.getTile(index, true));\n this._tileset.prepareTiles();\n } else if (this.needsReload) {\n this._selectedTiles = (this._selectedTiles || []).map((tile) =>\n this._tileset.getTile(tile.index, true)\n );\n this._tileset.prepareTiles();\n }\n\n const changed = this._updateTileStates();\n this._tileset.updateConsumer(this.id, this._selectedTiles || [], this._getVisibleTiles());\n\n if (changed) {\n this._frameNumber++;\n }\n return this._frameNumber;\n }\n\n /** Tests whether a tile should render in the current viewport and culling rectangle. */\n isTileVisible(\n tile: SharedTile2DHeader<DataT>,\n cullRect?: {x: number; y: number; width: number; height: number},\n modelMatrix?: Matrix4 | null\n ): boolean {\n const state = this._state.get(tile);\n if (!state?.isVisible) {\n return false;\n }\n\n if (!cullRect || !this._viewport) {\n return true;\n }\n const boundsArr = this._getCullBounds({\n viewport: this._viewport,\n z: this._zRange,\n cullRect\n });\n return boundsArr.some((bounds) => this._tileOverlapsBounds(tile, bounds, modelMatrix));\n }\n\n /** Collects tiles currently marked visible for this view. */\n private _getVisibleTiles(): SharedTile2DHeader<DataT>[] {\n const result: SharedTile2DHeader<DataT>[] = [];\n for (const tile of this._tileset.tiles) {\n if (this._state.get(tile)?.isVisible) {\n result.push(tile);\n }\n }\n return result;\n }\n\n /** Memoized screen-space culling bounds helper. */\n private _getCullBounds = memoize(getCullBounds);\n\n /** Recomputes selected and placeholder-visible tiles for the current view. */\n private _updateTileStates(): boolean {\n const refinementStrategy = this._tileset.refinementStrategy || STRATEGY_DEFAULT;\n const allTiles = this._tileset.tiles;\n const previousVisibility = new Map<SharedTile2DHeader<DataT>, boolean>();\n\n for (const tile of allTiles) {\n const existing = this._state.get(tile);\n previousVisibility.set(tile, existing?.isVisible || false);\n this._state.set(tile, {isSelected: false, isVisible: false, state: 0});\n }\n\n for (const tile of this._selectedTiles || []) {\n const state = this._state.get(tile) || {isSelected: false, isVisible: false, state: 0};\n state.isSelected = true;\n state.isVisible = true;\n this._state.set(tile, state);\n }\n\n if (typeof refinementStrategy === 'function') {\n refinementStrategy(allTiles);\n } else {\n STRATEGIES[refinementStrategy](allTiles, this._state);\n }\n\n let changed = false;\n for (const tile of allTiles) {\n const state = this._state.get(tile);\n if (state && state.isVisible !== previousVisibility.get(tile)) {\n changed = true;\n }\n }\n return changed;\n }\n\n /** Tests one tile against one culling bounds rectangle. */\n private _tileOverlapsBounds(\n tile: SharedTile2DHeader<DataT>,\n [minX, minY, maxX, maxY]: [number, number, number, number],\n modelMatrix?: Matrix4 | null\n ): boolean {\n const bbox = this._getTileBoundingBox(tile, modelMatrix);\n if ('west' in bbox) {\n return bbox.west < maxX && bbox.east > minX && bbox.south < maxY && bbox.north > minY;\n }\n const y0 = Math.min(bbox.top, bbox.bottom);\n const y1 = Math.max(bbox.top, bbox.bottom);\n return bbox.left < maxX && bbox.right > minX && y0 < maxY && y1 > minY;\n }\n\n /** Applies model-matrix transforms to non-geospatial tile bounds when needed. */\n private _getTileBoundingBox(tile: SharedTile2DHeader<DataT>, modelMatrix?: Matrix4 | null) {\n const {bbox} = tile;\n if ('west' in bbox || !modelMatrix || Matrix4.IDENTITY.equals(modelMatrix)) {\n return bbox;\n }\n const [left, top, right, bottom] = transformBox(\n [bbox.left, bbox.top, bbox.right, bbox.bottom],\n modelMatrix\n );\n return {left, top, right, bottom};\n }\n}\n\n/** Default refinement strategy that prefers best available loaded descendants. */\nfunction updateTileStateDefault(\n allTiles: SharedTile2DHeader[],\n stateMap: Map<SharedTile2DHeader, TileViewState>\n) {\n for (const tile of allTiles) {\n getTileState(stateMap, tile).state = 0;\n }\n for (const tile of allTiles) {\n if (getTileState(stateMap, tile).isSelected && !getPlaceholderInAncestors(tile, stateMap)) {\n getPlaceholderInChildren(tile, stateMap);\n }\n }\n for (const tile of allTiles) {\n const state = getTileState(stateMap, tile);\n state.isVisible = Boolean(state.state & TILE_STATE_VISIBLE);\n }\n}\n\n/** Replacement refinement strategy that avoids visible overlap between ancestors and descendants. */\nfunction updateTileStateReplace(\n allTiles: SharedTile2DHeader[],\n stateMap: Map<SharedTile2DHeader, TileViewState>\n) {\n for (const tile of allTiles) {\n getTileState(stateMap, tile).state = 0;\n }\n for (const tile of allTiles) {\n if (getTileState(stateMap, tile).isSelected) {\n getPlaceholderInAncestors(tile, stateMap);\n }\n }\n const sortedTiles = Array.from(allTiles).sort((t1, t2) => t1.zoom - t2.zoom);\n for (const tile of sortedTiles) {\n const tileState = getTileState(stateMap, tile);\n tileState.isVisible = Boolean(tileState.state & TILE_STATE_VISIBLE);\n\n if (tile.children && (tileState.isVisible || tileState.state & TILE_STATE_VISITED)) {\n for (const child of tile.children) {\n getTileState(stateMap, child).state = TILE_STATE_VISITED;\n }\n } else if (tileState.isSelected) {\n getPlaceholderInChildren(tile, stateMap);\n }\n }\n}\n\n/** Searches upward for a loaded ancestor that can stand in for an unavailable selected tile. */\nfunction getPlaceholderInAncestors(\n startTile: SharedTile2DHeader,\n stateMap: Map<SharedTile2DHeader, TileViewState>\n): boolean {\n let tile: SharedTile2DHeader | null = startTile;\n while ((tile = tile.parent)) {\n const state = getTileState(stateMap, tile);\n state.state |= TILE_STATE_VISIBLE | TILE_STATE_VISITED;\n if (tile.isLoaded || tile.content) {\n return true;\n }\n }\n return false;\n}\n\n/** Searches downward for loaded descendants that can stand in for an unavailable selected tile. */\nfunction getPlaceholderInChildren(\n tile: SharedTile2DHeader,\n stateMap: Map<SharedTile2DHeader, TileViewState>\n): void {\n const state = getTileState(stateMap, tile);\n state.state |= TILE_STATE_VISIBLE | TILE_STATE_VISITED;\n\n if (!tile.children || !tile.children.length || tile.isLoaded || tile.content) {\n return;\n }\n\n for (const child of tile.children) {\n const childState = getTileState(stateMap, child);\n if (!(childState.state & TILE_STATE_VISITED)) {\n getPlaceholderInChildren(child, stateMap);\n }\n }\n}\n\n/** Returns view state for a tile, creating a default record when needed. */\nfunction getTileState(\n stateMap: Map<SharedTile2DHeader, TileViewState>,\n tile: SharedTile2DHeader\n): TileViewState {\n let tileState = stateMap.get(tile);\n if (!tileState) {\n tileState = {isSelected: false, isVisible: false, state: 0};\n stateMap.set(tile, tileState);\n }\n return tileState;\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport function memoize<In, Out>(compute: (args: In) => Out): (args: In) => Out {\n let cachedArgs: any = {};\n let cachedResult: Out;\n\n return (args: In) => {\n for (const key in args) {\n if (!isEqual(args[key], cachedArgs[key])) {\n cachedResult = compute(args);\n cachedArgs = args;\n break;\n }\n }\n return cachedResult;\n };\n}\n\nfunction isEqual(a, b) {\n if (a === b) {\n return true;\n }\n if (Array.isArray(a)) {\n const len = a.length;\n if (!b || b.length !== len) {\n return false;\n }\n for (let i = 0; i < len; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n return false;\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Viewport, WebMercatorViewport, _GlobeViewport} from '@deck.gl/core';\nimport {\n CullingVolume,\n Plane,\n AxisAlignedBoundingBox,\n makeOrientedBoundingBoxFromPoints\n} from '@math.gl/culling';\nimport {lngLatToWorld} from '@math.gl/web-mercator';\nimport type {Bounds, TileIndex, ZRange} from '../tileset/types';\nimport {osmTile2lngLat} from './deck-tileset-adapter';\n\nconst TILE_SIZE = 512;\nconst MAX_MAPS = 3;\nconst REF_POINTS_5 = [\n [0.5, 0.5],\n [0, 0],\n [0, 1],\n [1, 0],\n [1, 1]\n];\nconst REF_POINTS_9 = REF_POINTS_5.concat([\n [0, 0.5],\n [0.5, 0],\n [1, 0.5],\n [0.5, 1]\n]);\nconst REF_POINTS_11 = REF_POINTS_9.concat([\n [0.25, 0.5],\n [0.75, 0.5]\n]);\n\nclass OSMNode {\n x: number;\n y: number;\n z: number;\n\n private childVisible?: boolean;\n private selected?: boolean;\n private _children?: OSMNode[];\n\n constructor(x: number, y: number, z: number) {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n\n get children(): OSMNode[] {\n if (!this._children) {\n const x = this.x * 2;\n const y = this.y * 2;\n const z = this.z + 1;\n this._children = [\n new OSMNode(x, y, z),\n new OSMNode(x, y + 1, z),\n new OSMNode(x + 1, y, z),\n new OSMNode(x + 1, y + 1, z)\n ];\n }\n return this._children;\n }\n\n update(params: {\n viewport: Viewport;\n project: ((xyz: number[]) => number[]) | null;\n cullingVolume: CullingVolume;\n elevationBounds: ZRange;\n minZ: number;\n maxZ: number;\n bounds?: Bounds;\n offset: number;\n }): boolean {\n const {viewport, cullingVolume, elevationBounds, minZ, maxZ, bounds, offset, project} = params;\n const boundingVolume = this.getBoundingVolume(elevationBounds, offset, project);\n\n if (bounds && !this.insideBounds(bounds)) {\n return false;\n }\n\n const isInside = cullingVolume.computeVisibility(boundingVolume);\n if (isInside < 0) {\n return false;\n }\n\n if (!this.childVisible) {\n let {z} = this;\n if (z < maxZ && z >= minZ) {\n const distance =\n (boundingVolume.distanceTo(viewport.cameraPosition) * viewport.scale) / viewport.height;\n z += Math.floor(Math.log2(distance));\n }\n if (z >= maxZ) {\n this.selected = true;\n return true;\n }\n }\n\n this.selected = false;\n this.childVisible = true;\n for (const child of this.children) {\n child.update(params);\n }\n return true;\n }\n\n getSelected(result: OSMNode[] = []): OSMNode[] {\n if (this.selected) {\n result.push(this);\n }\n if (this._children) {\n for (const node of this._children) {\n node.getSelected(result);\n }\n }\n return result;\n }\n\n insideBounds([minX, minY, maxX, maxY]: Bounds): boolean {\n const scale = Math.pow(2, this.z);\n const extent = TILE_SIZE / scale;\n\n return (\n this.x * extent < maxX &&\n this.y * extent < maxY &&\n (this.x + 1) * extent > minX &&\n (this.y + 1) * extent > minY\n );\n }\n\n getBoundingVolume(\n zRange: ZRange,\n worldOffset: number,\n project: ((xyz: number[]) => number[]) | null\n ) {\n if (project) {\n const refPoints = this.z < 1 ? REF_POINTS_11 : this.z < 2 ? REF_POINTS_9 : REF_POINTS_5;\n const refPointPositions: number[][] = [];\n for (const p of refPoints) {\n const lngLat: number[] = osmTile2lngLat(this.x + p[0], this.y + p[1], this.z);\n lngLat[2] = zRange[0];\n refPointPositions.push(project(lngLat));\n\n if (zRange[0] !== zRange[1]) {\n lngLat[2] = zRange[1];\n refPointPositions.push(project(lngLat));\n }\n }\n\n return makeOrientedBoundingBoxFromPoints(refPointPositions);\n }\n\n const scale = Math.pow(2, this.z);\n const extent = TILE_SIZE / scale;\n const originX = this.x * extent + worldOffset * TILE_SIZE;\n const originY = TILE_SIZE - (this.y + 1) * extent;\n\n return new AxisAlignedBoundingBox(\n [originX, originY, zRange[0]],\n [originX + extent, originY + extent, zRange[1]]\n );\n }\n}\n\n/** deck.gl-specific OSM tile traversal for geospatial viewports. */\nexport function getOSMTileIndices(\n viewport: Viewport,\n maxZ: number,\n zRange: ZRange | null,\n bounds?: Bounds\n): TileIndex[] {\n const project: ((xyz: number[]) => number[]) | null =\n viewport instanceof _GlobeViewport && viewport.resolution\n ? (xyz) => viewport.projectPosition(xyz)\n : null;\n\n const planes: Plane[] = Object.values(viewport.getFrustumPlanes()).map(\n ({normal, distance}) => new Plane(normal.clone().negate(), distance)\n );\n const cullingVolume = new CullingVolume(planes);\n\n const unitsPerMeter = viewport.distanceScales.unitsPerMeter[2];\n const elevationMin = (zRange && zRange[0] * unitsPerMeter) || 0;\n const elevationMax = (zRange && zRange[1] * unitsPerMeter) || 0;\n const minZ = viewport instanceof WebMercatorViewport && viewport.pitch <= 60 ? maxZ : 0;\n\n if (bounds) {\n const [minLng, minLat, maxLng, maxLat] = bounds;\n const topLeft = lngLatToWorld([minLng, maxLat]);\n const bottomRight = lngLatToWorld([maxLng, minLat]);\n bounds = [topLeft[0], TILE_SIZE - topLeft[1], bottomRight[0], TILE_SIZE - bottomRight[1]];\n }\n\n const root = new OSMNode(0, 0, 0);\n const traversalParams = {\n viewport,\n project,\n cullingVolume,\n elevationBounds: [elevationMin, elevationMax] as ZRange,\n minZ,\n maxZ,\n bounds,\n offset: 0\n };\n\n root.update(traversalParams);\n updateWrappedWorldCopies(root, traversalParams, viewport);\n\n return root.getSelected();\n}\n\nfunction updateWrappedWorldCopies(\n root: OSMNode,\n traversalParams: Parameters<OSMNode['update']>[0],\n viewport: Viewport\n): void {\n if (\n !(viewport instanceof WebMercatorViewport) ||\n !viewport.subViewports ||\n viewport.subViewports.length <= 1\n ) {\n return;\n }\n\n sweepOffsets(root, traversalParams, -1, -MAX_MAPS);\n sweepOffsets(root, traversalParams, 1, MAX_MAPS);\n}\n\nfunction sweepOffsets(\n root: OSMNode,\n traversalParams: Parameters<OSMNode['update']>[0],\n startOffset: number,\n limit: number\n): void {\n traversalParams.offset = startOffset;\n while (root.update(traversalParams)) {\n traversalParams.offset += Math.sign(startOffset);\n if (\n (startOffset < 0 && traversalParams.offset < limit) ||\n (startOffset > 0 && traversalParams.offset > limit)\n ) {\n break;\n }\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {Viewport} from '@deck.gl/core';\nimport {Matrix4} from '@math.gl/core';\nimport type {Bounds, GeoBoundingBox, TileBoundingBox, TileIndex, ZRange} from '../tileset/types';\nimport type {\n SharedTileset2DAdapter,\n SharedTileset2DTileContext,\n SharedTileset2DTraversalContext\n} from '../tileset/adapter';\nimport {getOSMTileIndices} from './deck-tile-traversal';\n\nconst TILE_SIZE = 512;\nconst DEFAULT_EXTENT: Bounds = [-Infinity, -Infinity, Infinity, Infinity];\n\n/** deck.gl viewport type used by the shared tile layer adapter. */\nexport type SharedTile2DDeckViewState = Viewport;\n\n/** Applies a model transform to an axis-aligned bounding box. */\nexport function transformBox(bbox: Bounds, modelMatrix: Matrix4): Bounds {\n const transformedCoords = [\n modelMatrix.transformAsPoint([bbox[0], bbox[1]]),\n modelMatrix.transformAsPoint([bbox[2], bbox[1]]),\n modelMatrix.transformAsPoint([bbox[0], bbox[3]]),\n modelMatrix.transformAsPoint([bbox[2], bbox[3]])\n ];\n return [\n Math.min(...transformedCoords.map((i) => i[0])),\n Math.min(...transformedCoords.map((i) => i[1])),\n Math.max(...transformedCoords.map((i) => i[0])),\n Math.max(...transformedCoords.map((i) => i[1]))\n ];\n}\n\nfunction getBoundingBox(viewport: Viewport, zRange: number[] | null, extent: Bounds): Bounds {\n let bounds;\n if (zRange && zRange.length === 2) {\n const [minZ, maxZ] = zRange;\n const bounds0 = viewport.getBounds({z: minZ});\n const bounds1 = viewport.getBounds({z: maxZ});\n bounds = [\n Math.min(bounds0[0], bounds1[0]),\n Math.min(bounds0[1], bounds1[1]),\n Math.max(bounds0[2], bounds1[2]),\n Math.max(bounds0[3], bounds1[3])\n ];\n } else {\n bounds = viewport.getBounds();\n }\n if (!viewport.isGeospatial) {\n return [\n Math.max(Math.min(bounds[0], extent[2]), extent[0]),\n Math.max(Math.min(bounds[1], extent[3]), extent[1]),\n Math.min(Math.max(bounds[2], extent[0]), extent[2]),\n Math.min(Math.max(bounds[3], extent[1]), extent[3])\n ];\n }\n return [\n Math.max(bounds[0], extent[0]),\n Math.max(bounds[1], extent[1]),\n Math.min(bounds[2], extent[2]),\n Math.min(bounds[3], extent[3])\n ];\n}\n\n/** Computes cull bounds in projected/world coordinates for one deck viewport. */\nexport function getCullBounds({\n viewport,\n z,\n cullRect\n}: {\n viewport: Viewport;\n z: ZRange | number | null;\n cullRect: {x: number; y: number; width: number; height: number};\n}): [number, number, number, number][] {\n const subViewports = viewport.subViewports || [viewport];\n return subViewports.map((v) => getCullBoundsInViewport(v, z || 0, cullRect));\n}\n\nfunction getCullBoundsInViewport(\n viewport: Viewport,\n z: ZRange | number,\n cullRect: {x: number; y: number; width: number; height: number}\n): [number, number, number, number] {\n if (!Array.isArray(z)) {\n const x = cullRect.x - viewport.x;\n const y = cullRect.y - viewport.y;\n const {width, height} = cullRect;\n const unprojectOption = {targetZ: z};\n\n const topLeft = viewport.unproject([x, y], unprojectOption);\n const topRight = viewport.unproject([x + width, y], unprojectOption);\n const bottomLeft = viewport.unproject([x, y + height], unprojectOption);\n const bottomRight = viewport.unproject([x + width, y + height], unprojectOption);\n\n return [\n Math.min(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]),\n Math.min(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1]),\n Math.max(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]),\n Math.max(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1])\n ];\n }\n\n const bounds0 = getCullBoundsInViewport(viewport, z[0], cullRect);\n const bounds1 = getCullBoundsInViewport(viewport, z[1], cullRect);\n\n return [\n Math.min(bounds0[0], bounds1[0]),\n Math.min(bounds0[1], bounds1[1]),\n Math.max(bounds0[2], bounds1[2]),\n Math.max(bounds0[3], bounds1[3])\n ];\n}\n\nfunction getIndexingCoords(\n bbox: Bounds,\n scale: number,\n modelMatrixInverse?: Matrix4 | null\n): Bounds {\n if (modelMatrixInverse) {\n return transformBox(bbox, modelMatrixInverse).map((i) => (i * scale) / TILE_SIZE) as Bounds;\n }\n return bbox.map((i) => (i * scale) / TILE_SIZE) as Bounds;\n}\n\nfunction getScale(z: number, tileSize: number): number {\n return (Math.pow(2, z) * TILE_SIZE) / tileSize;\n}\n\n/** Converts an OSM tile coordinate to longitude/latitude. */\nexport function osmTile2lngLat(x: number, y: number, z: number): [number, number] {\n const scale = getScale(z, TILE_SIZE);\n const lng = (x / scale) * 360 - 180;\n const n = Math.PI - (2 * Math.PI * y) / scale;\n const lat = (180 / Math.PI) * Math.atan(0.5 * (Math.exp(n) - Math.exp(-n)));\n return [lng, lat];\n}\n\nfunction tile2XY(x: number, y: number, z: number, tileSize: number): [number, number] {\n const scale = getScale(z, tileSize);\n return [(x / scale) * TILE_SIZE, (y / scale) * TILE_SIZE];\n}\n\nfunction tileToBoundingBox(\n viewport: Viewport,\n x: number,\n y: number,\n z: number,\n tileSize: number = TILE_SIZE\n): TileBoundingBox {\n if (viewport.isGeospatial) {\n const [west, north] = osmTile2lngLat(x, y, z);\n const [east, south] = osmTile2lngLat(x + 1, y + 1, z);\n return {west, north, east, south};\n }\n const [left, top] = tile2XY(x, y, z, tileSize);\n const [right, bottom] = tile2XY(x + 1, y + 1, z, tileSize);\n return {left, top, right, bottom};\n}\n\nfunction getIdentityTileIndices(\n viewport: Viewport,\n z: number,\n tileSize: number,\n extent: Bounds,\n modelMatrixInverse?: Matrix4 | null\n): TileIndex[] {\n const bbox = getBoundingBox(viewport, null, extent);\n const scale = getScale(z, tileSize);\n const [minX, minY, maxX, maxY] = getIndexingCoords(bbox, scale, modelMatrixInverse);\n const indices: TileIndex[] = [];\n\n for (let x = Math.floor(minX); x < maxX; x++) {\n for (let y = Math.floor(minY); y < maxY; y++) {\n indices.push({x, y, z});\n }\n }\n return indices;\n}\n\nfunction getTileZoomForViewport(viewport: Viewport, tileSize: number, zoomOffset: number): number {\n return viewport.isGeospatial\n ? Math.round(viewport.zoom + Math.log2(TILE_SIZE / tileSize)) + zoomOffset\n : Math.ceil(viewport.zoom) + zoomOffset;\n}\n\nfunction applyZoomBounds(\n z: number,\n minZoom: number | undefined,\n maxZoom: number | undefined,\n extent?: Bounds | null\n): number | null {\n if (typeof minZoom === 'number' && Number.isFinite(minZoom) && z < minZoom) {\n if (!extent) {\n return null;\n }\n z = minZoom;\n }\n if (typeof maxZoom === 'number' && Number.isFinite(maxZoom) && z > maxZoom) {\n z = maxZoom;\n }\n return z;\n}\n\nfunction getDeckTileIndices(context: SharedTileset2DTraversalContext<Viewport>): TileIndex[] {\n const {\n viewState: viewport,\n maxZoom,\n minZoom,\n zRange = null,\n extent,\n tileSize = TILE_SIZE,\n modelMatrix,\n modelMatrixInverse,\n zoomOffset = 0\n } = context;\n let z = getTileZoomForViewport(viewport, tileSize, zoomOffset);\n z = applyZoomBounds(z, minZoom, maxZoom, extent);\n if (z === null) {\n return [];\n }\n\n let transformedExtent = extent || undefined;\n if (modelMatrix && modelMatrixInverse && extent && !viewport.isGeospatial) {\n transformedExtent = transformBox(extent, modelMatrix);\n }\n\n return viewport.isGeospatial\n ? getOSMTileIndices(viewport, z, zRange, extent || undefined)\n : getIdentityTileIndices(\n viewport,\n z,\n tileSize,\n transformedExtent || DEFAULT_EXTENT,\n modelMatrixInverse\n );\n}\n\nfunction getDeckTileBoundingBox(\n context: SharedTileset2DTileContext<Viewport>,\n index: TileIndex\n): TileBoundingBox {\n return tileToBoundingBox(context.viewState, index.x, index.y, index.z, context.tileSize);\n}\n\n/** Deck.gl adapter used by {@link SharedTile2DLayer} to drive a generic {@link SharedTileset2D}. */\nexport const sharedTile2DDeckAdapter: SharedTileset2DAdapter<Viewport> = {\n getTileIndices: getDeckTileIndices,\n getTileBoundingBox: getDeckTileBoundingBox\n};\n\n/** Type guard for geographic tile bounds. */\nexport function isGeoBoundingBox(v: any): v is GeoBoundingBox {\n return (\n Number.isFinite(v.west) &&\n Number.isFinite(v.north) &&\n Number.isFinite(v.east) &&\n Number.isFinite(v.south)\n );\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {TileIndex} from '../tileset/types';\n\n/** URL template accepted by {@link SharedTile2DLayer} when loading tiles directly by URL. */\nexport type URLTemplate = string | string[] | null;\n\nfunction stringHash(s: string): number {\n return Math.abs(s.split('').reduce((a, b) => ((a << 5) - a + b.charCodeAt(0)) | 0, 0));\n}\n\n/** Expands one tile URL template for a given tile index. */\nexport function getURLFromTemplate(\n template: URLTemplate,\n tile: {\n index: TileIndex;\n id: string;\n }\n): string | null {\n if (!template || !template.length) {\n return null;\n }\n const {index, id} = tile;\n\n if (Array.isArray(template)) {\n template = template[stringHash(id) % template.length];\n }\n\n let url = template;\n for (const key of Object.keys(index)) {\n url = url.replace(new RegExp(`{${key}}`, 'g'), String(index[key as keyof TileIndex]));\n }\n\n if (Number.isInteger(index.y) && Number.isInteger(index.z)) {\n url = url.replace(/\\{-y\\}/g, String(Math.pow(2, index.z) - index.y - 1));\n }\n return url;\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer, type Color, type DefaultProps} from '@deck.gl/core';\nimport {PathLayer, TextLayer} from '@deck.gl/layers';\n\nimport type {SharedTile2DHeader} from '../tileset/index';\nimport type {TileBoundingBox} from '../tileset/types';\n\n/** Label content or formatter used by {@link TileGridLayer}. */\ntype TileGridLabelAccessor = string | ((tile: SharedTile2DHeader<unknown>) => string);\n\n/**\n * Props for {@link TileGridLayer}, a helper overlay for visualizing tile loading\n * and tile selection in tiled layers.\n */\nexport type TileGridLayerProps = {\n /** Tile header whose bounds and index should be visualized. */\n tile: SharedTile2DHeader<unknown>;\n /** Whether to draw an outline around the tile bounds. Defaults to `true`. */\n showBorder?: boolean;\n /** Whether to render a label at the tile center. Defaults to `true`. */\n showLabel?: boolean;\n /** Static label text or formatter for per-tile label content. */\n getLabel?: TileGridLabelAccessor;\n /** Stroke color used for the tile border. */\n borderColor?: Color;\n /** Text color used for the tile label. */\n labelColor?: Color;\n /** Background color used behind the tile label text. */\n labelBackgroundColor?: Color;\n /** Minimum screen-space width of the tile border in pixels. */\n borderWidthMinPixels?: number;\n /** Screen-space font size of the tile label in pixels. */\n labelSize?: number;\n};\n\n/** Internal derived geometry used to render one tile grid overlay. */\ntype TileGridLayerItem = {\n path: [number, number][];\n center: [number, number];\n label: string;\n};\n\n/** Default prop values for {@link TileGridLayer}. */\nconst defaultProps: DefaultProps<TileGridLayerProps> = {\n tile: {type: 'object', value: undefined!},\n showBorder: true,\n showLabel: true,\n getLabel: {\n type: 'function',\n value: (tile: SharedTile2DHeader<unknown>) =>\n `z${tile.index.z} x${tile.index.x} y${tile.index.y}`\n },\n borderColor: [255, 255, 255, 180],\n labelColor: [255, 255, 255, 255],\n labelBackgroundColor: [15, 23, 42, 210],\n borderWidthMinPixels: 1,\n labelSize: 12\n};\n\n/** Converts a tile bounding box into a closed outline path. */\nfunction getTilePath(bbox: TileBoundingBox): [number, number][] {\n if ('west' in bbox) {\n return [\n [bbox.west, bbox.north],\n [bbox.west, bbox.south],\n [bbox.east, bbox.south],\n [bbox.east, bbox.north],\n [bbox.west, bbox.north]\n ];\n }\n\n return [\n [bbox.left, bbox.top],\n [bbox.left, bbox.bottom],\n [bbox.right, bbox.bottom],\n [bbox.right, bbox.top],\n [bbox.left, bbox.top]\n ];\n}\n\n/** Returns the center point of a tile bounding box. */\nfunction getTileCenter(bbox: TileBoundingBox): [number, number] {\n if ('west' in bbox) {\n return [(bbox.west + bbox.east) / 2, (bbox.north + bbox.south) / 2];\n }\n\n return [(bbox.left + bbox.right) / 2, (bbox.top + bbox.bottom) / 2];\n}\n\n/**\n * Helper layer that renders a tile outline and optional label for visualizing tile\n * loading, coverage, and traversal.\n */\nexport class TileGridLayer extends CompositeLayer<TileGridLayerProps> {\n static layerName = 'TileGridLayer';\n static defaultProps: DefaultProps<TileGridLayerProps> = defaultProps;\n\n /** Builds the tile border and label sublayers. */\n renderLayers() {\n const {\n tile,\n showBorder,\n showLabel,\n getLabel,\n borderColor,\n labelColor,\n labelBackgroundColor,\n borderWidthMinPixels,\n labelSize\n } = this.props;\n\n const item: TileGridLayerItem = {\n path: getTilePath(tile.bbox),\n center: getTileCenter(tile.bbox),\n label: typeof getLabel === 'function' ? getLabel(tile) : getLabel\n };\n\n return [\n showBorder\n ? new PathLayer<TileGridLayerItem>(\n this.getSubLayerProps({\n id: 'border'\n }),\n {\n data: [item],\n getPath: (d) => d.path,\n getColor: borderColor,\n widthMinPixels: borderWidthMinPixels,\n pickable: false\n }\n )\n : null,\n showLabel\n ? new TextLayer<TileGridLayerItem>(\n this.getSubLayerProps({\n id: 'label'\n }),\n {\n data: [item],\n getPosition: (d) => d.center,\n getText: (d) => d.label,\n getColor: labelColor,\n getBackgroundColor: labelBackgroundColor,\n getSize: labelSize,\n sizeUnits: 'pixels',\n background: true,\n getTextAnchor: 'middle',\n getAlignmentBaseline: 'center',\n pickable: false\n }\n )\n : null\n ];\n }\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {type AccessorFunction, type DefaultProps} from '@deck.gl/core';\nimport {_GeoCellLayer, type _GeoCellLayerProps} from '@deck.gl/geo-layers';\nimport {GlobalGrid} from '../global-grid-systems/grids/global-grid';\nimport {flattenPolygon} from '../global-grid-systems/utils/geometry-utils';\n\n/** All properties supported by GlobalGridLayer. */\nexport type GlobalGridLayerProps<DataT = unknown> = _GlobalGridLayerProps<DataT> &\n _GeoCellLayerProps<DataT>;\n\n/** Properties added by GlobalGridLayer. */\ntype _GlobalGridLayerProps<DataT> = {\n /** The DGGS decoder to use. */\n globalGrid: GlobalGrid;\n /** Called for each data object to retrieve the DGGS cell identifier. By default, it reads `cellId` property of data object. */\n getCellId?: AccessorFunction<DataT, string | bigint>;\n};\n\n/** Render filled and/or stroked polygons based on the specified DGGS geospatial indexing system. */\nexport class GlobalGridLayer<DataT = any, ExtraProps extends {} = {}> extends _GeoCellLayer<\n DataT,\n Required<_GlobalGridLayerProps<DataT>> & ExtraProps\n> {\n static layerName = 'GlobalGridLayer';\n static defaultProps: DefaultProps<GlobalGridLayerProps> = {\n getCellId: {type: 'accessor', value: (d: any) => d.cellId},\n globalGrid: {type: 'object', compare: true, value: undefined!}\n };\n\n initializeState(): void {\n this.props.globalGrid?.initialize?.();\n }\n\n indexToBounds(): Partial<_GeoCellLayer['props']> | null {\n const {data, getCellId} = this.props;\n\n return {\n data,\n _normalize: false,\n _windingOrder: 'CCW',\n positionFormat: 'XY',\n getPolygon: (x: DataT, objectInfo) => {\n const {globalGrid} = this.props;\n const cell = getCellId(x, objectInfo);\n const boundary = globalGrid.cellToBoundary(cell);\n boundary.push(boundary[0]);\n return flattenPolygon(boundary);\n }\n };\n }\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {type CoordPair} from '../h3-js-bigint/h3-js-bigint';\n\n// normalize longitudes w.r.t center (refLng), when not provided first vertex\nexport function normalizeLongitudes(vertices: CoordPair[], refLng?: number): void {\n refLng = refLng === undefined ? vertices[0][0] : refLng;\n for (const pt of vertices) {\n const deltaLng = pt[0] - refLng;\n if (deltaLng > 180) {\n pt[0] -= 360;\n } else if (deltaLng < -180) {\n pt[0] += 360;\n }\n }\n}\n\nexport function flattenPolygon(vertices: number[][]): Float64Array {\n const positions = new Float64Array(vertices.length * 2);\n let i = 0;\n for (const pt of vertices) {\n positions[i++] = pt[0];\n positions[i++] = pt[1];\n }\n return positions;\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// import {type Bounds2D} from '@math.gl/types';\nimport {type GlobalGrid} from './global-grid';\nimport {cellToBoundary, cellToLonLat, lonLatToCell} from 'a5-js';\nimport {hexToBigInt} from '../utils/hex-utils';\n\n// TODO - internal types in a5-js\ntype Degrees = number & {\n __brand: 'Degrees';\n};\ntype LonLat = [longitude: Degrees, latitude: Degrees] & {\n __brand: 'LonLat';\n};\n\n/**\n * \"Standardized\" API for working with A5 DGGS tokens.\n * @note Copy of same type in math.gl. They are structurally identical. Will be replaced by an import in the future.\n */\nexport const A5Grid = {\n name: 'A5',\n hasNumericRepresentation: true,\n\n tokenToCell: (token: string) => hexToBigInt(token),\n lngLatToCell: (lngLat: [number, number], resolution: number) =>\n lonLatToCell(lngLat as LonLat, resolution),\n\n cellToToken: (cell: string | bigint) => (typeof cell === 'string' ? cell : cell.toString(16)),\n cellToLngLat: (cell: string | bigint) => cellToLonLat(getBigInt(cell)),\n cellToBoundary: (cell: string | bigint) => cellToBoundary(getBigInt(cell))\n} as const satisfies GlobalGrid;\n\n/** Helper function to convert cells to bigints */\nconst getBigInt = (value: string | bigint): bigint => {\n return typeof value === 'string' ? hexToBigInt(value) : value;\n};\n", "/**\n * Converts a hexadecimal string (with or without \u201C0x\u201D prefix) to a bigint.\n * @param hex - The hex string representation (e.g., \"0x1a2b\", \"FF\", \"00ff\")\n * @returns The corresponding bigint value.\n * @throws {Error} If the input is not a valid hex string.\n */\nexport function hexToBigInt(hex: string): bigint {\n if (typeof hex !== 'string') {\n throw new Error(`hexToBigInt: expected string, got ${typeof hex}`);\n }\n\n let s = hex.trim();\n if (s.startsWith('0x') || s.startsWith('0X')) {\n s = s.slice(2);\n }\n\n if (s === '') {\n throw new Error(`hexToBigInt: empty hex string`);\n }\n\n // validate: only hex digits\n if (!/^[0-9A-Fa-f]+$/.test(s)) {\n throw new Error(`hexToBigInt: invalid hex string \u201C${hex}\u201D`);\n }\n\n // Optional: normalize even length by prepending a zero if odd\n if (s.length % 2 === 1) {\n s = `0${s}`;\n }\n\n // Use BigInt conversion from string with 0x prefix\n try {\n return BigInt(`0x${s}`);\n } catch (e) {\n throw new Error(\n `hexToBigInt: cannot convert hex string \u201C${hex}\u201D to bigint: ${(e as Error).message}`\n );\n }\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// A thin wrapper around h3-js that support BigInts\n// Note: incurs some overhead as we need to convert between BigInt and SplitLong\n\nimport {\n type CoordPair,\n type SplitLong,\n latLngToCell,\n cellToBoundary as _cellToBoundary,\n cellToLatLng as _cellToLatLng,\n cellsToMultiPolygon as _cellsToMultiPolygon,\n h3IndexToSplitLong as _h3IndexToSplitLong\n // splitLongToH3Index as _splitLongToH3Index\n} from 'h3-js';\n\nexport {type CoordPair, type SplitLong, latLngToCell};\n\nexport type H3IndexInput = bigint | string | SplitLong;\n\nconst scratchSplitLong: SplitLong = [0, 0];\n\nexport function h3IndexToSplitLong(h3Index: H3IndexInput, target?: SplitLong): SplitLong {\n if (typeof h3Index === 'bigint') {\n return bigIntToSplitLong(h3Index, target ?? [0, 0]);\n }\n return _h3IndexToSplitLong(h3Index);\n}\n\nexport function h3IndexToBigInt(h3Index: H3IndexInput): bigint {\n if (typeof h3Index === 'bigint') {\n return h3Index;\n }\n const splitLong = h3IndexToSplitLong(h3Index, scratchSplitLong);\n return splitLongToBigInt(splitLong);\n}\n\nexport function cellToLatLng(h3Index: H3IndexInput): [number, number] {\n const splitLong = h3IndexToSplitLong(h3Index, scratchSplitLong);\n const latLng = _cellToLatLng(splitLong);\n return latLng;\n}\n\nexport function cellToBoundary(h3Index: H3IndexInput, formatAsGeoJson?: boolean): CoordPair[] {\n const splitLong = h3IndexToSplitLong(h3Index, scratchSplitLong);\n const vertices = _cellToBoundary(splitLong, formatAsGeoJson);\n return vertices;\n}\n\nexport function cellsToMultiPolygon(\n h3Indexes: H3IndexInput[],\n formatAsGeoJson?: boolean\n): CoordPair[][][] {\n const splitLongs = h3Indexes.map((h3Index) => h3IndexToSplitLong(h3Index));\n const polygons = _cellsToMultiPolygon(splitLongs, formatAsGeoJson);\n return polygons;\n}\n\n// HELPERS\n\n/**\n * Splits a bigint into a 2-element array of 32-bit numbers.\n * @param value - The bigint to split.\n * @returns A 2-element array containing the high and low 32-bit numbers.\n */\nfunction bigIntToSplitLong(value: bigint, target: SplitLong = [0, 0]): SplitLong {\n // Mask lower 32 bits\n target[0] = Number(value & 0xffffffffn); // BigInt & BigInt \u21D2 BigInt :contentReference[oaicite:2]{index=2}\n // Shift right to get upper 32 bits\n target[1] = Number((value >> 32n) & 0xffffffffn); // BigInt >> BigInt \u21D2 BigInt :contentReference[oaicite:3]{index=3}\n return target;\n}\n\n/**\n * Joins two 32-bit numbers into a bigint.\n * @param high - The high 32-bit number.\n * @param low - The low 32-bit number.\n * @returns The combined bigint.\n */\nfunction splitLongToBigInt([low, high]: SplitLong): bigint {\n // Shift high half back and OR with low half\n return (BigInt(high) << 32n) | BigInt(low); // BigInt << BigInt \u21D2 BigInt; BigInt | BigInt \u21D2 BigInt :contentReference[oaicite:4]{index=4}\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {type GlobalGrid} from './global-grid';\nimport {\n latLngToCell,\n cellToBoundary,\n cellToLatLng,\n cellsToMultiPolygon,\n h3IndexToBigInt\n} from '../h3-js-bigint/h3-js-bigint';\n\n/**\n * \"Standardized\" API for working with H3 DGGS tokens.\n * @note Inspired by similar work in math.gl. May replace by an import in the future.\n */\nexport const H3Grid = {\n name: 'H3',\n hasNumericRepresentation: true,\n\n // See `main/bundle.ts`, installs a check for the H3 library.\n initialize: () => {},\n\n tokenToCell: (token: string) => h3IndexToBigInt(token),\n\n lngLatToToken: (lngLat: [number, number], resolution: number) =>\n latLngToCell(lngLat[1], lngLat[0], resolution),\n lngLatToCell: (lngLat: [number, number], resolution: number) =>\n h3IndexToBigInt(latLngToCell(lngLat[1], lngLat[0], resolution)),\n\n cellToLngLat: (cell: string | bigint) => reverseLatLngInPlace(cellToLatLng(cell)),\n cellToBoundary: (cell: string | bigint) => cellToBoundary(cell),\n cellsToBoundaryMultiPolygon: (cells: string[] | bigint[]) => cellsToMultiPolygon(cells, true)\n} as const satisfies GlobalGrid;\n\n// HELPERS\n\n/** Reverse the latitude and longitude in place to avoid minting new arrays. */\nfunction reverseLatLngInPlace(latLng: [number, number]): [number, number] {\n const temp = latLng[0];\n latLng[0] = latLng[1];\n latLng[1] = temp;\n return latLng;\n}\n", "// math.gl\n// SPDX-License-Identifier: MIT and Apache-2.0\n// Copyright (c) vis.gl contributors\n\n// s2-geometry is a pure JavaScript port of Google/Niantic's S2 Geometry library\n// which is perfect since it works in the browser.\n\n// const MAXIMUM_TOKEN_LENGTH = 16;\n\n// INDEX CALCULATIONS\n\n/**\n * Given an S2 token (String) this function convert the token to 64 bit id (Index)\n * 'X' is the empty cell\n * https://github.com/google/s2-geometry-library-java/blob/c04b68bf3197a9c34082327eeb3aec7ab7c85da1/src/com/google/common/geometry/S2CellId.java#L439\n */\nexport function getS2IndexFromToken(token: string): bigint {\n if (token === 'X') {\n token = '';\n }\n // pad token with zeros to make the length 16\n const paddedToken = token.padEnd(16, '0');\n return BigInt(`0x${paddedToken}`);\n}\n\n/**\n * Convert a 64 bit number to a string token\n * 'X' is the empty cell\n */\nexport function getS2TokenFromIndex(cellId: bigint): string {\n if (cellId === 0n) {\n return 'X';\n }\n let numZeroDigits = countTrailingZeros(cellId);\n\n const remainder = numZeroDigits % 4;\n numZeroDigits = (numZeroDigits - remainder) / 4;\n const trailingZeroHexChars = numZeroDigits;\n numZeroDigits *= 4;\n\n const x = cellId >> BigInt(numZeroDigits);\n const hexString = x.toString(16).replace(/0+$/, '');\n const zeroString = Array(17 - trailingZeroHexChars - hexString.length).join('0');\n return zeroString + hexString;\n}\n\nexport function getS2ChildIndex(s2Index: bigint, index: number): bigint {\n // Shift sentinel bit 2 positions to the right.\n const newLsb = lsb(s2Index) >> 2n;\n // Insert child index before the sentinel bit.\n const childCellId: bigint = s2Index + BigInt(2 * index + 1 - 4) * newLsb;\n return childCellId;\n}\n\n/**\n * Return the lowest-numbered bit that is on for this cell id\n * @private\n */\nfunction lsb(cellId: bigint): bigint {\n return cellId & (cellId + 1n); // eslint-disable-line\n}\n\nfunction countTrailingZeros(n: bigint): number {\n let count = 0;\n while (n % 2n === 0n) {\n n /= 2n;\n count++;\n }\n return count;\n}\n", "// math.gl\n// SPDX-License-Identifier: MIT and ISC\n// Copyright (c) vis.gl contributors\n\n// math.gl, MIT license\n/*\nAdapted from s2-geometry under ISC License (ISC)\nCopyright (c) 2012-2016, Jon Atkins <github@jonatkins.com>\nCopyright (c) 2016, AJ ONeal <aj@daplie.com>\nPermission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n*/\n\nexport type S2Cell = {\n face: number;\n ij: [number, number];\n level: number;\n};\n\nexport function getS2Cell(s2Index: bigint): S2Cell {\n const key = toHilbertQuadkey(s2Index);\n const s2cell = fromHilbertQuadKey(key);\n return s2cell;\n}\n\n//\n// Functional Style\n//\nconst FACE_BITS = 3;\nconst MAX_LEVEL = 30;\nconst POS_BITS = 2 * MAX_LEVEL + 1; // 61 (60 bits of data, 1 bit lsb marker)\nconst RADIAN_TO_DEGREE = 180 / Math.PI;\n\n/*\n Original function taken from deck.gl doesn't support the case of (face <= 5)\n It's fixed here.\n*/\nexport function fromHilbertQuadKey(hilbertQuadkey: string): S2Cell {\n const parts = hilbertQuadkey.split('/');\n const face = parseInt(parts[0], 10);\n const position = parts[1];\n /*\n Fix for the case of level==0 that corresponds to (face <= 5)\n const maxLevel = position.length;\n let level;\n */\n const maxLevel = face > 5 ? position.length : 0;\n let level = 0;\n\n const point = [0, 0] as [number, number];\n\n for (let i = maxLevel - 1; i >= 0; i--) {\n level = maxLevel - i;\n const bit = position[i];\n let rx = 0;\n let ry = 0;\n if (bit === '1') {\n ry = 1;\n } else if (bit === '2') {\n rx = 1;\n ry = 1;\n } else if (bit === '3') {\n rx = 1;\n }\n\n const val = Math.pow(2, level - 1);\n rotateAndFlipQuadrant(val, point, rx, ry);\n\n point[0] += val * rx;\n point[1] += val * ry;\n }\n\n if (face % 2 === 1) {\n const t = point[0];\n point[0] = point[1];\n point[1] = t;\n }\n\n return {face, ij: point, level};\n}\n\nexport function toHilbertQuadkey(id: bigint): string {\n let bin = id.toString(2);\n\n while (bin.length < FACE_BITS + POS_BITS) {\n // eslint-disable-next-line prefer-template\n bin = '0' + bin;\n }\n\n // MUST come AFTER binstr has been left-padded with '0's\n const lsbIndex = bin.lastIndexOf('1');\n // substr(start, len)\n // substring(start, end) // includes start, does not include end\n const faceB = bin.substring(0, 3);\n // posB will always be a multiple of 2 (or it's invalid)\n const posB = bin.substring(3, lsbIndex);\n const levelN = posB.length / 2;\n\n const faceS = BigInt(`0b${faceB}`).toString(10);\n\n /*\n Here is a fix for the case when posB is an empty string that causes an exception in Long.fromString\n\n let posS = Long.fromString(posB, true, 2).toString(4);\n */\n let posS = '0';\n if (levelN !== 0) {\n // posB is not an empty string< because levelN!==0\n posS = BigInt(`0b${posB}`).toString(4);\n\n while (posS.length < levelN) {\n // eslint-disable-next-line prefer-template\n posS = '0' + posS;\n }\n }\n // Note, posS will be \"0\" for the level==0\n // TODO: Is it ok?\n\n return `${faceS}/${posS}`;\n}\n\nexport function IJToST(\n ij: [number, number],\n order: number,\n offsets: [number, number]\n): [number, number] {\n const maxSize = 1 << order;\n\n return [(ij[0] + offsets[0]) / maxSize, (ij[1] + offsets[1]) / maxSize];\n}\n\nfunction singleSTtoUV(st: number): number {\n if (st >= 0.5) {\n return (1 / 3.0) * (4 * st * st - 1);\n }\n return (1 / 3.0) * (1 - 4 * (1 - st) * (1 - st));\n}\n\nexport function STToUV(st: [number, number]): [number, number] {\n return [singleSTtoUV(st[0]), singleSTtoUV(st[1])];\n}\n\nexport function FaceUVToXYZ(face: number, [u, v]: [number, number]): [number, number, number] {\n switch (face) {\n case 0:\n return [1, u, v];\n case 1:\n return [-u, 1, v];\n case 2:\n return [-u, -v, 1];\n case 3:\n return [-1, -v, -u];\n case 4:\n return [v, -1, -u];\n case 5:\n return [v, u, -1];\n default:\n throw new Error('Invalid face');\n }\n}\n\nexport function XYZToLngLat([x, y, z]: [number, number, number]): [number, number] {\n const lat = Math.atan2(z, Math.sqrt(x * x + y * y));\n const lng = Math.atan2(y, x);\n\n return [lng * RADIAN_TO_DEGREE, lat * RADIAN_TO_DEGREE];\n}\n\nfunction rotateAndFlipQuadrant(n: number, point: [number, number], rx: number, ry: number): void {\n if (ry === 0) {\n if (rx === 1) {\n point[0] = n - 1 - point[0];\n point[1] = n - 1 - point[1];\n }\n\n const x = point[0];\n point[0] = point[1];\n point[1] = x;\n }\n}\n", "// math.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {IJToST, STToUV, FaceUVToXYZ, XYZToLngLat, getS2Cell} from './s2-geometry';\n\nconst MAX_RESOLUTION = 100;\n\nexport function getS2GeoBounds(s2Index: bigint): Float64Array {\n const s2Cell = getS2Cell(s2Index);\n return getS2GeoBoundsFromCell(s2Cell);\n}\n\n/**\n * The S2 cell edge is curved: http://s2geometry.io/\n * This is more prominent at lower levels\n * resolution is the number of segments to generate per edge.\n * We exponentially reduce resolution as level increases so it doesn't affect perf\n * when there are a large number of cells\n */\n// eslint-disable-next-line max-statements\nexport function getS2GeoBoundsFromCell({\n face,\n ij,\n level\n}: {\n face: number;\n ij: [number, number];\n level: number;\n}): Float64Array {\n const offsets = [\n [0, 0],\n [0, 1],\n [1, 1],\n [1, 0],\n [0, 0]\n ];\n\n const resolution = Math.max(1, Math.ceil(MAX_RESOLUTION * Math.pow(2, -level)));\n const result = new Float64Array(4 * resolution * 2 + 2);\n let ptIndex = 0;\n let prevLng = 0;\n\n for (let i = 0; i < 4; i++) {\n const offset = offsets[i].slice(0) as [number, number];\n const nextOffset = offsets[i + 1];\n const stepI = (nextOffset[0] - offset[0]) / resolution;\n const stepJ = (nextOffset[1] - offset[1]) / resolution;\n\n for (let j = 0; j < resolution; j++) {\n offset[0] += stepI;\n offset[1] += stepJ;\n // Cell can be represented by coordinates IJ, ST, UV, XYZ\n // http://s2geometry.io/devguide/s2cell_hierarchy#coordinate-systems\n const st = IJToST(ij, level, offset);\n const uv = STToUV(st);\n const xyz = FaceUVToXYZ(face, uv);\n const lngLat = XYZToLngLat(xyz);\n\n // Adjust longitude for Web Mercator projection\n if (Math.abs(lngLat[1]) > 89.999) {\n lngLat[0] = prevLng;\n }\n const deltaLng = lngLat[0] - prevLng;\n lngLat[0] += deltaLng > 180 ? -360 : deltaLng < -180 ? 360 : 0;\n\n result[ptIndex++] = lngLat[0];\n result[ptIndex++] = lngLat[1];\n prevLng = lngLat[0];\n }\n }\n // close the loop\n result[ptIndex++] = result[0];\n result[ptIndex++] = result[1];\n return result;\n}\n", "// math.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {type Bounds2D} from '@math.gl/types';\nimport {type GlobalGrid} from './global-grid';\n\nimport {getS2IndexFromToken, getS2TokenFromIndex} from '../s2-geometry/s2-token';\nimport {getS2GeoBounds} from '../s2-geometry/s2-to-boundary';\nimport {getS2Cell, IJToST, STToUV, FaceUVToXYZ, XYZToLngLat} from '../s2-geometry/s2-geometry';\n\n/** Decoder for the S2 DGGS */\nexport const S2Grid = {\n name: 'S2',\n hasNumericRepresentation: true,\n\n tokenToCell: (cell: string): bigint => getS2IndexFromToken(cell),\n cellToToken: (cell: string | bigint): string => getS2TokenFromIndex(getBigInt(cell)),\n cellToLngLat: (cell: string | bigint): [number, number] => getS2LngLat(getBigInt(cell)),\n cellToBoundary: (cell: string | bigint): [number, number][] => getS2Boundary(getBigInt(cell))\n\n // cellToBoundaryPolygonFlat: (cell: bigint): number[] => getS2BoundaryFlat(cell),\n // cellToBounds: (cell: bigint): Bounds2D => getS2Bounds(cell)\n} as const satisfies GlobalGrid;\n\n/** S2 functions operate on bigints */\nconst getBigInt = (value: string | bigint): bigint => {\n return typeof value === 'string' ? getS2IndexFromToken(value) : value;\n};\n\n/**\n * Retrieve S2 geometry center\n */\nexport function getS2LngLat(cell: bigint): [number, number] {\n const s2Cell = getS2Cell(cell);\n\n const st = IJToST(s2Cell.ij, s2Cell.level, [0.5, 0.5]);\n const uv = STToUV(st);\n const xyz = FaceUVToXYZ(s2Cell.face, uv);\n const lngLat = XYZToLngLat(xyz);\n\n return lngLat;\n}\n\n/**\n * Get a polygon with corner coordinates for an s2 cell\n * @param - This can be an S2 key or token\n * @return {Float64Array} - a simple polygon in flat array format: [lng0, lat0, lng1, lat1, ...]\n * - the polygon is closed, i.e. last coordinate is a copy of the first coordinate\n */\nfunction getS2BoundaryFlat(cell: bigint): number[] {\n const float64Array = getS2GeoBounds(cell);\n // TODO - inefficient\n return Array.from(float64Array);\n}\n\nfunction getS2Boundary(cell: bigint): [number, number][] {\n const flatBoundary = getS2BoundaryFlat(cell);\n const boundary: [number, number][] = [];\n for (let i = 0; i < flatBoundary.length; i += 2) {\n boundary.push([flatBoundary[i], flatBoundary[i + 1]]);\n }\n return boundary;\n}\n\nexport function getS2Bounds(cell: bigint): Bounds2D {\n const flatBoundary = getS2Boundary(cell);\n\n // We know that we have at least one point, no Infinity will be returned.\n let xmin = Infinity;\n let ymin = Infinity;\n let xmax = -Infinity;\n let ymax = -Infinity;\n\n for (const [x, y] of flatBoundary) {\n if (x < xmin) xmin = x;\n if (x > xmax) xmax = x;\n if (y < ymin) ymin = y;\n if (y > ymax) ymax = y;\n }\n\n return [\n [xmin, ymin],\n [xmax, ymax]\n ];\n}\n", "// math.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {type Bounds2D} from '@math.gl/types';\nimport {type GlobalGrid} from './global-grid';\n\n/** Decoder for the geohash global grid system */\nexport const GeohashGrid = {\n name: 'geohash',\n hasNumericRepresentation: false,\n\n cellToLngLat: (geohash: string | bigint): [number, number] =>\n getGeohashLngLat(getString(geohash)),\n cellToBoundary: (geohash: string | bigint): [number, number][] =>\n getGeohashBoundary(getString(geohash))\n // cellToBoundaryPolygonFlat: (geohash: bigint): number[] => getGeohashBoundaryFlat(geohash),\n // cellToBounds: (geohash: bigint): Bounds2D => getGeohashBounds(geohash)\n} as const satisfies GlobalGrid;\n\nconst getString = (geohash: string | bigint): string => {\n if (typeof geohash !== 'string') {\n throw new Error('geohash must be a string');\n }\n return geohash;\n};\n\nconst BASE32_CODES = '0123456789bcdefghjkmnpqrstuvwxyz';\nconst BASE32_CODES_DICT: Record<string, number> = {};\nfor (let i = 0; i < BASE32_CODES.length; i++) {\n BASE32_CODES_DICT[BASE32_CODES.charAt(i)] = i;\n}\n\nconst MIN_LAT = -90;\nconst MAX_LAT = 90;\nconst MIN_LON = -180;\nconst MAX_LON = 180;\n\n/** Return center lng,lat of geohash cell */\nfunction getGeohashLngLat(geohash: string): [number, number] {\n const [[s, w], [n, e]] = getGeohashBounds(geohash);\n return [(e + w) / 2, (n + s) / 2];\n}\n\n/** Return boundary polygon of geohash cell as lng,lat array */\nfunction getGeohashBoundary(geohash: string): [number, number][] {\n const [[s, w], [n, e]] = getGeohashBounds(geohash);\n return [\n [e, n],\n [e, s],\n [w, s],\n [w, n],\n [e, n]\n ];\n}\n\n/** Return boundary polygon of geohash cell as flat array */\nexport function getGeohashBoundaryFlat(geohash: string): number[] {\n const [[s, w], [n, e]] = getGeohashBounds(geohash);\n return [e, n, e, s, w, s, w, n, e, n];\n}\n\n/**\n * @note Adapted from ngeohash decode_bbox\n */\n/* eslint-disable max-depth */\nexport function getGeohashBounds(geohash: string): Bounds2D {\n let isLon = true;\n let maxLat = MAX_LAT;\n let minLat = MIN_LAT;\n let maxLon = MAX_LON;\n let minLon = MIN_LON;\n let mid: number;\n\n let hashValue = 0;\n for (let i = 0, l = geohash.length; i < l; i++) {\n const code = geohash[i].toLowerCase();\n hashValue = BASE32_CODES_DICT[code];\n\n for (let bits = 4; bits >= 0; bits--) {\n const bit = (hashValue >> bits) & 1;\n if (isLon) {\n mid = (maxLon + minLon) / 2;\n if (bit === 1) {\n minLon = mid;\n } else {\n maxLon = mid;\n }\n } else {\n mid = (maxLat + minLat) / 2;\n if (bit === 1) {\n minLat = mid;\n } else {\n maxLat = mid;\n }\n }\n isLon = !isLon;\n }\n }\n\n return [\n [minLat, minLon],\n [maxLat, maxLon]\n ];\n}\n", "// math.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {type Bounds2D} from '@math.gl/types';\nimport {type GlobalGrid} from './global-grid';\n\nconst TILE_SIZE = 512;\n\n/** Decoder for the quadkey DGGS */\nexport const QuadkeyGrid = {\n name: 'quadkey',\n hasNumericRepresentation: true,\n\n // cellToToken: (cell: bigint): string => quadkeyCellToToken(cell),\n // tokenToCell: (cell: string): bigint => quadKeyToBigint(cell),\n\n cellToLngLat: (cell: string | bigint): [number, number] => quadkeyCellToLngLat(getString(cell)),\n cellToBoundary: (cell: string | bigint): [number, number][] =>\n quadkeyCellToBoundary(getString(cell))\n\n // cellToBoundaryPolygonFlat: (cell: string | bigint): number[] => getQuadkeyBoundaryFlat(cell),\n // cellToBounds: (cell: string | bigint): Bounds2D => getQuadkeyBounds(cell)\n} as const satisfies GlobalGrid;\n\n/** Quadkey only supports strings */\nconst getString = (cell: string | bigint): string => {\n if (typeof cell !== 'string') {\n throw new Error('geohash must be a string');\n }\n return cell;\n};\n\nfunction quadkeyCellToLngLat(quadkey: string): [number, number] {\n const [topLeft, bottomRight] = quadkeyToWorldBounds(quadkey);\n const [w, n] = worldToLngLat(topLeft);\n const [e, s] = worldToLngLat(bottomRight);\n return [(e + w) / 2, (s + n) / 2];\n}\n\nfunction quadkeyCellToBoundary(quadkey: string): [number, number][] {\n const [topLeft, bottomRight] = quadkeyToWorldBounds(quadkey);\n const [w, n] = worldToLngLat(topLeft);\n const [e, s] = worldToLngLat(bottomRight);\n return [\n [e, n],\n [e, s],\n [w, s],\n [w, n],\n [e, n]\n ];\n}\n\nexport function quadkeyCellToBoundaryFlat(quadkey: string): number[] {\n const [topLeft, bottomRight] = quadkeyToWorldBounds(quadkey);\n const [w, n] = worldToLngLat(topLeft);\n const [e, s] = worldToLngLat(bottomRight);\n return [e, n, e, s, w, s, w, n, e, n];\n}\n\nexport function quadkeyCellToBounds(quadkey: string): Bounds2D {\n const [topLeft, bottomRight] = quadkeyToWorldBounds(quadkey);\n const [w, n] = worldToLngLat(topLeft);\n const [e, s] = worldToLngLat(bottomRight);\n return [\n [w, s],\n [e, n]\n ];\n}\n\nexport function quadkeyToWorldBounds(quadkey: string): [[number, number], [number, number]] {\n let x = 0;\n let y = 0;\n let mask = 1 << quadkey.length;\n const scale = mask / TILE_SIZE;\n\n for (let i = 0; i < quadkey.length; i++) {\n mask >>= 1;\n const q = parseInt(quadkey[i], 10);\n if (q % 2) x |= mask;\n if (q > 1) y |= mask;\n }\n return [\n [x / scale, TILE_SIZE - y / scale],\n [(x + 0.99) / scale, TILE_SIZE - (y + 0.99) / scale]\n ];\n}\n\n// CONSTANTS\nconst PI = Math.PI;\nconst PI_4 = PI / 4;\nconst RADIANS_TO_DEGREES = 180 / PI;\n\n/**\n * Unproject world point [x,y] on map onto {lat, lon} on sphere\n *\n * @param xy - array with [x,y] members\n * representing point on projected map plane\n * @return - array with [x,y] of point on sphere.\n * Has toArray method if you need a GeoJSON Array.\n * Per cartographic tradition, lat and lon are specified as degrees.\n */\nfunction worldToLngLat(xy: number[]): [number, number] {\n const [x, y] = xy;\n const lambda2 = (x / TILE_SIZE) * (2 * PI) - PI;\n const phi2 = 2 * (Math.atan(Math.exp((y / TILE_SIZE) * (2 * PI) - PI)) - PI_4);\n return [lambda2 * RADIANS_TO_DEGREES, phi2 * RADIANS_TO_DEGREES];\n}\n\n// EXPERIMENTAL BIGINT ENCODING FOR QUADKEYS\n\n/**\n * Encodes a QuadKey string into a bigint.\n * @param quadkey - The QuadKey string.\n * @returns The bigint representation of the QuadKey.\n */\nexport function quadKeyToBigint(quadkey: string): bigint {\n let result = 0n;\n for (const digit of quadkey) {\n const value = BigInt(parseInt(digit, 4));\n result = (result << 2n) | value;\n }\n const zoom = quadkey.length;\n // Shift the result to align with the most significant bits\n const shift = 64 - 5 - zoom * 2; // Reserve 5 bits for zoom level\n result = result << BigInt(shift);\n // Append the zoom level in the least significant 5 bits\n return result | BigInt(zoom);\n}\n\n/**\n * Decodes a bigint-encoded QuadKey back into its string representation.\n * @param encoded - The bigint representation of the QuadKey with embedded zoom level.\n * @returns The decoded QuadKey string.\n */\nexport function bigintToQuadKey(encoded: bigint): string {\n const zoom = Number(encoded & 0b11111n); // Extract the last 5 bits for zoom level\n const shift = BigInt(64 - 5 - zoom * 2); // Calculate the shift to align the QuadKey bits\n const quadkeyBits = (encoded >> shift) & ((1n << BigInt(zoom * 2)) - 1n); // Extract QuadKey bits\n let quadkey = '';\n for (let i = zoom - 1; i >= 0; i--) {\n const digit = Number((quadkeyBits >> BigInt(i * 2)) & 0b11n);\n quadkey += digit.toString();\n }\n return quadkey;\n}\n\n/**\n * Checks if the child QuadKey is contained within the parent QuadKey.\n * @param parent - The bigint representation of the parent QuadKey.\n * @param child - The bigint representation of the child QuadKey.\n * @returns True if the child is contained within the parent; otherwise, false.\n */\nexport function isContained(parent: bigint, child: bigint): boolean {\n const parentZoom = Number(parent & 0b11111n); // Extract zoom level from parent\n const childZoom = Number(child & 0b11111n); // Extract zoom level from child\n\n if (parentZoom >= childZoom) return false;\n\n const parentShift = BigInt(64 - 5 - parentZoom * 2);\n const childShift = BigInt(64 - 5 - childZoom * 2);\n\n const parentPrefix = (parent >> parentShift) & ((1n << BigInt(parentZoom * 2)) - 1n);\n const childPrefix = (child >> childShift) & ((1n << BigInt(parentZoom * 2)) - 1n);\n\n return parentPrefix === childPrefix;\n}\n\n/**\n * Decodes a bigint-encoded QuadKey into tile X, tile Y, and zoom level.\n * @param encoded - The bigint representation of the QuadKey with embedded zoom level.\n * @returns An object containing tileX, tileY, and zoom.\n */\nexport function decodeBigintQuadKey(encoded: bigint): {tileX: number; tileY: number; zoom: number} {\n const zoom = Number(encoded & 0b11111n); // Extract the last 5 bits for zoom level\n const quadKeyBits = encoded >> 5n; // Remove the zoom level bits\n\n let tileX = 0;\n let tileY = 0;\n\n for (let i = 0; i < zoom; i++) {\n const shift = BigInt((zoom - i - 1) * 2);\n const digit = Number((quadKeyBits >> shift) & 0b11n);\n const mask = 1 << (zoom - i - 1);\n if (digit & 1) tileX |= mask;\n if (digit & 2) tileY |= mask;\n }\n\n return {tileX, tileY, zoom};\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["import_core", "import_layers", "tileData", "error", "loaderId", "import_core", "import_core", "TILE_SIZE", "flatten", "import_core", "import_layers", "defaultProps", "import_geo_layers", "_h3IndexToSplitLong", "_cellToLatLng", "cellToBoundary", "_cellToBoundary", "_cellsToMultiPolygon", "cellToBoundary", "getBigInt", "TILE_SIZE", "getString", "TILE_SIZE"]
7
7
  }
package/dist/index.d.ts CHANGED
@@ -1,5 +1,12 @@
1
1
  export type { TileSourceLayerProps } from "./tile-source-layer/tile-source-layer.js";
2
2
  export { TileSourceLayer } from "./tile-source-layer/tile-source-layer.js";
3
+ export type { SharedTile2DLayerProps, SharedTile2DLayerPickingInfo } from "./shared-tile-2d-layer/index.js";
4
+ export { SharedTile2DLayer, sharedTile2DDeckAdapter } from "./shared-tile-2d-layer/index.js";
5
+ export type { SharedTileset2DProps, SharedTileset2DBaseProps } from "./tileset/index.js";
6
+ export type { SharedTileset2DAdapter, SharedTileset2DTraversalContext, SharedTileset2DTileContext } from "./tileset/index.js";
7
+ export { SharedTileset2D, SharedTile2DHeader } from "./tileset/index.js";
8
+ export type { TileGridLayerProps } from "./tile-grid-layer/tile-grid-layer.js";
9
+ export { TileGridLayer } from "./tile-grid-layer/tile-grid-layer.js";
3
10
  export { GlobalGridLayer, type GlobalGridLayerProps } from "./global-grid-layer/global-grid-layer.js";
4
11
  export { type GlobalGrid } from "./global-grid-systems/grids/global-grid.js";
5
12
  export { A5Grid } from "./global-grid-systems/grids/a5-grid.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,YAAY,EAAC,oBAAoB,EAAC,iDAA8C;AAChF,OAAO,EAAC,eAAe,EAAC,iDAA8C;AAEtE,OAAO,EAAC,eAAe,EAAE,KAAK,oBAAoB,EAAC,iDAA8C;AAEjG,OAAO,EAAC,KAAK,UAAU,EAAC,mDAAgD;AACxE,OAAO,EAAC,MAAM,EAAC,+CAA4C;AAC3D,OAAO,EAAC,MAAM,EAAC,+CAA4C;AAC3D,OAAO,EAAC,MAAM,EAAC,+CAA4C;AAC3D,OAAO,EAAC,WAAW,EAAC,oDAAiD;AACrE,OAAO,EAAC,WAAW,EAAC,oDAAiD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,YAAY,EAAC,oBAAoB,EAAC,iDAA8C;AAChF,OAAO,EAAC,eAAe,EAAC,iDAA8C;AACtE,YAAY,EACV,sBAAsB,EACtB,4BAA4B,EAC7B,wCAAqC;AACtC,OAAO,EAAC,iBAAiB,EAAE,uBAAuB,EAAC,wCAAqC;AACxF,YAAY,EAAC,oBAAoB,EAAE,wBAAwB,EAAC,2BAAwB;AACpF,YAAY,EACV,sBAAsB,EACtB,+BAA+B,EAC/B,0BAA0B,EAC3B,2BAAwB;AACzB,OAAO,EAAC,eAAe,EAAE,kBAAkB,EAAC,2BAAwB;AACpE,YAAY,EAAC,kBAAkB,EAAC,6CAA0C;AAC1E,OAAO,EAAC,aAAa,EAAC,6CAA0C;AAEhE,OAAO,EAAC,eAAe,EAAE,KAAK,oBAAoB,EAAC,iDAA8C;AAEjG,OAAO,EAAC,KAAK,UAAU,EAAC,mDAAgD;AACxE,OAAO,EAAC,MAAM,EAAC,+CAA4C;AAC3D,OAAO,EAAC,MAAM,EAAC,+CAA4C;AAC3D,OAAO,EAAC,MAAM,EAAC,+CAA4C;AAC3D,OAAO,EAAC,WAAW,EAAC,oDAAiD;AACrE,OAAO,EAAC,WAAW,EAAC,oDAAiD"}
package/dist/index.js CHANGED
@@ -2,6 +2,9 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
  export { TileSourceLayer } from "./tile-source-layer/tile-source-layer.js";
5
+ export { SharedTile2DLayer, sharedTile2DDeckAdapter } from "./shared-tile-2d-layer/index.js";
6
+ export { SharedTileset2D, SharedTile2DHeader } from "./tileset/index.js";
7
+ export { TileGridLayer } from "./tile-grid-layer/tile-grid-layer.js";
5
8
  export { GlobalGridLayer } from "./global-grid-layer/global-grid-layer.js";
6
9
  export { A5Grid } from "./global-grid-systems/grids/a5-grid.js";
7
10
  export { H3Grid } from "./global-grid-systems/grids/h3-grid.js";