{"version":3,"file":"index.cjs","sources":["../src/resources/heightmap-resource.ts","../src/resources/mapbox-resource.ts","../src/worker/worker-util.ts","../src/worker/worker-farm.ts","../src/worker/decoder.ts","../src/terrain-data.ts","../src/terrain-provider.ts","../src/mapbox-terrain-provider.ts"],"sourcesContent":["import { Resource, Credit } from \"cesium\";\nimport { TileCoordinates } from \"../terrain-data\";\n\nexport interface HeightmapResource {\n  credit?: Credit;\n  tileSize: number;\n  getTilePixels: (coords: TileCoordinates) => Promise<ImageData> | undefined;\n  getTileDataAvailable: (coords: TileCoordinates) => boolean;\n}\n\ninterface CanvasRef {\n  canvas: HTMLCanvasElement;\n  context: CanvasRenderingContext2D;\n}\nexport interface DefaultHeightmapResourceOpts {\n  url?: string;\n  // Legacy option, use skipZoomLevels instead\n  skipOddLevels?: boolean;\n  skipZoomLevels?: [number] | ((z: number) => boolean);\n  maxZoom?: number;\n  tileSize?: number;\n}\n\nexport class DefaultHeightmapResource implements HeightmapResource {\n  resource: Resource = null;\n  tileSize: number = 256;\n  maxZoom: number;\n  skipZoomLevel: (z: number) => boolean;\n  contextQueue: CanvasRef[];\n\n  constructor(opts: DefaultHeightmapResourceOpts = {}) {\n    if (opts.url) {\n      this.resource = new Resource({ url: opts.url });\n    }\n    this.skipZoomLevel = () => false;\n    if (opts.skipZoomLevels) {\n      if (Array.isArray(opts.skipZoomLevels)) {\n        const _skipZoomLevels = opts.skipZoomLevels as [number];\n        this.skipZoomLevel = (z: number) => _skipZoomLevels.includes(z);\n      } else {\n        this.skipZoomLevel = opts.skipZoomLevels;\n      }\n    } else if (opts.skipOddLevels) {\n      this.skipZoomLevel = (z: number) => z % 2 == 1;\n    }\n\n    this.tileSize = opts.tileSize ?? 256;\n    this.maxZoom = opts.maxZoom ?? 15;\n    this.contextQueue = [];\n  }\n\n  getCanvas(): CanvasRef {\n    let ctx = this.contextQueue.pop();\n    if (ctx == null) {\n      const canvas = document.createElement(\"canvas\");\n      canvas.width = this.tileSize;\n      canvas.height = this.tileSize;\n      const context = canvas.getContext(\"2d\");\n      ctx = {\n        canvas,\n        context,\n      };\n    }\n    return ctx;\n  }\n\n  getPixels(img: HTMLImageElement | HTMLCanvasElement): ImageData {\n    const canvasRef = this.getCanvas();\n    const { context } = canvasRef;\n    //context.scale(1, -1);\n    // Chrome appears to vertically flip the image for reasons that are unclear\n    // We can make it work in Chrome by drawing the image upside-down at this step.\n    context.drawImage(img, 0, 0, this.tileSize, this.tileSize);\n    const pixels = context.getImageData(0, 0, this.tileSize, this.tileSize);\n    context.clearRect(0, 0, this.tileSize, this.tileSize);\n    this.contextQueue.push(canvasRef);\n    return pixels;\n  }\n\n  getTileResource(tileCoords: TileCoordinates) {\n    // reverseY for TMS tiling (https://gist.github.com/tmcw/4954720)\n    // See tiling schemes here: https://www.maptiler.com/google-maps-coordinates-tile-bounds-projection/\n    const { z, y } = tileCoords;\n    return this.resource.getDerivedResource({\n      templateValues: {\n        ...tileCoords,\n        reverseY: Math.pow(2, z) - y - 1,\n      },\n      preserveQueryParameters: true,\n    });\n  }\n\n  getTilePixels(coords: TileCoordinates): Promise<ImageData> | undefined {\n    const resource = this.getTileResource(coords);\n    const request = resource.fetchImage({\n      preferImageBitmap: false,\n      // @ts-ignore\n      retryAttempts: 3,\n    });\n    if (request == null) return undefined;\n    return request.then((img: HTMLImageElement | ImageBitmap) =>\n      // @ts-ignore\n      this.getPixels(img),\n    );\n  }\n\n  getTileDataAvailable({ z }) {\n    if (z == this.maxZoom) return true;\n    /* Weird hack:\n    For some reason, request render mode breaks if zoom 1 tiles are disabled.\n    So we have to make sure that we always report zoom 1 tiles as available.\n    */\n    if (z < 2) return true;\n    if (this.skipZoomLevel(z)) return false;\n    if (z > this.maxZoom) return false;\n    return true;\n  }\n}\n\nexport default DefaultHeightmapResource;\n","import { Credit, Resource } from \"cesium\";\nimport {\n  DefaultHeightmapResource,\n  DefaultHeightmapResourceOpts,\n} from \"./heightmap-resource\";\n\nexport enum ImageFormat {\n  WEBP = \"webp\",\n  PNG = \"png\",\n  PNGRAW = \"pngraw\",\n}\n\nexport type MapboxTerrainResourceOpts = {\n  highResolution?: boolean;\n  imageFormat?: ImageFormat;\n  accessToken?: string;\n  urlTemplate?: string;\n} & DefaultHeightmapResourceOpts;\n\nexport class MapboxTerrainResource extends DefaultHeightmapResource {\n  resource: Resource = null;\n  credit = new Credit(\"Mapbox\");\n\n  constructor(opts: MapboxTerrainResourceOpts = {}) {\n    super(opts);\n    const highResolution = opts.highResolution ?? false;\n    const format = opts.imageFormat ?? ImageFormat.WEBP;\n    const { urlTemplate } = opts;\n\n    // overrides based on highResolution flag\n    if (highResolution) {\n      if (opts.maxZoom === undefined) {\n        this.maxZoom = 14;\n      }\n      if (opts.tileSize === undefined) {\n        this.tileSize = 512;\n      }\n    }\n\n    const defaultURL = `https://api.mapbox.com/v4/mapbox.terrain-rgb/{z}/{x}/{y}${\n      highResolution ? \"@2x\" : \"\"\n    }.${format}`;\n\n    this.resource = new Resource({ url: urlTemplate ?? defaultURL });\n    if (opts.accessToken) {\n      this.resource.setQueryParameters({\n        access_token: opts.accessToken,\n      });\n    }\n  }\n}\n\nexport default MapboxTerrainResource;\n","import type { NdArray } from \"ndarray\";\n\nexport interface TerrainWorkerInput extends QuantizedMeshOptions {\n  imageData: Uint8ClampedArray;\n  maxVertexDistance: number | null;\n  x: number;\n  y: number;\n  z: number;\n}\n\nexport interface TerrainUpscaleInput\n  extends Omit<TerrainWorkerInput, \"imageData\"> {\n  overscaleFactor: number;\n  heightData: Float32Array;\n}\n\nexport type DecodeRgbFunction = (\n  r: number,\n  g: number,\n  b: number,\n  a: number,\n) => number;\n\n/** Mapbox Terrain-RGB default decode function\n *  (r * 256 * 256) / 10 + (g * 256) / 10 + b / 10 - 10000\n */\nconst defaultMapboxDecodeRgb: DecodeRgbFunction = (r, g, b, a) =>\n  r * 6553.6 + g * 25.6 + b * 0.1 - 10000;\n\nfunction rgbTerrainToGrid(png: NdArray, decodeRgb?: DecodeRgbFunction) {\n  // maybe we should do this on the GPU using REGL?\n  // but that would require GPU -> CPU -> GPU\n  const gridSize = png.shape[0] + 1;\n  const terrain = new Float32Array(gridSize * gridSize);\n  const tileSize = png.shape[0];\n\n  const decode = decodeRgb ?? defaultMapboxDecodeRgb;\n\n  // decode terrain values\n  for (let y = 0; y < tileSize; y++) {\n    for (let x = 0; x < tileSize; x++) {\n      const yc = y;\n      const r = png.get(x, yc, 0);\n      const g = png.get(x, yc, 1);\n      const b = png.get(x, yc, 2);\n      const a = png.get(x, yc, 3);\n      terrain[y * gridSize + x] = decode(r, g, b, a);\n    }\n  }\n  // backfill right and bottom borders\n  for (let x = 0; x < gridSize - 1; x++) {\n    terrain[gridSize * (gridSize - 1) + x] =\n      terrain[gridSize * (gridSize - 2) + x];\n  }\n  for (let y = 0; y < gridSize; y++) {\n    terrain[gridSize * y + gridSize - 1] = terrain[gridSize * y + gridSize - 2];\n  }\n  return terrain;\n}\n\nexport type Window = { x0: number; x1: number; y0: number; y1: number };\n\nexport function subsetByWindow(\n  array: Float32Array,\n  window: Window,\n  augmented: boolean,\n) {\n  const sz = Math.sqrt(array.length);\n  const x0 = window.x0;\n  const x1 = window.x1;\n  const y0 = window.y0;\n  const y1 = window.y1;\n  const aug = augmented ? 1 : 0;\n  const n = Math.floor(x1 - x0) + aug;\n  const m = Math.floor(y1 - y0) + aug;\n  const result = new Float32Array(n * m);\n  for (let i = 0; i < m; i++) {\n    for (let j = 0; j < n; j++) {\n      result[i * n + j] = array[(i + y0) * sz + j + x0];\n    }\n  }\n  return result;\n}\n\nexport function testMeshData(): QuantizedMeshResult {\n  return {\n    minimumHeight: -100,\n    maximumHeight: 2101,\n    quantizedVertices: new Uint16Array([\n      // order is SW NW SE NE\n      // longitude\n      0, 0, 32767, 32767,\n      // latitude\n      0, 32767, 0, 32767,\n      // heights\n      16384, 0, 32767, 16384,\n    ]),\n    indices: new Uint16Array([0, 3, 1, 0, 2, 3]),\n    westIndices: [0, 1],\n    southIndices: [0, 1],\n    eastIndices: [2, 3],\n    northIndices: [1, 3],\n  };\n}\n\nfunction _emptyMesh(n: number): QuantizedMeshResult {\n  n = Math.max(n, 2);\n  const nTriangles = Math.pow(n - 1, 2) * 2;\n  const nVertices = Math.pow(n, 2);\n  const quantizedVertices = new Uint16Array(nVertices * 3);\n  const indices = new Uint16Array(nTriangles * 3);\n  const westIndices = [];\n  const southIndices = [];\n  const eastIndices = [];\n  const northIndices = [];\n\n  let tix = 0;\n\n  for (let i = 0; i < nVertices; i++) {\n    let rx = i % n; //* 32767) / (n - 1);\n    let ry = Math.floor(i / n); //* 32767) / (n - 1);\n    const ix = n * rx + ry;\n    quantizedVertices[ix] = (rx * 32768) / (n - 1);\n    quantizedVertices[nVertices + ix] = (ry * 32768) / (n - 1);\n    quantizedVertices[2 * nVertices + ix] = 0;\n    if (ry == 0) westIndices.push(ix);\n    if (rx == 0) southIndices.push(ix);\n    if (rx == n - 1) eastIndices.push(ix);\n    if (ry == n - 1) northIndices.push(ix);\n\n    // Add triangles\n    const rix = i - ry * n;\n    if (rix != n - 1) {\n      indices[tix * 3] = i;\n      indices[tix * 3 + 1] = i + n + 1;\n      indices[tix * 3 + 2] = i + 1;\n      tix++;\n    }\n    if (rix != 0) {\n      indices[tix * 3] = i - 1;\n      indices[tix * 3 + 1] = i + n - 1;\n      indices[tix * 3 + 2] = i + n;\n      tix++;\n    }\n  }\n\n  return {\n    minimumHeight: 0,\n    maximumHeight: 0,\n    quantizedVertices,\n    indices,\n    westIndices,\n    southIndices,\n    eastIndices,\n    northIndices,\n  };\n}\n\nlet _meshCache = [];\nexport function emptyMesh(n: number) {\n  // A memoized function to return empty meshes\n  if (n in _meshCache) {\n    return _meshCache[n];\n  } else {\n    const result = _emptyMesh(n);\n    _meshCache[n] = result;\n    return result;\n  }\n}\n\nexport interface QuantizedMeshOptions {\n  errorLevel: number;\n  tileSize: number;\n  ellipsoidRadius: number;\n}\n\nexport interface QuantizedMeshResult {\n  minimumHeight: number;\n  maximumHeight: number;\n  quantizedVertices: Uint16Array;\n  indices: Uint16Array;\n  westIndices: number[];\n  southIndices: number[];\n  eastIndices: number[];\n  northIndices: number[];\n  quantizedHeights?: Float32Array;\n}\n\n/** Terrain workers should return a quantized mesh */\nexport type TerrainWorkerOutput = QuantizedMeshResult;\n\nfunction createQuantizedMeshData(\n  tile: any,\n  mesh: any,\n  tileSize: number,\n  terrain: Float32Array | null,\n): QuantizedMeshResult {\n  /** Terrain is passed through so we can keep track of it\n   * for overscaled tiles\n   */\n\n  const xvals = [];\n  const yvals = [];\n  const heightMeters = [];\n  const northIndices = [];\n  const southIndices = [];\n  const eastIndices = [];\n  const westIndices = [];\n\n  let minimumHeight = Infinity;\n  let maximumHeight = -Infinity;\n  const scalar = 32768.0 / tileSize;\n\n  // There appears to be a problem with the x/y indexing when using 512x512 tiles\n  // This may be solved by increasing the minumumErrorLevel in the terrain provider\n  for (let ix = 0; ix < mesh.vertices.length / 2; ix++) {\n    const vertexIx = ix;\n    const px = mesh.vertices[ix * 2];\n    const py = mesh.vertices[ix * 2 + 1];\n    const height = tile.terrain[py * (tileSize + 1) + px];\n    if (height > maximumHeight) maximumHeight = height;\n    if (height < minimumHeight) minimumHeight = height;\n\n    heightMeters.push(height);\n\n    if (py == 0) northIndices.push(vertexIx);\n    if (py == tileSize) southIndices.push(vertexIx);\n    if (px == 0) westIndices.push(vertexIx);\n    if (px == tileSize) eastIndices.push(vertexIx);\n\n    let xv = px * scalar;\n    let yv = (tileSize - py) * scalar;\n\n    xvals.push(xv);\n    yvals.push(yv);\n  }\n\n  const heightRange = maximumHeight - minimumHeight;\n\n  const heights = heightMeters.map((d) => {\n    if (heightRange < 1) return 0;\n    return (d - minimumHeight) * (32768.0 / heightRange);\n  });\n\n  const triangles = new Uint16Array(mesh.triangles);\n  const quantizedVertices = new Uint16Array(\n    //verts\n    [...xvals, ...yvals, ...heights],\n  );\n\n  // SE NW NE\n  // NE NW SE\n\n  return {\n    minimumHeight,\n    maximumHeight,\n    quantizedVertices,\n    indices: triangles,\n    westIndices,\n    southIndices,\n    eastIndices,\n    northIndices,\n    quantizedHeights: terrain,\n  };\n}\n\nexport { rgbTerrainToGrid, createQuantizedMeshData };\n","const resolves = {};\nconst rejects = {};\nlet globalMsgId = 0; // Activate calculation in the worker, returning a promise\n\nasync function sendMessage(\n  worker: Worker,\n  payload: any,\n  transferableObjects: Transferable[],\n) {\n  const msgId = globalMsgId++;\n  const msg = {\n    id: msgId,\n    payload,\n  };\n  return new Promise(function (resolve, reject) {\n    // save callbacks for later\n    resolves[msgId] = resolve;\n    rejects[msgId] = reject;\n    worker.postMessage(msg, transferableObjects);\n  });\n} // Handle incoming calculation result\n\nfunction handleMessage(msg) {\n  const { id, err, payload } = msg.data;\n  if (payload) {\n    const resolve = resolves[id];\n    if (resolve) {\n      resolve(payload);\n    }\n  } else {\n    // error condition\n    const reject = rejects[id];\n    if (reject) {\n      if (err) {\n        reject(err);\n      } else {\n        reject(\"Got nothing\");\n      }\n    }\n  }\n\n  // purge used callbacks\n  delete resolves[id];\n  delete rejects[id];\n}\n\nexport class WorkerFarm {\n  worker: Worker;\n  inProgressWorkers: number = 0;\n  maxWorkers: number = 5;\n  processingQueue: Function[] = [];\n\n  constructor(opts) {\n    this.worker = opts.worker;\n    this.worker.onmessage = handleMessage;\n  }\n\n  async scheduleTask(params, transferableObjects) {\n    const res = await sendMessage(this.worker, params, transferableObjects);\n    this.releaseWorker();\n    return res;\n  }\n\n  async holdForAvailableWorker(): Promise<void> {\n    let resultPromise: Promise<void>;\n    if (this.inProgressWorkers > this.maxWorkers) {\n      resultPromise = new Promise((resolve, reject) => {\n        this.processingQueue.push(resolve);\n      });\n    } else {\n      resultPromise = Promise.resolve(null);\n    }\n    await resultPromise;\n    this.inProgressWorkers += 1;\n  }\n\n  releaseWorker() {\n    this.inProgressWorkers -= 1;\n    if (this.processingQueue.length > 0) {\n      this.processingQueue.shift()();\n    }\n  }\n}\n\nexport default WorkerFarm;\n","import { HeightmapTerrainData, QuantizedMeshTerrainData } from \"cesium\";\nimport { TileCoordinates } from \"../terrain-data\";\nimport WorkerFarm from \"./worker-farm\";\nimport { TerrainWorkerInput, QuantizedMeshResult } from \"./worker-util\";\n\nexport interface TerrainDecoder {\n  requestTileGeometry: (\n    coords: TileCoordinates,\n    processFunction: (\n      coords: TileCoordinates,\n    ) => Promise<HeightmapTerrainData | QuantizedMeshTerrainData>,\n  ) => Promise<HeightmapTerrainData | QuantizedMeshTerrainData> | undefined;\n  decodeTerrain: (\n    params: TerrainWorkerInput,\n    data: ArrayBufferLike,\n  ) => Promise<QuantizedMeshResult>;\n}\n\nexport class DefaultTerrainDecoder implements TerrainDecoder {\n  inProgress: number = 0;\n  maxRequests: number = 2;\n\n  requestTileGeometry(coords, processFunction) {\n    if (this.inProgress > this.maxRequests) return undefined;\n    this.inProgress += 1;\n    return processFunction(coords).finally(() => {\n      this.inProgress -= 1;\n    });\n  }\n\n  decodeTerrain(params, data) {\n    return Promise.resolve(null);\n  }\n}\n\ninterface WorkerFarmDecoderOpts {\n  maxWorkers?: number;\n  worker?: Worker;\n}\n\nexport class WorkerFarmTerrainDecoder extends DefaultTerrainDecoder {\n  farm: WorkerFarm;\n\n  constructor(opts: WorkerFarmDecoderOpts) {\n    super();\n    this.farm = new WorkerFarm({ worker: opts.worker });\n    this.maxRequests = opts.maxWorkers ?? 5;\n  }\n\n  decodeTerrain(params, data) {\n    return this.farm.scheduleTask(params, [\n      data,\n    ]) as Promise<QuantizedMeshResult>;\n  }\n}\n\nexport default WorkerFarmTerrainDecoder;\n","import {\n  QuantizedMeshTerrainData,\n  Rectangle,\n  Ellipsoid,\n  Cartographic,\n  BoundingSphere,\n  OrientedBoundingBox,\n  Cartesian3,\n  Credit,\n  TilingScheme,\n} from \"cesium\";\nimport {\n  TerrainWorkerOutput,\n  emptyMesh,\n  subsetByWindow,\n  TerrainUpscaleInput,\n  QuantizedMeshResult,\n} from \"./worker/worker-util\";\n\nexport interface TileCoordinates {\n  x: number;\n  y: number;\n  z: number;\n}\n\ninterface QuantizedMeshTerrainOptions {\n  quantizedVertices: Uint16Array;\n  indices: Uint16Array | Uint32Array;\n  minimumHeight: number;\n  maximumHeight: number;\n  boundingSphere: BoundingSphere;\n  orientedBoundingBox?: OrientedBoundingBox;\n  horizonOcclusionPoint: Cartesian3;\n  westIndices: number[];\n  southIndices: number[];\n  eastIndices: number[];\n  northIndices: number[];\n  westSkirtHeight: number;\n  southSkirtHeight: number;\n  eastSkirtHeight: number;\n  northSkirtHeight: number;\n  childTileMask?: number;\n  createdByUpsampling?: boolean;\n  encodedNormals?: Uint8Array;\n  waterMask?: Uint8Array;\n  credits?: Credit[];\n}\n\nexport interface TerrainMeshMeta {\n  errorLevel: number;\n  tileSize: number;\n  maxVertexDistance: number | null;\n  tileRect: Rectangle;\n  ellipsoid: Ellipsoid;\n  overscaleFactor: number;\n}\n\nexport function createTerrainMesh(\n  data: TerrainWorkerOutput,\n  meta: TerrainMeshMeta,\n) {\n  const {\n    minimumHeight,\n    maximumHeight,\n    quantizedVertices,\n    indices,\n    westIndices,\n    southIndices,\n    eastIndices,\n    northIndices,\n    quantizedHeights,\n  } = data;\n\n  const {\n    errorLevel,\n    tileSize,\n    maxVertexDistance,\n    tileRect,\n    ellipsoid,\n    overscaleFactor,\n  } = meta;\n\n  const err = errorLevel;\n  const skirtHeight = err * 20;\n\n  // Check if tileRect is not NaNs\n  if (isNaN(tileRect.east) || isNaN(tileRect.north)) {\n    throw new Error(\"Invalid tile rect\");\n  }\n\n  const center = Rectangle.center(tileRect);\n\n  // Calculating occlusion height is kind of messy currently, but it definitely works\n  const halfAngle = tileRect.width / 2;\n  const dr = Math.cos(halfAngle); // half tile width since our ref point is at the center\n\n  let occlusionHeight = dr * ellipsoid.maximumRadius + maximumHeight;\n  if (halfAngle > Math.PI / 4) {\n    occlusionHeight = (1 + halfAngle) * ellipsoid.maximumRadius;\n  }\n\n  const occlusionPoint = new Cartographic(\n    center.longitude,\n    center.latitude,\n    occlusionHeight,\n    // Scaling factor of two just to be sure.\n  );\n\n  const horizonOcclusionPoint = ellipsoid.transformPositionToScaledSpace(\n    Cartographic.toCartesian(occlusionPoint),\n  );\n\n  let orientedBoundingBox = OrientedBoundingBox.fromRectangle(\n    tileRect,\n    minimumHeight,\n    maximumHeight,\n    ellipsoid,\n  );\n  let boundingSphere =\n    BoundingSphere.fromOrientedBoundingBox(orientedBoundingBox);\n\n  return new RasterTerrainData({\n    minimumHeight,\n    maximumHeight,\n    quantizedVertices,\n    indices,\n    boundingSphere,\n    orientedBoundingBox,\n    horizonOcclusionPoint,\n    westIndices,\n    southIndices,\n    eastIndices,\n    northIndices,\n    westSkirtHeight: skirtHeight,\n    southSkirtHeight: skirtHeight,\n    eastSkirtHeight: skirtHeight,\n    northSkirtHeight: skirtHeight,\n    childTileMask: 15,\n    createdByUpsampling: overscaleFactor > 0,\n    errorLevel: err,\n    maxVertexDistance,\n    tileSize,\n    quantizedHeights,\n  });\n}\n\ninterface EmptyMeshOptions {\n  tileRect: Rectangle;\n  tileCoord: TileCoordinates;\n  ellipsoid: Ellipsoid;\n  errorLevel: number;\n  tileSize: number;\n  maxVertexDistance?: number;\n}\n\nexport function createEmptyMesh(\n  opts: EmptyMeshOptions,\n): QuantizedMeshTerrainData {\n  const { tileRect, tileCoord, errorLevel, ellipsoid, maxVertexDistance } =\n    opts;\n  const center = Rectangle.center(tileRect);\n  const { z } = tileCoord;\n\n  const latScalar = Math.min(Math.abs(Math.sin(center.latitude)), 0.995);\n  let v = Math.max(\n    Math.ceil((200 / (z + 1)) * Math.pow(1 - latScalar, 0.25)),\n    4,\n  );\n  const output = emptyMesh(v);\n  // We use zero for some undefined values\n  return createTerrainMesh(output, {\n    tileRect,\n    ellipsoid,\n    errorLevel,\n    overscaleFactor: 0,\n    maxVertexDistance,\n    tileSize: output.tileSize,\n  });\n}\n\ninterface RasterParams {\n  quantizedHeights?: Float32Array;\n  errorLevel: number;\n  maxVertexDistance: number;\n  tileSize: number;\n}\n\ntype RasterTerrainOptions = QuantizedMeshTerrainOptions & RasterParams;\n\nclass UpsampleTracker {\n  ne: boolean;\n  nw: boolean;\n  se: boolean;\n  sw: boolean;\n\n  constructor() {\n    this.ne = false;\n    this.nw = false;\n    this.se = false;\n    this.sw = false;\n  }\n\n  finished() {\n    return this.ne && this.nw && this.se && this.sw;\n  }\n}\n\nexport class RasterTerrainData\n  extends QuantizedMeshTerrainData\n  implements RasterParams\n{\n  quantizedHeights: Float32Array;\n  errorLevel: number;\n  maxVertexDistance: number;\n  tileSize: number;\n  private upsampleTracker: UpsampleTracker;\n\n  constructor(opts: RasterTerrainOptions) {\n    super(opts);\n    this.quantizedHeights = opts.quantizedHeights;\n    this.errorLevel = opts.errorLevel;\n    this.maxVertexDistance = opts.maxVertexDistance ?? opts.tileSize;\n    this.tileSize = opts.tileSize;\n    this.upsampleTracker = new UpsampleTracker();\n  }\n\n  upsample(\n    tilingScheme: TilingScheme,\n    thisX: number,\n    thisY: number,\n    thisLevel: number,\n    descendantX: number,\n    descendantY: number,\n    descendantLevel: number,\n  ) {\n    if (this.quantizedHeights == null) {\n      return super.upsample(\n        tilingScheme,\n        thisX,\n        thisY,\n        thisLevel,\n        descendantX,\n        descendantY,\n        descendantLevel,\n      );\n    } // Something wonky about our tiling scheme, perhaps\n    // 12/2215/2293 @2x\n    //const url = `https://a.tiles.mapbox.com/v4/mapbox.terrain-rgb/${z}/${x}/${y}${hires}.${this.format}?access_token=${this.accessToken}`;\n\n    const x = descendantX;\n    const y = descendantY;\n    const z = descendantLevel;\n\n    const tile = `${z}/${x}/${y}`;\n\n    //console.log(`Upsampling terrain data from zoom ${thisLevel} to ` + tile);\n\n    const dz = z - thisLevel;\n\n    const scalar = Math.pow(2, dz);\n\n    const ellipsoid = tilingScheme.ellipsoid;\n\n    const err = this.errorLevel / scalar;\n\n    const maxVertexDistance = Math.min(\n      this.maxVertexDistance * scalar,\n      this.tileSize,\n    );\n\n    const upscaledX = thisX * scalar;\n    const upscaledY = thisY * scalar;\n\n    const dx: number = x - upscaledX;\n    const dy: number = y - upscaledY;\n\n    const x0 = (dx * this.tileSize) / scalar;\n    const x1 = ((dx + 1) * this.tileSize) / scalar;\n    const y0 = (dy * this.tileSize) / scalar;\n    const y1 = ((dy + 1) * this.tileSize) / scalar;\n\n    const window = { x0, x1, y0, y1 };\n\n    const res = buildOverscaledTerrainTile({\n      tilingScheme,\n      heightData: subsetByWindow(this.quantizedHeights, window, true),\n      maxVertexDistance,\n      x,\n      y,\n      z,\n      errorLevel: err,\n      ellipsoidRadius: ellipsoid.maximumRadius,\n      tileSize: x1 - x0,\n      overscaleFactor: dz,\n    });\n    if (dz == 1) {\n      // If we've got a single child tile, we can track that we've upsampled the parent.\n      const quadrant = getQuadrant(dx as 0 | 1, dy as 0 | 1);\n      this.upsampleTracker[quadrant] = true;\n    }\n    if (this.upsampleTracker.finished()) {\n      // We've upsampled all child tiles and don't need to keep terrain data around anymore.\n      this.quantizedHeights = undefined;\n    }\n\n    return res;\n  }\n}\n\nfunction getQuadrant(dx: 0 | 1, dy: 0 | 1): \"ne\" | \"nw\" | \"se\" | \"sw\" {\n  if (dx == 0 && dy == 0) return \"sw\";\n  if (dx == 0 && dy == 1) return \"nw\";\n  if (dx == 1 && dy == 0) return \"se\";\n  if (dx == 1 && dy == 1) return \"ne\";\n  throw new Error(\"Invalid quadrant\");\n}\n\ntype OverscaleTerrainOptions = TerrainUpscaleInput & {\n  tilingScheme: TilingScheme;\n};\n\nasync function buildOverscaledTerrainTile(opts: OverscaleTerrainOptions) {\n  const { tilingScheme, overscaleFactor, ...workerOpts } = opts;\n\n  const { x, y, z } = workerOpts;\n\n  const tileRect = tilingScheme.tileXYToRectangle(x, y, z);\n  const ellipsoid = tilingScheme.ellipsoid;\n\n  const { errorLevel, maxVertexDistance, tileSize } = workerOpts;\n\n  try {\n    const res = (await upsamplerFarm.scheduleTask(workerOpts, [\n      workerOpts.heightData.buffer,\n    ])) as QuantizedMeshResult;\n\n    return createTerrainMesh(res, {\n      tileRect,\n      ellipsoid,\n      errorLevel,\n      overscaleFactor,\n      tileSize,\n      // Maximum vertex distance\n      maxVertexDistance,\n    });\n  } catch (err) {\n    return createEmptyMesh({\n      tileRect,\n      errorLevel,\n      ellipsoid,\n      tileCoord: { x, y, z },\n      tileSize: 0,\n    });\n  }\n}\n\nimport UpsamplerWorker from \"web-worker:./worker/upsampler-worker\";\nimport WorkerFarm from \"./worker/worker-farm\";\n\nconst upsamplerFarm = new WorkerFarm({\n  worker: new UpsamplerWorker(),\n  maxWorkers: 5,\n});\n","import {\n  Cartographic,\n  OrientedBoundingBox,\n  BoundingSphere,\n  Rectangle,\n  Ellipsoid,\n  WebMercatorTilingScheme,\n  Math as CMath,\n  Event as CEvent,\n  TerrainProvider,\n  Credit,\n  TilingScheme,\n  QuantizedMeshTerrainData,\n} from \"cesium\";\n\nimport {\n  TerrainWorkerInput,\n  emptyMesh as _emptyMesh,\n} from \"./worker/worker-util\";\nimport { HeightmapResource } from \"./resources/heightmap-resource\";\nimport WorkerFarmTerrainDecoder, {\n  TerrainDecoder,\n  DefaultTerrainDecoder,\n} from \"./worker/decoder\";\nimport {\n  createEmptyMesh,\n  createTerrainMesh,\n  TerrainMeshMeta,\n} from \"./terrain-data\";\nimport { TileCoordinates } from \"./terrain-data\";\n\n// https://github.com/CesiumGS/cesium/blob/1.68/Source/Scene/MapboxImageryProvider.js#L42\n\nexport interface MartiniTerrainOpts {\n  resource: HeightmapResource;\n  decoder?: TerrainDecoder;\n\n  ellipsoid?: Ellipsoid;\n  tilingScheme?: TilingScheme;\n  // workerURL: string;\n  detailScalar?: number;\n  minimumErrorLevel?: number;\n  maxWorkers?: number;\n  minZoomLevel?: number;\n  fillPoles?: boolean;\n}\n\nexport class StretchedTilingScheme extends WebMercatorTilingScheme {\n  tileXYToRectangle(\n    x: number,\n    y: number,\n    level: number,\n    res: Rectangle,\n  ): Rectangle {\n    let result = super.tileXYToRectangle(x, y, level);\n    if (y == 0) {\n      result.north = Math.PI / 2;\n    }\n    if (y + 1 == Math.pow(2, level)) {\n      result.south = -Math.PI / 2;\n    }\n    return result;\n  }\n}\n\nexport class MartiniTerrainProvider<TerrainProvider> {\n  hasWaterMask = false;\n  hasVertexNormals = false;\n  credit = new Credit(\"Mapbox\");\n  ready: boolean;\n  readyPromise: Promise<boolean>;\n  availability = null;\n  errorEvent = new CEvent();\n  tilingScheme: TilingScheme;\n  ellipsoid: Ellipsoid;\n  levelOfDetailScalar: number | null = null;\n  maxWorkers: number = 5;\n  minError: number = 0.1;\n  minZoomLevel: number;\n  fillPoles: boolean = true;\n  _errorAtMinZoom: number = 1000;\n\n  resource: HeightmapResource = null;\n  decoder: TerrainDecoder = null;\n\n  RADIUS_SCALAR = 1.0;\n\n  // @ts-ignore\n  constructor(opts: MartiniTerrainOpts = {}) {\n    //this.martini = new Martini(257);\n    this.resource = opts.resource;\n    this.credit = this.resource.credit ?? new Credit(\"Mapbox\");\n\n    this.decoder = opts.decoder;\n    this.maxWorkers = opts.maxWorkers ?? 5;\n\n    if (!this.decoder) {\n      const maxWorkers = this.maxWorkers;\n      if (maxWorkers > 0) {\n        this.decoder = new WorkerFarmTerrainDecoder({ maxWorkers });\n      } else {\n        this.decoder = new DefaultTerrainDecoder();\n      }\n    }\n    this.minZoomLevel = opts.minZoomLevel ?? 3;\n    this.fillPoles = opts.fillPoles ?? true;\n\n    this.ready = true;\n    this.readyPromise = Promise.resolve(true);\n    this.minError = opts.minimumErrorLevel ?? 0.1;\n\n    this.errorEvent.addEventListener(console.log, this);\n    this.ellipsoid = opts.ellipsoid ?? Ellipsoid.WGS84;\n\n    if (opts.tilingScheme == null) {\n      let scheme = WebMercatorTilingScheme;\n      if (this.fillPoles) {\n        scheme = StretchedTilingScheme;\n      }\n      this.tilingScheme = new scheme({\n        numberOfLevelZeroTilesX: 1,\n        numberOfLevelZeroTilesY: 1,\n        ellipsoid: this.ellipsoid,\n      });\n    } else {\n      this.tilingScheme = opts.tilingScheme;\n    }\n\n    this.levelOfDetailScalar = (opts.detailScalar ?? 2.0) + CMath.EPSILON5;\n\n    //this.errorEvent.addEventListener(console.log, this);\n    this.ellipsoid =\n      opts.tilingScheme?.ellipsoid ?? opts.ellipsoid ?? Ellipsoid.WGS84;\n\n    this._errorAtMinZoom = this.errorAtZoom(this.minZoomLevel);\n  }\n\n  requestTileGeometry(x, y, z, request) {\n    // Look for tiles both below the zoom level and below the error threshold for the zoom level at the equator...\n    if (\n      this.minZoomLevel != 0 &&\n      (z < this.minZoomLevel ||\n        this.scaledErrorForTile(x, y, z) > this._errorAtMinZoom)\n    ) {\n      // If we are below the minimum zoom level, we return empty heightmaps\n      // to avoid unnecessary requests for low-resolution data.\n      return Promise.resolve(this.emptyMesh(x, y, z));\n    }\n\n    // Note: we still load a TON of tiles near the poles. We might need to do some overzooming here...\n    return this.decoder.requestTileGeometry(\n      { x, y, z },\n      this.processTile.bind(this),\n    );\n  }\n\n  async processTile({ x, y, z }: TileCoordinates) {\n    // Something wonky about our tiling scheme, perhaps\n    // 12/2215/2293 @2x\n    //const url = `https://a.tiles.mapbox.com/v4/mapbox.terrain-rgb/${z}/${x}/${y}${hires}.${this.format}?access_token=${this.accessToken}`;\n    const tileRect = this.tilingScheme.tileXYToRectangle(x, y, z);\n    const errorLevel = this.errorAtZoom(z);\n    const maxVertexDistance = this.maxVertexDistance(tileRect);\n\n    try {\n      const { tileSize, getTilePixels } = this.resource;\n      const r1 = getTilePixels.bind(this.resource, { x, y, z });\n\n      if (r1 == null) {\n        return;\n      }\n      const px = await r1();\n\n      let pixelData = px.data;\n      if (pixelData == null) {\n        return;\n      }\n\n      ///const center = Rectangle.center(tileRect);\n\n      const params: TerrainWorkerInput = {\n        imageData: pixelData,\n        maxVertexDistance,\n        x,\n        y,\n        z,\n        errorLevel,\n        ellipsoidRadius: this.tilingScheme.ellipsoid.maximumRadius,\n        tileSize,\n      };\n\n      const res = await this.decoder.decodeTerrain(params, pixelData.buffer);\n\n      const meta: TerrainMeshMeta = {\n        ellipsoid: this.tilingScheme.ellipsoid,\n        errorLevel,\n        overscaleFactor: 0,\n        maxVertexDistance,\n        tileRect,\n        tileSize,\n      };\n\n      /** This builds a final terrain mesh object that can optionally\n       * be upscaled to a higher resolution.\n       */\n      return createTerrainMesh(res, meta);\n    } catch (err) {\n      //console.log(err);\n      return createEmptyMesh({\n        tileRect,\n        errorLevel,\n        ellipsoid: this.tilingScheme.ellipsoid,\n        tileCoord: { x, y, z },\n        tileSize: 0,\n      });\n    }\n  }\n\n  errorAtZoom(zoom: number) {\n    return Math.max(\n      this.getLevelMaximumGeometricError(zoom) / this.levelOfDetailScalar,\n      this.minError,\n    );\n  }\n\n  scaledErrorForTile(x: number, y: number, z: number) {\n    const tileRect = this.tilingScheme.tileXYToRectangle(x, y, z);\n    const center = Rectangle.center(tileRect);\n    return this.errorAtZoom(z) / Math.pow(1 - Math.sin(center.latitude), 2);\n  }\n\n  maxVertexDistance(tileRect: Rectangle) {\n    return Math.ceil(2 / tileRect.height);\n  }\n\n  emptyMesh(x: number, y: number, z: number) {\n    const tileRect = this.tilingScheme.tileXYToRectangle(x, y, z);\n    const center = Rectangle.center(tileRect);\n\n    const latScalar = Math.min(Math.abs(Math.sin(center.latitude)), 0.995);\n    let v = Math.max(\n      Math.ceil((200 / (z + 1)) * Math.pow(1 - latScalar, 0.25)),\n      4,\n    );\n    const output = _emptyMesh(v);\n    const err = this.errorAtZoom(z);\n    return this.createQuantizedMeshData(tileRect, err, output);\n  }\n\n  createQuantizedMeshData(tileRect, errorLevel, workerOutput) {\n    const {\n      minimumHeight,\n      maximumHeight,\n      quantizedVertices,\n      indices,\n      westIndices,\n      southIndices,\n      eastIndices,\n      northIndices,\n    } = workerOutput;\n\n    const err = errorLevel;\n    const skirtHeight = err * 20;\n\n    const center = Rectangle.center(tileRect);\n\n    // Calculating occlusion height is kind of messy currently, but it definitely works\n    const halfAngle = tileRect.width / 2;\n    const dr = Math.cos(halfAngle); // half tile width since our ref point is at the center\n\n    let occlusionHeight = dr * this.ellipsoid.maximumRadius + maximumHeight;\n    if (halfAngle > Math.PI / 4) {\n      occlusionHeight = (1 + halfAngle) * this.ellipsoid.maximumRadius;\n    }\n\n    const occlusionPoint = new Cartographic(\n      center.longitude,\n      center.latitude,\n      occlusionHeight,\n      // Scaling factor of two just to be sure.\n    );\n\n    const horizonOcclusionPoint = this.ellipsoid.transformPositionToScaledSpace(\n      Cartographic.toCartesian(occlusionPoint),\n    );\n\n    let orientedBoundingBox = OrientedBoundingBox.fromRectangle(\n      tileRect,\n      minimumHeight,\n      maximumHeight,\n      this.tilingScheme.ellipsoid,\n    );\n    let boundingSphere =\n      BoundingSphere.fromOrientedBoundingBox(orientedBoundingBox);\n\n    // SE NW NE\n    // NE NW SE\n\n    /** TODO: we need to create raster terrain data. */\n    return new QuantizedMeshTerrainData({\n      minimumHeight,\n      maximumHeight,\n      quantizedVertices,\n      indices,\n      boundingSphere,\n      orientedBoundingBox,\n      horizonOcclusionPoint,\n      westIndices,\n      southIndices,\n      eastIndices,\n      northIndices,\n      westSkirtHeight: skirtHeight,\n      southSkirtHeight: skirtHeight,\n      eastSkirtHeight: skirtHeight,\n      northSkirtHeight: skirtHeight,\n      childTileMask: 15,\n    });\n  }\n\n  getLevelMaximumGeometricError(level) {\n    const levelZeroMaximumGeometricError =\n      TerrainProvider.getEstimatedLevelZeroGeometricErrorForAHeightmap(\n        this.tilingScheme.ellipsoid,\n        65,\n        this.tilingScheme.getNumberOfXTilesAtLevel(0),\n      );\n\n    /*\n    Scalar to control overzooming\n    - also seems to control zooming for imagery layers\n    - This scalar was causing trouble for non-256 tile sizes,\n      and we've removed it for now. It could be reintroduced\n      if it seems necessary\n    */\n    const scalar = 1; //this.resource.tileSize / 256 ;\n\n    return levelZeroMaximumGeometricError / scalar / (1 << level);\n  }\n\n  getTileDataAvailable(x, y, z) {\n    return this.resource.getTileDataAvailable({ x, y, z });\n  }\n}\n","import { TerrainProvider } from \"cesium\";\nimport MapboxTerrainResource, {\n  MapboxTerrainResourceOpts,\n} from \"./resources/mapbox-resource\";\nimport { MartiniTerrainOpts, MartiniTerrainProvider } from \"./terrain-provider\";\nimport WorkerFarmTerrainDecoder from \"./worker/decoder\";\nimport MapboxTerrainWorker from \"web-worker:./worker/mapbox-worker\";\n\ntype MapboxTerrainOpts = Omit<MartiniTerrainOpts, \"resource\"> &\n  MapboxTerrainResourceOpts;\n\nexport class MapboxTerrainProvider extends MartiniTerrainProvider<TerrainProvider> {\n  constructor(opts: MapboxTerrainOpts = {}) {\n    const resource = new MapboxTerrainResource(opts);\n    const decoder = new WorkerFarmTerrainDecoder({\n      worker: new MapboxTerrainWorker(),\n    });\n\n    super({\n      ...opts,\n      resource,\n      decoder,\n    });\n  }\n}\n"],"names":["DefaultHeightmapResource","_opts$tileSize","_opts$maxZoom","opts","arguments","length","undefined","_classCallCheck","_defineProperty","url","resource","Resource","skipZoomLevel","skipZoomLevels","Array","isArray","_skipZoomLevels","z","includes","skipOddLevels","tileSize","maxZoom","contextQueue","_createClass","key","value","getCanvas","ctx","pop","canvas","document","createElement","width","height","context","getContext","getPixels","img","canvasRef","drawImage","pixels","getImageData","clearRect","push","getTileResource","tileCoords","y","getDerivedResource","templateValues","_objectSpread","reverseY","Math","pow","preserveQueryParameters","getTilePixels","coords","_this","request","fetchImage","preferImageBitmap","retryAttempts","then","getTileDataAvailable","_ref","ImageFormat","MapboxTerrainResource","_DefaultHeightmapReso","_opts$highResolution","_opts$imageFormat","_callSuper","Credit","highResolution","format","imageFormat","WEBP","urlTemplate","defaultURL","concat","accessToken","setQueryParameters","access_token","_inherits","defaultMapboxDecodeRgb","r","g","b","a","rgbTerrainToGrid","png","decodeRgb","gridSize","shape","terrain","Float32Array","decode","x","yc","get","subsetByWindow","array","window","augmented","sz","sqrt","x0","x1","y0","y1","aug","n","floor","m","result","i","j","testMeshData","minimumHeight","maximumHeight","quantizedVertices","Uint16Array","indices","westIndices","southIndices","eastIndices","northIndices","_emptyMesh","max","nTriangles","nVertices","tix","rx","ry","ix","rix","_meshCache","emptyMesh","createQuantizedMeshData","tile","mesh","xvals","yvals","heightMeters","Infinity","scalar","vertices","vertexIx","px","py","xv","yv","heightRange","heights","map","d","triangles","_toConsumableArray","quantizedHeights","resolves","rejects","globalMsgId","sendMessage","_x","_x2","_x3","_sendMessage","apply","_asyncToGenerator","_regeneratorRuntime","mark","_callee3","worker","payload","transferableObjects","msgId","msg","wrap","_callee3$","_context3","prev","next","id","abrupt","Promise","resolve","reject","postMessage","stop","handleMessage","_msg$data","data","err","WorkerFarm","onmessage","_scheduleTask","_callee","params","res","_callee$","_context","sent","releaseWorker","scheduleTask","_x4","_x5","_holdForAvailableWorker","_callee2","resultPromise","_callee2$","_context2","inProgressWorkers","maxWorkers","processingQueue","holdForAvailableWorker","shift","DefaultTerrainDecoder","requestTileGeometry","processFunction","inProgress","maxRequests","decodeTerrain","WorkerFarmTerrainDecoder","_DefaultTerrainDecode","_opts$maxWorkers","_this2","farm","createTerrainMesh","meta","errorLevel","maxVertexDistance","tileRect","ellipsoid","overscaleFactor","skirtHeight","isNaN","east","north","Error","center","Rectangle","halfAngle","dr","cos","occlusionHeight","maximumRadius","PI","occlusionPoint","Cartographic","longitude","latitude","horizonOcclusionPoint","transformPositionToScaledSpace","toCartesian","orientedBoundingBox","OrientedBoundingBox","fromRectangle","boundingSphere","BoundingSphere","fromOrientedBoundingBox","RasterTerrainData","westSkirtHeight","southSkirtHeight","eastSkirtHeight","northSkirtHeight","childTileMask","createdByUpsampling","createEmptyMesh","tileCoord","latScalar","min","abs","sin","v","ceil","output","UpsampleTracker","ne","nw","se","sw","finished","_QuantizedMeshTerrain","_opts$maxVertexDistan","upsampleTracker","upsample","tilingScheme","thisX","thisY","thisLevel","descendantX","descendantY","descendantLevel","_superPropGet","dz","upscaledX","upscaledY","dx","dy","buildOverscaledTerrainTile","heightData","ellipsoidRadius","quadrant","getQuadrant","QuantizedMeshTerrainData","_buildOverscaledTerrainTile","workerOpts","_objectWithoutProperties","_excluded","tileXYToRectangle","upsamplerFarm","buffer","t0","UpsamplerWorker","StretchedTilingScheme","_WebMercatorTilingSch","level","south","WebMercatorTilingScheme","MartiniTerrainProvider","_this$resource$credit","_opts$minZoomLevel","_opts$fillPoles","_opts$minimumErrorLev","_opts$ellipsoid","_opts$detailScalar","_opts$tilingScheme$el","_opts$tilingScheme","CEvent","credit","decoder","minZoomLevel","fillPoles","ready","readyPromise","minError","minimumErrorLevel","errorEvent","addEventListener","console","log","Ellipsoid","WGS84","scheme","numberOfLevelZeroTilesX","numberOfLevelZeroTilesY","levelOfDetailScalar","detailScalar","CMath","EPSILON5","_errorAtMinZoom","errorAtZoom","scaledErrorForTile","processTile","bind","_processTile","_ref2","_this$resource","r1","pixelData","imageData","zoom","getLevelMaximumGeometricError","workerOutput","levelZeroMaximumGeometricError","TerrainProvider","getEstimatedLevelZeroGeometricErrorForAHeightmap","getNumberOfXTilesAtLevel","MapboxTerrainProvider","_MartiniTerrainProvid","MapboxTerrainWorker"],"mappings":"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"}