@macrostrat/cesium-martini 1.3.0 → 1.4.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 +14 -3
- package/dist/index.cjs +306 -662
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +307 -659
- package/dist/index.js.map +1 -1
- package/package.json +7 -4
- package/typings/worker-loader.d.ts +10 -0
- package/webpack.config.js +75 -0
- package/.gitmodules +0 -3
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/heightmap-resource.ts","../src/mapbox-resource.ts","../src/worker-farm.ts","../src/worker-util.ts","../martini/index.js","../src/worker.ts","../src/terrain-provider.ts"],"sourcesContent":["import { Resource } from \"cesium\";\nimport { TileCoordinates } from \"./terrain-provider\";\n\nexport interface HeightmapResource {\n tileSize: number;\n getTilePixels: (coords: TileCoordinates) => Promise<ImageData>;\n getTileDataAvailable: (coords: TileCoordinates) => boolean;\n}\n\ninterface CanvasRef {\n canvas: HTMLCanvasElement;\n context: CanvasRenderingContext2D;\n}\n\nconst loadImage: (url: string) => Promise<HTMLImageElement> = (url) =>\n new Promise((resolve, reject) => {\n const img = new Image();\n img.addEventListener(\"load\", () => resolve(img));\n img.addEventListener(\"error\", (err) => reject(err));\n img.crossOrigin = \"anonymous\";\n img.src = url;\n });\n\nexport interface DefaultHeightmapResourceOpts {\n url?: string;\n skipOddLevels?: 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 skipOddLevels: boolean = false;\n contextQueue: CanvasRef[];\n\n constructor(opts: DefaultHeightmapResourceOpts = {}) {\n if (opts.url) {\n this.resource = Resource.createIfNeeded(opts.url);\n }\n this.skipOddLevels = opts.skipOddLevels ?? false;\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 buildTileURL(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\n ?.getDerivedResource({\n templateValues: {\n ...tileCoords,\n reverseY: Math.pow(2, z) - y - 1,\n },\n preserveQueryParameters: true,\n })\n .getUrlComponent(true);\n }\n\n getTilePixels = async (coords: TileCoordinates) => {\n const url = this.buildTileURL(coords);\n let img = await loadImage(url);\n return this.getPixels(img);\n };\n\n getTileDataAvailable({ z }) {\n if (z == this.maxZoom) return true;\n if (z % 2 == 1 && this.skipOddLevels) return false;\n if (z > this.maxZoom) return false;\n return true;\n }\n}\n\nexport default DefaultHeightmapResource;\n","import { 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} & DefaultHeightmapResourceOpts;\n\nexport class MapboxTerrainResource extends DefaultHeightmapResource {\n resource: Resource = null;\n\n constructor(opts: MapboxTerrainResourceOpts = {}) {\n super(opts);\n const highResolution = opts.highResolution ?? false;\n const format = opts.imageFormat ?? ImageFormat.WEBP;\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 this.resource = Resource.createIfNeeded(\n `https://api.mapbox.com/v4/mapbox.terrain-rgb/{z}/{x}/{y}${\n highResolution ? \"@2x\" : \"\"\n }.${format}`\n );\n if (opts.accessToken) {\n this.resource.setQueryParameters({\n access_token: opts.accessToken,\n });\n }\n }\n}\n\nexport default MapboxTerrainResource;\n","import TerrainWorker from \"web-worker:./worker\";\n\nconst resolves = {};\nconst rejects = {};\nlet globalMsgId = 0; // Activate calculation in the worker, returning a promise\n\nasync function sendMessage(worker, payload, transferableObjects) {\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\nclass WorkerFarm {\n worker: Worker;\n constructor() {\n this.worker = new TerrainWorker();\n this.worker.onmessage = handleMessage;\n }\n\n async scheduleTask(params, transferableObjects) {\n return await sendMessage(this.worker, params, transferableObjects);\n }\n}\n\nexport default WorkerFarm;\n","// We should save these\n//const canvas = new OffscreenCanvas(256, 256);\n//const ctx = canvas.getContext(\"2d\");\n\nfunction mapboxTerrainToGrid(\n png: ndarray<number>,\n interval?: number,\n offset?: number\n) {\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 interval = interval ?? 0.1;\n offset = offset ?? -10000;\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 terrain[y * gridSize + x] =\n r * 256 * 256 * interval + g * 256.0 * interval + b * interval + offset;\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 interface TerrainWorkerOutput {\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}\n\nexport function testMeshData(): TerrainWorkerOutput {\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): TerrainWorkerOutput {\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\nfunction createQuantizedMeshData(tile, mesh, tileSize): TerrainWorkerOutput {\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 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) * (32767.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 };\n}\n\nexport { mapboxTerrainToGrid, createQuantizedMeshData };\n","\nexport default class Martini {\n constructor(gridSize = 257) {\n this.gridSize = gridSize;\n const tileSize = gridSize - 1;\n if (tileSize & (tileSize - 1)) throw new Error(\n `Expected grid size to be 2^n+1, got ${gridSize}.`);\n\n this.numTriangles = tileSize * tileSize * 2 - 2;\n this.numParentTriangles = this.numTriangles - tileSize * tileSize;\n\n this.indices = new Uint32Array(this.gridSize * this.gridSize);\n\n // coordinates for all possible triangles in an RTIN tile\n this.coords = new Uint16Array(this.numTriangles * 4);\n\n // get triangle coordinates from its index in an implicit binary tree\n for (let i = 0; i < this.numTriangles; i++) {\n let id = i + 2;\n let ax = 0, ay = 0, bx = 0, by = 0, cx = 0, cy = 0;\n if (id & 1) {\n bx = by = cx = tileSize; // bottom-left triangle\n } else {\n ax = ay = cy = tileSize; // top-right triangle\n }\n while ((id >>= 1) > 1) {\n const mx = (ax + bx) >> 1;\n const my = (ay + by) >> 1;\n\n if (id & 1) { // left half\n bx = ax; by = ay;\n ax = cx; ay = cy;\n } else { // right half\n ax = bx; ay = by;\n bx = cx; by = cy;\n }\n cx = mx; cy = my;\n }\n const k = i * 4;\n this.coords[k + 0] = ax;\n this.coords[k + 1] = ay;\n this.coords[k + 2] = bx;\n this.coords[k + 3] = by;\n }\n }\n\n createTile(terrain) {\n return new Tile(terrain, this);\n }\n}\n\nclass Tile {\n constructor(terrain, martini) {\n const size = martini.gridSize;\n if (terrain.length !== size * size) throw new Error(\n `Expected terrain data of length ${size * size} (${size} x ${size}), got ${terrain.length}.`);\n\n this.terrain = terrain;\n this.martini = martini;\n this.errors = new Float32Array(terrain.length);\n this.update();\n }\n\n update() {\n const {numTriangles, numParentTriangles, coords, gridSize: size} = this.martini;\n const {terrain, errors} = this;\n\n // iterate over all possible triangles, starting from the smallest level\n for (let i = numTriangles - 1; i >= 0; i--) {\n const k = i * 4;\n const ax = coords[k + 0];\n const ay = coords[k + 1];\n const bx = coords[k + 2];\n const by = coords[k + 3];\n const mx = (ax + bx) >> 1;\n const my = (ay + by) >> 1;\n const cx = mx + my - ay;\n const cy = my + ax - mx;\n\n // calculate error in the middle of the long edge of the triangle\n const interpolatedHeight = (terrain[ay * size + ax] + terrain[by * size + bx]) / 2;\n const middleIndex = my * size + mx;\n const middleError = Math.abs(interpolatedHeight - terrain[middleIndex]);\n\n errors[middleIndex] = Math.max(errors[middleIndex], middleError);\n\n if (i < numParentTriangles) { // bigger triangles; accumulate error with children\n const leftChildIndex = ((ay + cy) >> 1) * size + ((ax + cx) >> 1);\n const rightChildIndex = ((by + cy) >> 1) * size + ((bx + cx) >> 1);\n errors[middleIndex] = Math.max(errors[middleIndex], errors[leftChildIndex], errors[rightChildIndex]);\n }\n }\n }\n\n getMesh(maxError = 0, maxLength = null) {\n const {gridSize: size, indices} = this.martini;\n const {errors} = this;\n let numVertices = 0;\n let numTriangles = 0;\n const max = size - 1;\n\n // The maxLength parameter will cause triangles to be generated until the legs are below this length\n // It is meant to support cases where a certain mesh density is required to do spherical math on digital globes\n const maxScale = maxLength || size;\n\n // use an index grid to keep track of vertices that were already used to avoid duplication\n indices.fill(0);\n\n // retrieve mesh in two stages that both traverse the error map:\n // - countElements: find used vertices (and assign each an index), and count triangles (for minimum allocation)\n // - processTriangle: fill the allocated vertices & triangles typed arrays\n\n function countElements(ax, ay, bx, by, cx, cy) {\n const mx = (ax + bx) >> 1;\n const my = (ay + by) >> 1;\n\n const legLength = Math.abs(ax - cx) + Math.abs(ay - cy);\n if ((legLength > 1 && errors[my * size + mx] > maxError) || legLength > maxScale) {\n countElements(cx, cy, ax, ay, mx, my);\n countElements(bx, by, cx, cy, mx, my);\n } else {\n indices[ay * size + ax] = indices[ay * size + ax] || ++numVertices;\n indices[by * size + bx] = indices[by * size + bx] || ++numVertices;\n indices[cy * size + cx] = indices[cy * size + cx] || ++numVertices;\n numTriangles++;\n }\n }\n countElements(0, 0, max, max, max, 0);\n countElements(max, max, 0, 0, 0, max);\n\n const vertices = new Uint16Array(numVertices * 2);\n const triangles = new Uint32Array(numTriangles * 3);\n let triIndex = 0;\n\n function processTriangle(ax, ay, bx, by, cx, cy) {\n const mx = (ax + bx) >> 1;\n const my = (ay + by) >> 1;\n\n const legLength = Math.abs(ax - cx) + Math.abs(ay - cy);\n if ((legLength > 1 && errors[my * size + mx] > maxError) || legLength > maxScale) {\n // triangle doesn't approximate the surface well enough; drill down further\n processTriangle(cx, cy, ax, ay, mx, my);\n processTriangle(bx, by, cx, cy, mx, my);\n\n } else {\n // add a triangle\n const a = indices[ay * size + ax] - 1;\n const b = indices[by * size + bx] - 1;\n const c = indices[cy * size + cx] - 1;\n\n vertices[2 * a] = ax;\n vertices[2 * a + 1] = ay;\n\n vertices[2 * b] = bx;\n vertices[2 * b + 1] = by;\n\n vertices[2 * c] = cx;\n vertices[2 * c + 1] = cy;\n\n triangles[triIndex++] = a;\n triangles[triIndex++] = b;\n triangles[triIndex++] = c;\n }\n }\n processTriangle(0, 0, max, max, max, 0);\n processTriangle(max, max, 0, 0, 0, max);\n\n return {vertices, triangles};\n }\n}\n","import {\n mapboxTerrainToGrid,\n createQuantizedMeshData,\n QuantizedMeshOptions,\n} from \"./worker-util\";\nimport ndarray from \"ndarray\";\nimport Martini from \"../martini/index.js\";\n// https://github.com/CesiumGS/cesium/blob/1.76/Source/WorkersES6/createVerticesFromQuantizedTerrainMesh.js\n\nexport interface TerrainWorkerInput extends QuantizedMeshOptions {\n imageData: Uint8ClampedArray;\n maxLength: number | null;\n x: number;\n y: number;\n z: number;\n\n /**\n * Terrain-RGB interval (default 0.1)\n */\n interval?: number;\n\n /**\n * Terrain-RGB offset (default -10000)\n */\n offset?: number;\n}\n\nlet martini = null;\n\nfunction decodeTerrain(\n parameters: TerrainWorkerInput,\n transferableObjects: any[]\n) {\n const { imageData, tileSize = 256, errorLevel, interval, offset } = parameters;\n\n const pixels = ndarray(\n new Uint8Array(imageData),\n [tileSize, tileSize, 4],\n [4, 4 * tileSize, 1],\n 0\n );\n\n // Tile size must be maintained through the life of the worker\n martini ??= new Martini(tileSize + 1);\n\n const terrain = mapboxTerrainToGrid(pixels, interval, offset);\n\n const tile = martini.createTile(terrain);\n\n // get a mesh (vertices and triangles indices) for a 10m error\n const mesh = tile.getMesh(errorLevel, parameters.maxLength);\n return createQuantizedMeshData(tile, mesh, tileSize);\n}\n\nexport { decodeTerrain };\n\nself.onmessage = function (msg) {\n const { id, payload } = msg.data;\n if (id == null) return;\n let objects = [];\n let res = null;\n try {\n res = decodeTerrain(payload);\n objects.push(res.indices.buffer);\n objects.push(res.quantizedVertices.buffer);\n self.postMessage({ id, payload: res }, objects);\n } catch (err) {\n self.postMessage({ id, err: err.toString() });\n } finally {\n res = null;\n objects = null;\n }\n};\n","import {\n Cartographic,\n Rectangle,\n Ellipsoid,\n WebMercatorTilingScheme,\n Math as CMath,\n Event as CEvent,\n BoundingSphere,\n QuantizedMeshTerrainData,\n OrientedBoundingBox,\n TerrainProvider,\n Credit,\n} from \"cesium\";\nimport WorkerFarm from \"./worker-farm\";\nimport { TerrainWorkerInput, decodeTerrain } from \"./worker\";\nimport TilingScheme from \"cesium/Source/Core/TilingScheme\";\nimport { HeightmapResource } from \"./heightmap-resource\";\nimport MapboxTerrainResource, {\n MapboxTerrainResourceOpts,\n} from \"./mapbox-resource\";\nimport { emptyMesh } from \"./worker-util\";\n\n// https://github.com/CesiumGS/cesium/blob/1.68/Source/Scene/MapboxImageryProvider.js#L42\n\nexport interface TileCoordinates {\n x: number;\n y: number;\n z: number;\n}\n\ninterface MartiniTerrainOpts {\n resource: HeightmapResource;\n ellipsoid?: Ellipsoid;\n // workerURL: string;\n detailScalar?: number;\n minimumErrorLevel?: number;\n maxWorkers?: number;\n interval?: number;\n offset?: number;\n minZoomLevel?: number;\n fillPoles?: boolean;\n}\n\nclass 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 //console.log(\"Top row\", res, y, level);\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 workerFarm: WorkerFarm | null = null;\n inProgressWorkers: number = 0;\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 interval: number;\n offset: number;\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\n this.interval = opts.interval ?? 0.1;\n this.offset = opts.offset ?? -10000;\n this.maxWorkers = opts.maxWorkers ?? 5;\n this.minZoomLevel = opts.minZoomLevel ?? 3;\n this.fillPoles = opts.fillPoles ?? true;\n console.log(\"fillPoles\", this.fillPoles);\n\n this.levelOfDetailScalar = (opts.detailScalar ?? 4.0) + CMath.EPSILON5;\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 if (this.maxWorkers > 0) {\n this.workerFarm = new WorkerFarm();\n }\n\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\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\n if (\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\n if (this.inProgressWorkers > this.maxWorkers) return undefined;\n this.inProgressWorkers += 1;\n return this.processTile(x, y, z).finally(() => {\n this.inProgressWorkers -= 1;\n });\n }\n\n async processTile(x: number, y: number, z: number) {\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 try {\n const { tileSize, getTilePixels } = this.resource;\n let px = await getTilePixels({ x, y, z });\n let pixelData = px.data;\n\n const tileRect = this.tilingScheme.tileXYToRectangle(x, y, z);\n ///const center = Rectangle.center(tileRect);\n\n const err = this.errorAtZoom(z);\n\n let maxLength = this.maxVertexDistance(tileRect);\n\n const params: TerrainWorkerInput = {\n imageData: pixelData,\n maxLength,\n x,\n y,\n z,\n errorLevel: err,\n ellipsoidRadius: this.ellipsoid.maximumRadius,\n tileSize,\n interval: this.interval,\n offset: this.offset,\n };\n\n let res;\n if (this.workerFarm != null) {\n res = await this.workerFarm.scheduleTask(params, [pixelData.buffer]);\n } else {\n res = decodeTerrain(params, []);\n }\n pixelData = undefined;\n px = undefined;\n return this.createQuantizedMeshData(tileRect, err, res);\n } catch (err) {\n console.log(err);\n return this.emptyMesh(x, y, z);\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 let result = 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 return result;\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 // Scalar to control overzooming\n // also seems to control zooming for imagery layers\n const scalar = 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\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 super({\n ...opts,\n resource,\n });\n }\n}\n"],"names":["loadImage","url","Promise","resolve","reject","img","Image","addEventListener","err","crossOrigin","src","DefaultHeightmapResource","_this","_opts$skipOddLevels","_opts$tileSize","_opts$maxZoom","opts","arguments","length","undefined","_classCallCheck","_defineProperty","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","coords","wrap","_callee$","_context","prev","next","buildTileURL","sent","abrupt","getPixels","stop","_x","apply","resource","Resource","createIfNeeded","skipOddLevels","tileSize","maxZoom","contextQueue","_createClass","key","value","getCanvas","ctx","pop","canvas","document","createElement","width","height","context","getContext","canvasRef","drawImage","pixels","getImageData","clearRect","push","tileCoords","_this$resource","z","y","getDerivedResource","templateValues","_objectSpread","reverseY","Math","pow","preserveQueryParameters","getUrlComponent","getTileDataAvailable","_ref2","ImageFormat","MapboxTerrainResource","_DefaultHeightmapReso","_inherits","_super","_createSuper","_opts$highResolution","_opts$imageFormat","call","_assertThisInitialized","highResolution","format","imageFormat","WEBP","concat","accessToken","setQueryParameters","access_token","resolves","rejects","globalMsgId","sendMessage","_x2","_x3","_sendMessage","_callee2","worker","payload","transferableObjects","msgId","msg","_callee2$","_context2","id","postMessage","handleMessage","_msg$data","data","WorkerFarm","TerrainWorker","onmessage","_scheduleTask","params","scheduleTask","_x4","_x5","mapboxTerrainToGrid","png","interval","offset","_interval","_offset","gridSize","shape","terrain","Float32Array","x","yc","r","get","g","b","_emptyMesh","n","max","nTriangles","nVertices","quantizedVertices","Uint16Array","indices","westIndices","southIndices","eastIndices","northIndices","tix","i","rx","ry","floor","ix","rix","minimumHeight","maximumHeight","_meshCache","emptyMesh","result","createQuantizedMeshData","tile","mesh","xvals","yvals","heightMeters","Infinity","scalar","vertices","vertexIx","px","py","xv","yv","heightRange","heights","map","d","triangles","_toConsumableArray","Martini","constructor","Error","numTriangles","numParentTriangles","Uint32Array","ax","ay","bx","by","cx","cy","mx","my","k","createTile","Tile","martini","size","errors","update","interpolatedHeight","middleIndex","middleError","abs","leftChildIndex","rightChildIndex","getMesh","maxError","maxLength","numVertices","maxScale","fill","countElements","legLength","triIndex","processTriangle","a","c","decodeTerrain","parameters","_martini","imageData","_parameters$tileSize","errorLevel","ndarray","Uint8Array","self","objects","res","buffer","toString","StretchedTilingScheme","_WebMercatorTilingSch","tileXYToRectangle","level","_get","_getPrototypeOf","prototype","north","PI","south","WebMercatorTilingScheme","MartiniTerrainProvider","_opts$interval","_opts$offset","_opts$maxWorkers","_opts$minZoomLevel","_opts$fillPoles","_opts$detailScalar","_opts$minimumErrorLev","_opts$ellipsoid","Credit","CEvent","maxWorkers","minZoomLevel","fillPoles","console","log","levelOfDetailScalar","detailScalar","CMath","EPSILON5","ready","readyPromise","minError","minimumErrorLevel","errorEvent","ellipsoid","Ellipsoid","WGS84","workerFarm","scheme","tilingScheme","numberOfLevelZeroTilesX","numberOfLevelZeroTilesY","_errorAtMinZoom","errorAtZoom","requestTileGeometry","request","scaledErrorForTile","inProgressWorkers","processTile","_processTile","getTilePixels","pixelData","tileRect","maxVertexDistance","ellipsoidRadius","maximumRadius","t0","zoom","getLevelMaximumGeometricError","center","Rectangle","sin","latitude","ceil","latScalar","min","v","output","workerOutput","skirtHeight","halfAngle","dr","cos","occlusionHeight","occlusionPoint","Cartographic","longitude","horizonOcclusionPoint","transformPositionToScaledSpace","toCartesian","orientedBoundingBox","OrientedBoundingBox","fromRectangle","boundingSphere","BoundingSphere","fromOrientedBoundingBox","QuantizedMeshTerrainData","westSkirtHeight","southSkirtHeight","eastSkirtHeight","northSkirtHeight","childTileMask","levelZeroMaximumGeometricError","TerrainProvider","getEstimatedLevelZeroGeometricErrorForAHeightmap","getNumberOfXTilesAtLevel","MapboxTerrainProvider","_MartiniTerrainProvid","_super2"],"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-provider.ts","../src/mapbox-terrain-provider.ts"],"sourcesContent":["import { Resource, Credit } from \"cesium\";\nimport { TileCoordinates } from \"../terrain-provider\";\n\nexport interface HeightmapResource {\n credit?: Credit;\n tileSize: number;\n getTilePixels: (coords: TileCoordinates) => Promise<ImageData>;\n getTileDataAvailable: (coords: TileCoordinates) => boolean;\n}\n\ninterface CanvasRef {\n canvas: HTMLCanvasElement;\n context: CanvasRenderingContext2D;\n}\n\nexport const loadImage: (url: string) => Promise<HTMLImageElement> = (url) =>\n new Promise((resolve, reject) => {\n const img = new Image();\n img.addEventListener(\"load\", () => resolve(img));\n img.addEventListener(\"error\", (err) => reject(err));\n img.crossOrigin = \"anonymous\";\n img.src = url;\n });\n\nexport interface DefaultHeightmapResourceOpts {\n url?: string;\n skipOddLevels?: 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 skipOddLevels: boolean = false;\n contextQueue: CanvasRef[];\n\n constructor(opts: DefaultHeightmapResourceOpts = {}) {\n if (opts.url) {\n this.resource = Resource.createIfNeeded(opts.url);\n }\n this.skipOddLevels = opts.skipOddLevels ?? false;\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 buildTileURL(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\n ?.getDerivedResource({\n templateValues: {\n ...tileCoords,\n reverseY: Math.pow(2, z) - y - 1,\n },\n preserveQueryParameters: true,\n })\n .getUrlComponent(true);\n }\n\n getTilePixels = async (coords: TileCoordinates) => {\n const url = this.buildTileURL(coords);\n let img = await loadImage(url);\n return this.getPixels(img);\n };\n\n getTileDataAvailable({ z }) {\n if (z == this.maxZoom) return true;\n if (z % 2 == 1 && this.skipOddLevels) 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} & 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\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 this.resource = Resource.createIfNeeded(\n `https://api.mapbox.com/v4/mapbox.terrain-rgb/{z}/{x}/{y}${\n highResolution ? \"@2x\" : \"\"\n }.${format}`\n );\n if (opts.accessToken) {\n this.resource.setQueryParameters({\n access_token: opts.accessToken,\n });\n }\n }\n}\n\nexport default MapboxTerrainResource;\n","// We should save these\n//const canvas = new OffscreenCanvas(256, 256);\n//const ctx = canvas.getContext(\"2d\");\nimport ndarray from \"ndarray\";\n\nexport interface TerrainWorkerInput extends QuantizedMeshOptions {\n imageData: Uint8ClampedArray;\n maxLength: number | null;\n x: number;\n y: number;\n z: number;\n}\n\nexport type DecodeRgbFunction = (r: number, g: number, b: number, a: number) => 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) => (r * 6553.6) + (g * 25.6) + b * 0.1 - 10000;\n\nfunction rgbTerrainToGrid(png: ndarray<number>, 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\nfunction testMeshData() {\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}\n\nfunction createQuantizedMeshData(tile, mesh, tileSize): QuantizedMeshResult {\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 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) * (32767.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 };\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(worker, payload, transferableObjects) {\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\nclass WorkerFarm {\n worker: Worker;\n constructor(opts) {\n this.worker = opts.worker;\n this.worker.onmessage = handleMessage;\n }\n\n async scheduleTask(params, transferableObjects) {\n return await sendMessage(this.worker, params, transferableObjects);\n }\n}\n\nexport default WorkerFarm;\n","import { HeightmapTerrainData, QuantizedMeshTerrainData } from \"cesium\";\nimport { TileCoordinates } from \"../terrain-provider\";\nimport WorkerFarm from \"./worker-farm\";\nimport { TerrainWorkerInput, QuantizedMeshResult } from \"./worker-util\";\n\n\nexport interface TerrainDecoder {\n requestTileGeometry: (coords: TileCoordinates, processFunction: (coords: TileCoordinates) => Promise<HeightmapTerrainData | QuantizedMeshTerrainData>) => Promise<HeightmapTerrainData | QuantizedMeshTerrainData> | undefined;\n decodeTerrain: (params: TerrainWorkerInput, data: ArrayBufferLike) => Promise<QuantizedMeshResult>;\n}\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\n\ninterface WorkerFarmDecoderOpts {\n maxWorkers?: number;\n worker?: Worker;\n}\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, [data]) as Promise<QuantizedMeshResult>;\n }\n}\n\nexport default WorkerFarmTerrainDecoder;","import {\n Cartographic,\n Rectangle,\n Ellipsoid,\n WebMercatorTilingScheme,\n Math as CMath,\n Event as CEvent,\n BoundingSphere,\n QuantizedMeshTerrainData,\n OrientedBoundingBox,\n TerrainProvider,\n Credit,\n TilingScheme\n} from \"cesium\";\n\nimport { TerrainWorkerInput, emptyMesh as _emptyMesh } from \"./worker/worker-util\";\nimport { HeightmapResource } from './resources/heightmap-resource';\nimport WorkerFarmTerrainDecoder, { TerrainDecoder, DefaultTerrainDecoder } from \"./worker/decoder\";\n\n// https://github.com/CesiumGS/cesium/blob/1.68/Source/Scene/MapboxImageryProvider.js#L42\n\nexport interface TileCoordinates {\n x: number;\n y: number;\n z: number;\n}\n\nexport interface MartiniTerrainOpts {\n resource: HeightmapResource;\n decoder?: TerrainDecoder;\n\n ellipsoid?: Ellipsoid;\n detailScalar?: number;\n minimumErrorLevel?: number;\n maxWorkers?: number;\n minZoomLevel?: number;\n fillPoles?: boolean;\n}\n\nclass 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 //console.log(\"Top row\", res, y, level);\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 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 if (!this.decoder) {\n const maxWorkers = opts.maxWorkers ?? 5;\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.levelOfDetailScalar = (opts.detailScalar ?? 4.0) + CMath.EPSILON5;\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 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\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 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 // Note: we still load a TON of tiles near the poles. We might need to do some overzooming here...\n return this.decoder.requestTileGeometry({ x, y, z }, this.processTile.bind(this));\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 try {\n const { tileSize, getTilePixels } = this.resource;\n let px = await getTilePixels({ x, y, z });\n let pixelData = px.data;\n\n const tileRect = this.tilingScheme.tileXYToRectangle(x, y, z);\n ///const center = Rectangle.center(tileRect);\n\n const err = this.errorAtZoom(z);\n\n let maxLength = this.maxVertexDistance(tileRect);\n\n const params: TerrainWorkerInput = {\n imageData: pixelData,\n maxLength,\n x,\n y,\n z,\n errorLevel: err,\n ellipsoidRadius: this.ellipsoid.maximumRadius,\n tileSize,\n };\n\n const res = await this.decoder.decodeTerrain(params, pixelData.buffer);\n pixelData = undefined;\n px = undefined;\n return this.createQuantizedMeshData(tileRect, err, res);\n } catch (err) {\n console.log(err);\n return this.emptyMesh(x, y, z);\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 let result = 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 return result;\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 // Scalar to control overzooming\n // also seems to control zooming for imagery layers\n const scalar = 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, { MapboxTerrainResourceOpts } 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'> & 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":["loadImage","url","Promise","resolve","reject","img","Image","addEventListener","err","crossOrigin","src","DefaultHeightmapResource","_this","_opts$skipOddLevels","_opts$tileSize","_opts$maxZoom","opts","arguments","length","undefined","_classCallCheck","_defineProperty","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","coords","wrap","_callee$","_context","prev","next","buildTileURL","sent","abrupt","getPixels","stop","_x","apply","resource","Resource","createIfNeeded","skipOddLevels","tileSize","maxZoom","contextQueue","_createClass","key","value","getCanvas","ctx","pop","canvas","document","createElement","width","height","context","getContext","canvasRef","drawImage","pixels","getImageData","clearRect","push","tileCoords","_this$resource","z","y","getDerivedResource","templateValues","_objectSpread","reverseY","Math","pow","preserveQueryParameters","getUrlComponent","getTileDataAvailable","_ref2","ImageFormat","MapboxTerrainResource","_DefaultHeightmapReso","_opts$highResolution","_opts$imageFormat","_callSuper","Credit","highResolution","format","imageFormat","WEBP","concat","accessToken","setQueryParameters","access_token","_inherits","_emptyMesh","n","max","nTriangles","nVertices","quantizedVertices","Uint16Array","indices","westIndices","southIndices","eastIndices","northIndices","tix","i","rx","ry","floor","ix","rix","minimumHeight","maximumHeight","_meshCache","emptyMesh","result","resolves","rejects","globalMsgId","sendMessage","_x2","_x3","_sendMessage","_callee2","worker","payload","transferableObjects","msgId","msg","_callee2$","_context2","id","postMessage","handleMessage","_msg$data","data","WorkerFarm","onmessage","_scheduleTask","params","scheduleTask","_x4","_x5","DefaultTerrainDecoder","requestTileGeometry","processFunction","inProgress","maxRequests","decodeTerrain","WorkerFarmTerrainDecoder","_DefaultTerrainDecode","_opts$maxWorkers","_this2","farm","maxWorkers","StretchedTilingScheme","_WebMercatorTilingSch","tileXYToRectangle","x","level","res","_superPropGet","north","PI","south","WebMercatorTilingScheme","MartiniTerrainProvider","_this$resource$credit","_opts$minZoomLevel","_opts$fillPoles","_opts$detailScalar","_opts$minimumErrorLev","_opts$ellipsoid","CEvent","credit","decoder","minZoomLevel","fillPoles","levelOfDetailScalar","detailScalar","CMath","EPSILON5","ready","readyPromise","minError","minimumErrorLevel","errorEvent","console","log","ellipsoid","Ellipsoid","WGS84","scheme","tilingScheme","numberOfLevelZeroTilesX","numberOfLevelZeroTilesY","_errorAtMinZoom","errorAtZoom","request","scaledErrorForTile","processTile","bind","_processTile","getTilePixels","px","pixelData","tileRect","maxLength","maxVertexDistance","imageData","errorLevel","ellipsoidRadius","maximumRadius","buffer","createQuantizedMeshData","t0","zoom","getLevelMaximumGeometricError","center","Rectangle","sin","latitude","ceil","latScalar","min","abs","v","output","workerOutput","skirtHeight","halfAngle","dr","cos","occlusionHeight","occlusionPoint","Cartographic","longitude","horizonOcclusionPoint","transformPositionToScaledSpace","toCartesian","orientedBoundingBox","OrientedBoundingBox","fromRectangle","boundingSphere","BoundingSphere","fromOrientedBoundingBox","QuantizedMeshTerrainData","westSkirtHeight","southSkirtHeight","eastSkirtHeight","northSkirtHeight","childTileMask","levelZeroMaximumGeometricError","TerrainProvider","getEstimatedLevelZeroGeometricErrorForAHeightmap","getNumberOfXTilesAtLevel","scalar","MapboxTerrainProvider","_MartiniTerrainProvid","MapboxTerrainWorker"],"mappings":"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"}
|