@macrostrat/cesium-martini 1.2.3 → 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/.babelrc +1 -6
- package/.env.example +1 -0
- package/.npmrc +1 -0
- package/README.md +60 -12
- package/dist/index.cjs +1099 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.js +787 -2149
- package/dist/index.js.map +1 -1
- package/package.json +26 -31
- package/rollup.config.js +13 -6
- package/tsconfig.json +3 -3
- package/typings/worker-loader.d.ts +10 -0
- package/webpack.config.js +7 -1
- package/.gitmodules +0 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/resources/heightmap-resource.ts","../src/resources/mapbox-resource.ts","../src/worker/worker-util.ts","../src/worker/worker-farm.ts","../src/worker/decoder.ts","../src/terrain-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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"}
|