@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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","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.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-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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@macrostrat/cesium-martini",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "description": "",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.js",
@@ -14,8 +14,10 @@
14
14
  "build": "rollup -c",
15
15
  "watch": "rollup -c -w",
16
16
  "example": "yarn workspace example-vite run dev",
17
+ "example:mapzen": "yarn workspace example-vite-mapzen-worker run dev",
17
18
  "example:webpack-react": "yarn workspace example-webpack-react run dev",
18
19
  "example:webpack": "yarn workspace example-webpack run dev",
20
+ "example:webpack-mapzen": "yarn workspace example-webpack-mapzen-worker run dev",
19
21
  "dev": "yarn run watch & yarn run example",
20
22
  "test": "echo \"Error: no test specified\" && exit 1",
21
23
  "prepublishOnly": "npm run build"
@@ -23,9 +25,9 @@
23
25
  "author": "",
24
26
  "license": "ISC",
25
27
  "dependencies": {
26
- "@mapbox/martini": "^0.2.0",
28
+ "@mapbox/martini": "git+https://github.com/davenquinn/martini.git",
27
29
  "@types/ndarray": "^1.0.7",
28
- "axios": "^0.21.1",
30
+ "axios": "^1.7.9",
29
31
  "cesium": "^1.81.0",
30
32
  "get-pixels": "^3.3.2",
31
33
  "ndarray": "^1.0.19"
@@ -47,5 +49,6 @@
47
49
  "rollup": "^2.39.0",
48
50
  "rollup-plugin-web-worker-loader": "^1.5.0",
49
51
  "typescript": "^5.0.0"
50
- }
52
+ },
53
+ "packageManager": "yarn@4.6.0"
51
54
  }
@@ -0,0 +1,10 @@
1
+ declare module "*.worker.ts" {
2
+ // You need to change `Worker`, if you specified a different value for the `workerType` option
3
+ class WebpackWorker extends Worker {
4
+ constructor();
5
+ }
6
+
7
+ // Uncomment this if you set the `esModule` option to `false`
8
+ // export = WebpackWorker;
9
+ export default WebpackWorker;
10
+ }
@@ -0,0 +1,75 @@
1
+ const HtmlWebpackPlugin = require("html-webpack-plugin");
2
+ const CopyPlugin = require("copy-webpack-plugin");
3
+ const DotenvPlugin = require("dotenv-webpack");
4
+ const { DefinePlugin } = require("webpack");
5
+ const path = require("path");
6
+
7
+ const cesiumSource = "node_modules/cesium/Source";
8
+ const cesiumWorkers = "../Build/CesiumUnminified/Workers";
9
+
10
+ module.exports = {
11
+ // Enable sourcemaps for debugging webpack's output.
12
+ devtool: "source-map",
13
+ resolve: {
14
+ extensions: [".ts", ".tsx", ".js"],
15
+ alias: {
16
+ // CesiumJS module name
17
+ cesiumSource: path.resolve(__dirname, cesiumSource),
18
+ lib: path.resolve(__dirname, 'src'),
19
+ }
20
+ },
21
+ module: {
22
+ unknownContextCritical: false,
23
+ rules: [
24
+ // Place this *before* the `ts-loader`.
25
+ {
26
+ test: /\.worker\.ts$/,
27
+ loader: "worker-loader",
28
+ },
29
+ {
30
+ test: /\.ts(x?)$/,
31
+ exclude: /node_modules/,
32
+ use: ["babel-loader"]
33
+ },
34
+ {
35
+ test: /\.(png|svg)$/,
36
+ use: ["file-loader"]
37
+ },
38
+ { test: /\.css$/, use: ["style-loader", "css-loader"] },
39
+ // All output '.js' files will have any sourcemaps re-processed by 'source-map-loader'.
40
+ {
41
+ enforce: "pre",
42
+ test: /\.js$/,
43
+ loader: "source-map-loader"
44
+ },
45
+ // https://github.com/CesiumGS/cesium/issues/9790#issuecomment-943773870
46
+ {
47
+ test: /.js$/,
48
+ include: path.resolve(__dirname, 'node_modules/cesium/Source'),
49
+ use: { loader: require.resolve('@open-wc/webpack-import-meta-loader') }
50
+ },
51
+ ]
52
+ },
53
+ node: {
54
+ fs: "empty"
55
+ },
56
+ amd: {
57
+ // Enable webpack-friendly use of require in Cesium
58
+ toUrlUndefined: true
59
+ },
60
+ plugins: [
61
+ new HtmlWebpackPlugin({ title: "Mapbox / Cesium Terrain" }),
62
+ new CopyPlugin([
63
+ { from: path.join(cesiumSource, cesiumWorkers), to: "Workers" }
64
+ ]),
65
+ new CopyPlugin([{ from: path.join(cesiumSource, "Assets"), to: "Assets" }]),
66
+ new CopyPlugin([
67
+ { from: path.join(cesiumSource, "Widgets"), to: "Widgets" }
68
+ ]),
69
+ new DotenvPlugin(),
70
+ new DefinePlugin({
71
+ // Define relative base path in cesium for loading assets
72
+ CESIUM_BASE_URL: JSON.stringify("/")
73
+ })
74
+ ]
75
+ };
package/.gitmodules DELETED
@@ -1,3 +0,0 @@
1
- [submodule "martini"]
2
- path = martini
3
- url = https://github.com/davenquinn/martini.git