RFC: GlobeView projection continuity and smooth Mercator fallback #10343
Replies: 3 comments 2 replies
|
Thanks for compiling this. It's helpful context since its been a while since I've thought about this.. I'm most interested in pursuing 3, a true globe-to-mercator projection morph. The other API changes proposed here seem like bandaids and unnecessary if the view isn't hard-swapped under the hood. In other words, if we do 3, how much of 1 and 2 is necessary? It's unclear what 4 means since I believe it'd depend on the earlier parts.. is there something concrete to consider right now, or is it moreso a guiding principle?
Demos that show the issues would be super valuable here. A lot of these issues are only visible in transitions or on mobile, which our existing demos don't cover. Feel free to add to |
Prompts to initiateBelow I have included the prompts generated by GPT5.5 extra-high to initiate this pursuit - open to feedback - adjustment |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Direction
After discussion, this RFC should focus on one direction: a true globe-to-mercator projection morph inside deck.gl.
The smaller ideas from the original post, such as
webMercatorFallbackZoom, fallback ranges, or transition-hold props, are useful only as temporary scaffolding. IfGlobeViewno longer hard-swaps viewport/projection behavior under the hood, most of those props should not be part of the long-term public API.The v10/view-layout work is also not a separate solution here. It is a design constraint: whatever we build should fit cleanly into future view architecture, but this RFC is specifically about projection/camera/layer continuity.
Problem
GlobeViewneeds close-zoom Mercator-like performance, especially on mobile, but a hard switch between globe and Mercator behavior creates visible and behavioral discontinuities.The cases that matter most:
FlyToInterpolatorand camera transitions crossing the globe/mercator boundary.unprojectreturning coherent results during the transition.TileLayer,TripsLayer, paths/icons/text, and widgets continuing to behave as one stable view.The target behavior is closer to Cesium/Mapbox-style adaptive projection: a shared projection-transition state that the renderer, controller, transitions, picking, and tile selection can all read.
Proposal
Add a deck-level projection transition state for
GlobeView, conceptually something like aprojectionBlend/morphTimewhere one end is globe projection and the other end is close-zoom Mercator behavior.The important properties of the design:
GlobeView/ layer tree; no consumer-levelGlobeView↔MapViewswap.project,unproject, picking, controller interactions, andFlyToInterpolatoruse the same projection-transition semantics.TileLayer/TerrainLayertile selection and cache policy are defined early, not treated as a later integration detail.A possible final API shape could be:
The exact prop names are less important than avoiding a hard projection swap and making the transition state a first-class deck concept.
Near-term PR stack
Demo/repro first
test/appsdemo runnable withstart-local.TileLayer,TripsLayer/path animation, icons/text, zoom/compass/layer-list style widgets.Projection morph plumbing
Shader + CPU projection MVP
project,unproject, and picking semantics coherent for the supported subset.TileLayer early
Controller and transition continuity
Broaden layer coverage and docs
Existing context
globeprojection #7920 discusses Mapbox/MapLibre globe overlay integration and the need for a more generalized projection system.Open questions
TileLayerchoose current/target/coverage tiles during the morph?COORDINATE_SYSTEM.LNGLAT?All reactions