Skip to content

[Bug] MapboxOverlay with beforeId crashes the map when the referenced layer is unloaded #10309

@aentwist

Description

@aentwist

Description

For MapLibre dark mode, map.setStyle is called to load a new map style. map.setStyle unloads all map layers. Following this, layers are manually readded. Is there a recommended workflow for 1. add MapboxOverlay with beforeId 2. change map style via map.setStyle?

Right now, the mysterious magic layers that deckgl creates to support the only layer I want to add via MapboxOverlay (that has a beforeId) are causing implosion when the referenced beforeId layer is unloaded. It seems to retry the reference every tick and crashes the whole map.

I have tried many ways to coax deckgl into removing its mysterious magic layers before calling map.setStyle then adding them back afterwards, but I haven't gotten anything to work - map.removeControl, mapboxOverlay.setProps({ layers: [] }), or setProps with the layer beforeId: undefined.

Flavors

  • Script tag
  • React
  • Python/Jupyter notebook
  • MapboxOverlay
  • GoogleMapsOverlay
  • CARTO
  • ArcGIS

Expected Behavior

Any of:
No error (implies that this is fixable in an ideal way)
Not retrying the reference every tick and crashing the map (probably MapLibre)
A workflow for unloading referenced layers (realistic fix)
A documented workflow for unloading referenced layers (+documentation)
Less mysterious magic (wishful thinking for making simple such complex abstractions)

Steps to Reproduce

  1. Add MapLibre layer
  2. Add MapboxOverlay with beforeId referencing that layer
  3. Call map.setStyle

If this isn't enough I can try to work it a little harder.

Environment

  • Framework version: @deck.gl/core, @deck.gl/mapbox 9.3.2
  • Browser: Firefox
  • OS: Windows

Logs

Error: Cannot move layer "deck-layer-group-before:conus-mask" before non-existing layer "conus-mask".
    moveLayer style.ts:1174
    moveLayer map.ts:2707
    resolveLayerGroups resolve-layer-groups.ts:85
    _resolveLayers mapbox-overlay.ts:161
    _handleStyleChange mapbox-overlay.ts:241
    fire evented.ts:132
    Map map.ts:823
    fire evented.ts:132
    fire evented.ts:147
    update style.ts:795
    _render map.ts:3451
    triggerRepaint map.ts:3617
    r2 browser.ts:14
    frame browser.ts:12
    triggerRepaint map.ts:3611
    _update map.ts:3381
    Map map.ts:822
    fire evented.ts:132
    fire evented.ts:147
    update style.ts:795
    _render map.ts:3451
    triggerRepaint map.ts:3617
    r2 browser.ts:14
    frame browser.ts:12
    triggerRepaint map.ts:3611
    _update map.ts:3381
    Map map.ts:822
    fire evented.ts:132
    fire evented.ts:147
    update style.ts:795
    _render map.ts:3451
    triggerRepaint map.ts:3617
    r2 browser.ts:14
    frame browser.ts:12
    triggerRepaint map.ts:3611
    _update map.ts:3381
    Map map.ts:822
    fire evented.ts:132
    fire evented.ts:147
    update style.ts:795
    _render map.ts:3451
    triggerRepaint map.ts:3617
    r2 browser.ts:14
    frame browser.ts:12
    triggerRepaint map.ts:3611
    _update map.ts:3381
    Map map.ts:822
    fire evented.ts:132
    fire evented.ts:147
    update style.ts:795
    _render map.ts:3451
    triggerRepaint map.ts:3617
    r2 browser.ts:14
maplibre-gl.js:482:48

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions