-
Notifications
You must be signed in to change notification settings - Fork 342
Open
Description
About Error
When initializing CesiumJS through OL-Cesium (olcs) and awaiting
Cesium.createOsmBuildingsAsync() or Cesium.Cesium3DTileset.fromIonAssetId(id), the application throws a runtime error:
RangeError: Invalid array length
at new DynamicEnvironmentMapManager (...)
at new Cesium3DTileset (...)
at Cesium3DTileset.fromUrl (...)
at async Module.createOsmBuildingsAsync (...)
1. Error occurs in case: Cesium.createOsmBuildingsAsync()
Here is the documented usage from the Cesium API reference:
try {
const tileset = await Cesium.createOsmBuildingsAsync();
viewer.scene.primitives.add(tileset);
} catch (error) {
console.log(`Error creating tileset: ${error}`);
}Minimal Reproduction (React + TypeScript) - (Cesium.createOsmBuildingsAsync())
import { useEffect } from "react";
import useMap from "../MapInitialization/MapContext/useMap";
import OLCesium from "olcs";
import * as Cesium from "cesium";
Cesium.Ion.defaultAccessToken = import.meta.env.VITE_CESIUM_ACCESS_TOKEN;
const CesiumInstance = () => {
const { map, setOlCesium, olCesium } = useMap();
useEffect(() => {
if (!map || !setOlCesium) return;
const olCesium = new OLCesium({ map }); // Openlayers instance of `map` from another component used to initialize olCesium
setOlCesium(olCesium);
return () => {
olCesium.setEnabled(false);
olCesium.destroy();
};
}, [map, setOlCesium]);
useEffect(() => {
if (!olCesium) return;
const scene = olCesium.getCesiumScene();
(async () => {
try {
scene.terrainProvider = await Cesium.createWorldTerrainAsync();
// ❌❌❌ Throws RangeError here
const osmBuildings = await Cesium.createOsmBuildingsAsync();
scene.primitives.add(osmBuildings);
} catch (err) {
console.error("Failed to init Cesium tileset:", err);
}
})();
}, [olCesium]);
return null;
};
export default CesiumInstance;2. Error occurs in case: Cesium.Cesium3DTileset.fromIonAssetId(id)
Here is the documented usage from the Cesium API reference
try {
const tileset = await Cesium.Cesium3DTileset.fromIonAssetId(id);
scene.primitives.add(tileset);
} catch (error) {
console.error(`Error creating tileset: ${error}`);
}Minimal Reproduction (React + TypeScript) - (Cesium.Cesium3DTileset.fromIonAssetId(id))
import { useEffect } from "react";
import useMap from "../MapInitialization/MapContext/useMap";
import OLCesium from "olcs";
import * as Cesium from "cesium";
Cesium.Ion.defaultAccessToken = import.meta.env.VITE_CESIUM_ACCESS_TOKEN;
const CesiumInstance = () => {
const { map, setOlCesium, olCesium } = useMap();
useEffect(() => {
if (!map || !setOlCesium) return;
const olCesium = new OLCesium({ map });
setOlCesium(olCesium);
return () => {
olCesium.setEnabled(false);
olCesium.destroy();
};
}, [map]);
useEffect(() => {
if (!olCesium) return;
const scene = olCesium.getCesiumScene();
(async () => {
try {
scene.terrainProvider = await Cesium.createWorldTerrainAsync();
// ❌❌❌ Throws RangeError here
const testTileSet = await Cesium.Cesium3DTileset.fromIonAssetId(2509391);
scene.primitives.add(testTileSet);
} catch (err) {
console.error("Failed to init Cesium tileset:", err);
}
})();
}, [olCesium]);
return null;
};
export default CesiumInstance;Environment
| Package | Version |
|---|---|
| Cesium | 1.134.1 |
| OL-Cesium (olcs) | 2.22.1 |
| OpenLayers | 10.5.0 |
Metadata
Metadata
Assignees
Labels
No labels