Skip to content

Invalid array length when awaiting for: Cesium.createOsmBuildingsAsync() and Cesium.Cesium3DTileset.fromIonAssetId(id) #1299

@Zoom1611

Description

@Zoom1611

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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions