@macrostrat/cesium-martini 1.4.0 → 1.5.1

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