SDK JS
    Preparing search index...

    What unifyLayers returns. Members keep rendering themselves; this drives them.

    interface UnifiedLayer {
        id: string;
        layers: readonly object[];
        dispose(): void;
        getAvailableColorModes(): string[];
        getClassifications(): { code: number; count?: number; label?: string }[];
        getExtent(): LayerExtent | null;
        getHeightRange(): [number, number] | null;
        getProfile(): string | null;
        pickPosition(
            x: number,
            y: number,
            snapRadiusPx?: number,
        ): PickedPosition | null;
        progress(): number;
        reallocate(): void;
        sampleSurfaceHeights(
            points: readonly { lat: number; lng: number }[],
            opts?: SurfaceSampleOptions,
        ): (number | null)[];
        setBudget(
            opts: { maxBytes?: number; maxPoints?: number; maxSplats?: number },
        ): void;
        setShadows(on: boolean): void;
    }
    Index

    Properties

    id: string

    Stable id, for a settings panel header.

    layers: readonly object[]

    The members, in the order given.

    Methods

    • Stop listening to the map. Members are untouched.

      Returns void

    • INTERSECTION of the members' colour modes — a mode only some can serve would render the rest black.

      Returns string[]

    • Union of the members' LAS classes, counts summed.

      Returns { code: number; count?: number; label?: string }[]

    • Union of the members' footprints, or null while none have resolved.

      Returns LayerExtent | null

    • Min/max height across the members, or null when none report one.

      Returns [number, number] | null

    • The members' shared profile ('splat' / 'pointcloud'), or null when they differ or are undecided.

      Returns string | null

    • The NEAREST hit across the members, by window depth — satisfies PositionPickable, so the group can go straight into MeasurementWidget.pickLayers as a single entry.

      Parameters

      • x: number
      • y: number
      • OptionalsnapRadiusPx: number

      Returns PickedPosition | null

      Declared here, not left to the member intersection, because the group ALWAYS implements it: reducing across members is the whole job. Leaving it optional made a unifyLayers result fail to satisfy PositionPickable, which is precisely the call the reduce exists for.

    • Mean streaming progress across members that report it, 0..1.

      Returns number

    • Re-run the allocation now (normally driven by the map's camera events).

      Returns void

    • The TOPMOST surface per point across the members — satisfies SurfaceSampleable.

      Parameters

      Returns (number | null)[]

    • Split a total resident-memory ceiling across the members by what is in view.

      Parameters

      • opts: { maxBytes?: number; maxPoints?: number; maxSplats?: number }

      Returns void

    • Turn shadow casting on or off for the WHOLE group.

      Parameters

      • on: boolean

      Returns void

      Not a fan-out. The shadow coordinator draws every registered caster's resident tiles into every cascade, so switching shadows on across a group multiplies that by the member count — ten campus areas, fifty-seven suburbs — with nothing bounding it. A group that fans this out blindly is asking the GPU to shadow the whole city to light the street you are standing on.

      So the group owns the policy the same way it owns memory: on is what you WANT, and each member casts only while its footprint is in view. Members are disjoint in the cases this exists for, so most of them are contributing nothing to the frame anyway.