@macrostrat/cesium-martini 1.5.2 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -150,6 +150,22 @@ The configuration also takes a single number and array.
150
150
 
151
151
  ## Changelog
152
152
 
153
+ ## `[1.6.0]`: January 2026
154
+
155
+ - Upgrade Cesium dependency
156
+ - Upgrade examples considerably
157
+ - Remove unneeded `axios` dependency
158
+ - Note: `example:mapzen` does not work, but `example:mapzen-webpack` still does.
159
+
160
+ ### `[1.5.3]`: February 2025
161
+
162
+ - Removed `source` field from package.json, as it should be reserved for modules
163
+ that can be bundled without special treatment (e.g., web worker compilation).
164
+
165
+ ### `[1.5.2]`: February 2025
166
+
167
+ - Added `source` field to package.json
168
+
153
169
  ### `[1.5.1]`: February 2025
154
170
 
155
171
  - Remove `.idea` files from bundle
package/dist/index.cjs CHANGED
@@ -1606,6 +1606,7 @@ var MapboxTerrainProvider = /*#__PURE__*/function (_MartiniTerrainProvid) {
1606
1606
 
1607
1607
  exports.DefaultHeightmapResource = DefaultHeightmapResource;
1608
1608
  exports.DefaultTerrainDecoder = DefaultTerrainDecoder;
1609
+ exports.MapboxTerrainProvider = MapboxTerrainProvider;
1609
1610
  exports.MapboxTerrainResource = MapboxTerrainResource;
1610
1611
  exports.MartiniTerrainProvider = MartiniTerrainProvider;
1611
1612
  exports.StretchedTilingScheme = StretchedTilingScheme;
@@ -1 +1 @@
1
- {"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 default 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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"}
1
+ {"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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"}
package/dist/index.js CHANGED
@@ -1600,5 +1600,5 @@ var MapboxTerrainProvider = /*#__PURE__*/function (_MartiniTerrainProvid) {
1600
1600
  return _createClass(MapboxTerrainProvider);
1601
1601
  }(MartiniTerrainProvider);
1602
1602
 
1603
- export { DefaultHeightmapResource, DefaultTerrainDecoder, MapboxTerrainResource, MartiniTerrainProvider, StretchedTilingScheme, WorkerFarmTerrainDecoder, createQuantizedMeshData, MapboxTerrainProvider as default, emptyMesh, rgbTerrainToGrid, subsetByWindow, testMeshData };
1603
+ export { DefaultHeightmapResource, DefaultTerrainDecoder, MapboxTerrainProvider, MapboxTerrainResource, MartiniTerrainProvider, StretchedTilingScheme, WorkerFarmTerrainDecoder, createQuantizedMeshData, MapboxTerrainProvider as default, emptyMesh, rgbTerrainToGrid, subsetByWindow, testMeshData };
1604
1604
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","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 default 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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"}
1
+ {"version":3,"file":"index.js","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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"}
package/package.json CHANGED
@@ -1,13 +1,12 @@
1
1
  {
2
2
  "name": "@macrostrat/cesium-martini",
3
- "version": "1.5.2",
3
+ "version": "1.6.0",
4
4
  "description": "On-the-fly meshing of raster elevation tiles for the CesiumJS virtual globe",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.js",
7
7
  "source": "./src/index.ts",
8
8
  "exports": {
9
9
  ".": {
10
- "source": "./src/index.ts",
11
10
  "import": "./dist/index.js",
12
11
  "require": "./dist/index.cjs"
13
12
  }
@@ -35,9 +34,8 @@
35
34
  "dependencies": {
36
35
  "@mapbox/martini": "git+https://github.com/davenquinn/martini.git",
37
36
  "@types/ndarray": "^1.0.11",
38
- "axios": "^1.7.9",
39
- "cesium": "^1.81.0",
40
- "get-pixels": "^3.3.2",
37
+ "cesium": "^1.137.0",
38
+ "get-pixels": "^3.3.3",
41
39
  "ndarray": "^1.0.19"
42
40
  },
43
41
  "workspaces": [
@@ -58,7 +56,7 @@
58
56
  "prettier": "^3.5.0",
59
57
  "rollup": "^2.39.0",
60
58
  "rollup-plugin-web-worker-loader": "^1.5.0",
61
- "typescript": "^5.0.0"
59
+ "typescript": "^5.9.3"
62
60
  },
63
- "packageManager": "yarn@4.6.0"
61
+ "packageManager": "yarn@4.12.0"
64
62
  }
package/src/index.ts CHANGED
@@ -5,12 +5,13 @@ import {
5
5
  MartiniTerrainProvider,
6
6
  StretchedTilingScheme,
7
7
  } from "./terrain-provider";
8
- import MapboxTerrainProvider from "./mapbox-terrain-provider";
8
+ import { MapboxTerrainProvider } from "./mapbox-terrain-provider";
9
9
  export * from "./worker/decoder";
10
10
  export * from "./worker/worker-util";
11
11
 
12
12
  export default MapboxTerrainProvider;
13
13
  export {
14
+ MapboxTerrainProvider,
14
15
  MartiniTerrainProvider,
15
16
  DefaultHeightmapResource,
16
17
  MapboxTerrainResource,
@@ -9,7 +9,7 @@ import MapboxTerrainWorker from "web-worker:./worker/mapbox-worker";
9
9
  type MapboxTerrainOpts = Omit<MartiniTerrainOpts, "resource"> &
10
10
  MapboxTerrainResourceOpts;
11
11
 
12
- export default class MapboxTerrainProvider extends MartiniTerrainProvider<TerrainProvider> {
12
+ export class MapboxTerrainProvider extends MartiniTerrainProvider<TerrainProvider> {
13
13
  constructor(opts: MapboxTerrainOpts = {}) {
14
14
  const resource = new MapboxTerrainResource(opts);
15
15
  const decoder = new WorkerFarmTerrainDecoder({