@map-zero/cesium 0.2.0 → 0.2.2

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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/index.js +23 -6
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@map-zero/cesium",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "type": "module",
5
5
  "description": "Cesium integration helper for map-zero 3D Tiles packages.",
6
6
  "main": "./src/index.js",
package/src/index.js CHANGED
@@ -90,7 +90,10 @@ export async function loadMapZeroStyle(input, options = {}) {
90
90
  * opacity?: number,
91
91
  * tilesetOpacity?: number,
92
92
  * buildingsOpacity?: number,
93
- * buildings3d?: boolean
93
+ * buildings3d?: boolean,
94
+ * tilesetMaximumScreenSpaceError?: number,
95
+ * tilesetCacheBytes?: number,
96
+ * tilesetMaximumCacheOverflowBytes?: number
94
97
  * }} options
95
98
  * @returns {Promise<{ id: string, manifest: MapZeroManifest, style: Record<string, unknown> | null, tilesets: Record<string, Cesium3DTileset> }>}
96
99
  */
@@ -124,7 +127,7 @@ export async function createMapZeroCesiumTilesets(options) {
124
127
  const url = resolveRelativeUrl(entry.url, options.manifestUrl);
125
128
  const tileset = await Cesium3DTileset.fromUrl(url);
126
129
  tagCesiumTileset(tileset, instanceId, entry.layerId);
127
- configureCesiumTilesetStreaming(tileset, entry.layerId);
130
+ configureCesiumTilesetStreaming(tileset, entry.layerId, options);
128
131
  configureCesiumTilesetColor(tileset, entry.layerId);
129
132
  tileset.style = createMapZeroCesiumStyle(styleJson, {
130
133
  layerId: entry.layerId,
@@ -162,6 +165,9 @@ export async function createMapZeroCesiumTilesets(options) {
162
165
  * contextEdgeGuardPixels?: number,
163
166
  * contextWorkerUrl?: string | URL,
164
167
  * buildings3d?: boolean,
168
+ * tilesetMaximumScreenSpaceError?: number,
169
+ * tilesetCacheBytes?: number,
170
+ * tilesetMaximumCacheOverflowBytes?: number,
165
171
  * zoomTo?: boolean,
166
172
  * applyDefaultSceneStyle?: boolean,
167
173
  * sceneStyle?: Record<string, unknown>,
@@ -431,13 +437,14 @@ function shouldCreateContextOverlay(manifest, options) {
431
437
  /**
432
438
  * @param {Cesium3DTileset} tileset
433
439
  * @param {string} layerId
440
+ * @param {{ tilesetMaximumScreenSpaceError?: number, tilesetCacheBytes?: number, tilesetMaximumCacheOverflowBytes?: number }} options
434
441
  */
435
- function configureCesiumTilesetStreaming(tileset, layerId) {
442
+ function configureCesiumTilesetStreaming(tileset, layerId, options = {}) {
436
443
  if (layerId !== 'buildings') {
437
444
  return;
438
445
  }
439
446
 
440
- tileset.maximumScreenSpaceError = 24;
447
+ tileset.maximumScreenSpaceError = finiteNumber(options.tilesetMaximumScreenSpaceError, 24);
441
448
  tileset.skipLevelOfDetail = true;
442
449
  tileset.baseScreenSpaceError = 1024;
443
450
  tileset.skipScreenSpaceErrorFactor = 16;
@@ -450,8 +457,8 @@ function configureCesiumTilesetStreaming(tileset, layerId) {
450
457
  tileset.dynamicScreenSpaceErrorFactor = 4;
451
458
  tileset.preloadWhenHidden = false;
452
459
  tileset.preloadFlightDestinations = false;
453
- tileset.cacheBytes = 256 * 1024 * 1024;
454
- tileset.maximumCacheOverflowBytes = 128 * 1024 * 1024;
460
+ tileset.cacheBytes = finiteNumber(options.tilesetCacheBytes, 768 * 1024 * 1024);
461
+ tileset.maximumCacheOverflowBytes = finiteNumber(options.tilesetMaximumCacheOverflowBytes, 512 * 1024 * 1024);
455
462
  }
456
463
 
457
464
  /**
@@ -567,3 +574,13 @@ function colorFromOption(Cesium, value, fallback) {
567
574
  function clamp01(value) {
568
575
  return Math.max(0, Math.min(1, Number.isFinite(value) ? value : 1));
569
576
  }
577
+
578
+ /**
579
+ * @param {unknown} value
580
+ * @param {number} fallback
581
+ * @returns {number}
582
+ */
583
+ function finiteNumber(value, fallback) {
584
+ const number = Number(value);
585
+ return Number.isFinite(number) ? number : fallback;
586
+ }