Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: mapbox/mapbox-gl-js
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v1.13.3
Choose a base ref
...
head repository: mapbox/mapbox-gl-js
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v2.0.0
Choose a head ref

Commits on Nov 18, 2020

  1. ensure imag datauri is released (#10118)

    Co-authored-by: Vladimir Agafonkin <agafonkin@gmail.com>
    Arindam Bose and mourner authored Nov 18, 2020

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    59c5425 View commit details

Commits on Nov 21, 2020

  1. CP changelog changes from 1.13 release (#10125)

    Arindam Bose authored Nov 21, 2020

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    3136a53 View commit details

Commits on Dec 8, 2020

  1. Copy the full SHA
    85f124d View commit details
  2. DEM terrain: specification and implementation (internal-4)

    * DEM terrain: spec and support for raster.
    
    * Terrain render tests. Source cache used only for terrain loads lower res.
    
    - Fix the code making the source cache be reused for hillshade and terrain:
     If reused, load only hillshade required resolution. If only for terrain,
     load lower resolution sufficient for terrain. To be tweaked.
    
    - Render tests that use terrain (no hillshade) need lower res tiles. Added
     to the tests.
    
    - Orthogonal issue: test getImage request didn't have cancel() (should as it is
     of type Cancellable).
    
    * Map.setTerrain API
    
    * 3d terrain: DEM error and lower tile zoom overlap render test
    
    * 3D terrain render test: reproducible overlap issue
    
    Current approach is problematic as it doesn't resolve low zoom tiles  error overlapping on top of near zoom in every case. Different type of rendering terrain is needed - to be copied from draped approach.
    
    * Terrain render to texture
    
    For each rasterized tile, multiple framebuffers are used: while the prototype implemented rendering all the rasterized layers first to one framebuffer and then rendering all the non rasterized layers on top of it, to the approach here keeps the order of  layers: continuous sequence of rasterized layers gets rendered to the same framebuffer, the framebuffer gets rendered to the screen, after that one or more non-rasterized layers get rendered and so on...
    This keeps the layer order but requires 6 time more GPU memory for color attachments for street style used in debug terrain-debug.html page. Although this approach is not final and benchmarking will tell if it is production code candidate, it is following style order and needs to be implemented and analyzed.
    
    * Raster and render-tests/terrain/error-overlap fixes.
    
    Fix raster shader:
    - raster render to texture and drape over terrain fixed not to have holes and issues with satellite.html and render tests.
    - remove hacky stencil approach in draw_raster (stencil out > 3 tile zoom levels) to disable overlap. Instead, one proxy tile gets one raster piece and proxy tiles are not overlapping.
    - append deeper tile cover to disable holes while zooming out.
    - split u_tl_scale_dd_dem to self documenting uniforms.
    
    render-tests/terrain/error-overlap:
    Test verifies fix for multiple overlap issues when children have significantly different values compared to parent. Also, it verifies tile skirt as data is setup so that we would see holes if no tile skirts are used.
    
    * Remove multiple framebuffers used for one tile
    
    The approach taken was to cache every tile framebuffer and one tile could have multiple: for every continuous segment of layers that get draped to texture.
    Measurements show this to be extremelly slow as e.g. street style would result to 7 framebuffers per tile (e.g. road, bridge symbols divide draped layers to segments).
    
    This is removed here as well as any attempt to cache tile rendering results with idea to avoid tile rendering if it didn't change. This will get introduced in later patches.
    
    * Hillshade support
    
    After proxy implementation, it got simple compared to prototype: 2d ortho mapping of hillshade tile to proxy tile is defined in proxy.posMatrix and that is sufficient for rendering prepred hillshade texture to proty tile's fbo.
    
    * Line layer support
    
    Order of layers defined in style is preserved when rendering.non-draped layers (e.g. symbols) split layer list to draped layers sublists that get rasterized and then composited to existing tile render over terrain. After such, draped sublist, symbol draw to screen follows and the new draped layers raster.
    
    * Testing and fix for render to texture & line-translate using zero elevation
    
    Added render tests use 0 elevation and we expect to get the same result when render to texture is used as without terrain. Expectations are created using style without terrain.
    
    Render tests expose issue with aligned matrix usage in raster: added render tests, without fix in draw_raster.js, were suffering from pixel fraction offset. Another issue (incorrect line width is still noticeable) and tests are failing.
    
    * Fix issue with failing render test on Intel
    
    non-terrain shader was created with terrain define in painrter.js, nothing HW dependent.
    
    Update expectations given that previous patcvh stopped using aligned matrix for terrain.
    
    * Line layer fix width and opacity
    
    Disable distant line fade (v_gamma_scale) aliasing approach when using render to texture. This way we et almost identical results when rendering to texture vs immediate render mode for lines.
    Cleanup in terrain.js (symbol related code from prototype should not be included in this PR).
    
    * Rebase terrain render tests
    
    following the explanation here: internal-4#issuecomment-597844847
    
    * Refactor terrain source update
    
    Terrain source cache update shopuld happen before style driven update (as update there is skipped if terrain updates source cache).
    This ensure also that visible coordinates are not altered from within terrain cache update, as it was before: no need to check if tile is present.
    Additional deep cover for terrain is marked as covered (SourceCache._coveredTiles) to avoid hillshade prepare preparing these coordinates, too.
    
    * ProxySourceCache documentation
    
    Extend mapping of higher zoom level coordinates to proxy coordinates to all types of souerce caches.
    
    * overlap handling approach not needed anymore
    
    * Stencil mode for raster overlap and raster transparency support
    
    * Processed review comments
    
    Processed comments mapbox-gl-js-internal/4#discussion_r393836986. Thanks @karimnaaji.
    
    * Review comments processed
    
    Comments internal-4#pullrequestreview-375999464 processed.
    Thanks @mpulkki-mapbox.
    
    * Performance fix on zoom > 20
    
    Making proxy source cache to have  maxzoom equal to map's maxzoom ensures that framebuffers always get the same size.
    
    * Review comments fix.
    astojilj authored and karimnaaji committed Dec 8, 2020
    Copy the full SHA
    b879f83 View commit details
  3. Elevate camera over terrain (internal-9)

    * Elevation: CPU side access internal API.
    
    Unit test creates DEM tiles programatically, covers wrap, tile loading and elevation interpolation.
    
    * Elevate camera for camera center elevation
    
    Enable variable Z tile cover for terrain, regardless the pitch.
    Modify far plane calculation to avoid clipping the content.
    Modify LOD to include all the tiles between camera and center (no holes in near) by using MAX_VALUE for height in all collision bounding boxes. Temporarily as it is to be replaced by height.
    Render tests had tile 15 in back replaced by tile 14 as it gets out of tile cover otherwise.
    
    * Fix initial state
    
    If terain tiles get loaded when map is already displayed, it is needed to run Transform._calcMatrices. Move center calculation and recalculate matrices is center elevation changed.
    astojilj authored and karimnaaji committed Dec 8, 2020
    Copy the full SHA
    a4ed58c View commit details
  4. Symbols placement and rendering on terrain. Terrain exaggeration. (in…

    …ternal-10)
    
    * box collision and aligned to viewport symbols
    
    Placement on terrain for symbols aligned to viewport. CollisionBox gets elevation of anchor.
    TODO: occlusions of symbols by terrain.
    Render test added is to be changed after occlusion by terrain work.
    
    * Road label placement and rendering
    
    Doesn't support labels that are map aligned (pitch with map). Those are to be draped.
    
    * road label placement render test. Exaggeration styling property.
    
    Terrain exaggeration is implemented here as it simplified work on tweaking hand drawn terrain elevation and occlusion of road labels.
    Unit test for terrain styling and validation.
    
    * Occlusion for symbols
    
    Render depth to texture and sample depth texture to check if symbol anchor is occluded or not. If ocludded, move all symbol vertices out of view volume.
    
    Helper code used to develop this: https://gist.github.com/astojilj/abd2fd384e084ec5233cc09e59deab76 is not included in code base as additional "debugging" code:
    behavior is covered by render-tests and depth framebuffer render to color texture can be inspected using external tools.
    
    Assert that elevation is taken into account for all placement.
    
    * Fix review comments, flakiness issues with render tests on CI.
    
    Added render test exposed assert with vertical text placement.
    
    * collision render test: reduce complexity
    astojilj authored and karimnaaji committed Dec 8, 2020
    Copy the full SHA
    3806371 View commit details
  5. Sky layer implementation and spec (internal-5)

    Add sky layer, using both gradient and atmosphere sky types.
    
    * Add scattering shader and offscreen capture render pipeline
    - Add cubemap geometry and UVs
    - Add demo page
    * Enable face culling during skybox passes
    * WIP style spec skybox layer
    * v0 of skybox style layer
    * v0 of horizontal skybox gradients
    * Enforce depth fail on fragment covered by the ground plane
    - Setup depth states for skybox rendering
    - Reorder draw calls for skyboxes to be drawn after opaque and before translucent: This forces the skybox drawn
    fragment to be discarded during depth testing, since the skybox vertices depth is the maximum possible depth value
    * Dither gradient shader
    * azimuth gradients
    * v0 of radial gradients
    * Remove linear gradients and associated properties
    * Frustum culling for skybox
    * Prefix stylespec props with sky- instead of skybox-
    - Rename skybox-radial-extent to sky-radial-progress for consistency with
    line-progress
    - Rename skybox-center-* to sky-sun, to be more explicit about what it
    represents
    - Rename SkyboxLayer to SkyLayer for consistency with specs properties
    - Rename cubemap to skybox for consistency
    * Rename 'atmospheric' style specs to 'atmosphere'
    * Add a dedicated debug page for skybox
    * Add style specs prop 'sky-opacity'
    * Reduce memory footprint of atmospheric skybox capture
    Change the format from RGBA to RGB, since the alpha channel is unused
    * skybox.html: Fade out sky as zooming out
    * Consolidate sun direction calculation
    - Same code path for gradient and scattering shader capture
    - Normalize direction in the CPU instead of fragment shader for gradient
    - Remove SunCalc dependency: We decided that the user can directly use
    that library outside of mapbox gl, and plug the results in the style spec
    * Add degToRad, radToDeg helper functions
    * Move sun disk and dithering to runtime scattering shader
    - Moving this in the runtime shader allows us to vastly reduce the size of the
    framebuffers used to render the scattering algorithm (1024x1024 -> 128x128);
    this is a reduction of ~64 in pixel processing
    * Test adding sky to the terrain demo
    * Increase default max pitch to 85 to allow for skybox render tests
    * Add sky-atmosphere-* style spec
    * Better mix sun disk with sky color
    - Document sun angular angle
    - Improve smoothstep antialiasing
    * Collapse azimuth and angle into a singular sky-sun-direction property
    * Add some unit tests
    Add render and some unit tests
    Update render tests
    * Make better utilization of texture space
    Prevent wasting texture space for areas that are not visible after the cubemap generation
    * Increase threshold for fragile terrain test
    * Temporal and chromatic dithering
    * Render tests for gradients
    * Adjust precision qualifiers for mobile
    * Premultiply sky-opacity to prevent blending overflow
    * Revised docs
    * Wrap frame counter
    
    Co-authored-by: Arindam Bose <arindam.bose@mapbox.com>
    karimnaaji and Arindam Bose committed Dec 8, 2020
    Copy the full SHA
    6ce2de8 View commit details
  6. Terrain rendering optimizations. Vector tiles clipping. (internal-12)

    * Depth first tile enumeration and rendering. Optional optimization drape all and then place symbols while zooming/panning the map.
    * Overlap handling / clipping for vector tiles
    * terrain-debug.html debug option for drape first. simplify occlusion render-test (orthogonal change).
    * Terrain RTT framebuffer pool size: 20 -> 5 as it behaves the best on desktop and iPhone X.
    * Simple FPS counter for terrain-debug. Continuous repaint option ad FPS count in UI.
    * A quick attempt to fix flaky collision-occlusion render test.
    astojilj authored and karimnaaji committed Dec 8, 2020
    Copy the full SHA
    77f5306 View commit details
  7. Fix horizon frustum culling for skybox

    Cleanup to always use frustum ray-intersections
    
    Address review comments
    
    Use vertical half-fov that accounts for padding
    
    Add unit tests
    
    Fix lint errors
    Arindam Bose authored and karimnaaji committed Dec 8, 2020
    Copy the full SHA
    6cb8def View commit details
  8. fixing the precision qualifiers and also adding the terrain prelude f…

    …or all uniforms (internal-26)
    sgolbabaei authored and karimnaaji committed Dec 8, 2020
    Copy the full SHA
    de194e0 View commit details
  9. Copy the full SHA
    8b32625 View commit details
  10. Copy the full SHA
    cef95aa View commit details
  11. Fill extrusions: terrain and flat roofs

    For each building, centroid coordinate is calculated and fed to vertex shader, for each vertex.
    If vertex is on top (roof or wall top), sample centroid elevation.
    If centroid elevation lower than vertex elevation, roof at least 2.5 meters height above base.
    Additional check for isEntirelyOutside also for roof area to hide occasional artefacts.
    The most advanced part is handling behavior on tile edges:
    In such case, both pieces of the building need to have the same centroid (in order to have uniform roof elevation). Instead of calculating centroid, selected point is center of the area on tile edge where both building parts overlap (intersect tile edge).
    
    While sampling for roof, use ruggedness to decide on roof elevation
    
    dem to meter and terrain slope. Roof per feature, not ring.
    
    Fixes issue on borders when buildings have multiple disconnected pieces (and that happens when on border).
    Free 3 bits of centroid x and y, to be used for building size in follow up patch.
    
    Pass building size for centroid roof calculation
    
    Lower bottom edge (if on ground) 5m to hide space under walls.
    
    Get wider sample, if there is space, to get better slope estimate.
    
    pattern and render tests
    
    Abandon flast roofs on tile border approach
    
    It is complicated, expensive, leading to unpredictive results. This would need to include joinging pieces of buildings and sampling dem on cpu side
    
    Make centroid vertex array optional
    
    Enable flat roof calculation and use the memory storage only if and when terrain gets enabled. Render tests enable terrain on start or dynamically after load.
    
    Ensure 0 during a_centroid_pos attribute buffer initialization
    
    When activating terrain, or for fill extrusions that don't need flat roofs, centroidVertexBuffer is null and vertex attrib array is disabled. Setup the generic state when the vertex attrib array is disabled: ensure it is 0 as it could be reset by 3rd party custom layer.
    
    Codegen for fill extrusion centroid attributes
    astojilj authored and karimnaaji committed Dec 8, 2020
    Copy the full SHA
    1422c33 View commit details
  12. Terrain LOD, based on distance to camera

    First version is sampling center of every tile, no AABB for tiles yet. WIP.
    2D LOD also changed to use distance to camera.
    Sharper LOD drop for distant tiles.
    3rd coordinate is in meters: updated frustum clipping.
    Debug draw: when terrain is enabled, draw proxy tiles, separatelly elevating square corners.
    _findTileCoveringTileID changed to use visible and loaded tiles. Optimizations with key calculation and lookup bring updateTileBinding from 5ms -> less than 2ms for the benchmark. Further optimizations (reusing previous pass binding) are possible.
    
    LOD: batch elevation for tile. Lint, flow and tests fixes.
    
    Fetch elevation for five tile points in one call. No additional buffer:
    
    Minor render test modifications, partly orthogonal: use lower tilt where possible for performance reasons.
    Extreme ruggedness > 900m for 1km tile is rare: https://download.osgeo.org/qgis/doc/reference-docs/Terrain_Ruggedness_Index.pdf
    We could use const maxRuggedness = 0.1 / meterToTile additionally: for now, sampling tile corners and center with no additional buffer: the idea is to identify cases and amount of maxRuggedness buffer needed in follow up patches.
    
    LOD retain logic: use lower than cover zoom children + various tests
    
    Unit test tile cover test when using elevation data (transform_test.js).
    Toggling terrain on off fix and render test. Earlier, sourcecache._cache tiles were also used and there was no case that center elevation is not up to date due to sourceCache not updated. terrain/raster verifies toggling on off.
    
    Document tile cover and cut off for distance angles. Remove shortcuts / premature optimization.
    
    Document and refactor distToSplitScale
    
    Also revert expectation change for some of the terrain render tests - works like in original patch.
    astojilj authored and karimnaaji committed Dec 8, 2020
    Copy the full SHA
    9e2b094 View commit details
  13. Cleanup shader caching code and define handling, allow for injection …

    …of custom defines for a given layer
    
    Add some documentation
    
    Refactor circle to use dynamic defines
    
    Fix lint errors
    
    Flow: 1 Arindam: 0
    
    Dont use .includes
    
    docs-lint rules are weird
    
    Update src/render/painter.js
    
    Co-authored-by: Karim Naaji <karim.naaji@gmail.com>
    Arindam Bose and karimnaaji committed Dec 8, 2020
    Copy the full SHA
    819333d View commit details
  14. fix limited camera movement with terrain (internal-33)

    Setting lower zoom to transform sometimes leads to center change (in constrain function). Instead, clone transform instead of restoring the same object to avoid side effects. Remove unecessary _calcMatrices invocation from Transform.clone().
    
    Fixes: mapbox-gl-js-internal/issues/32
    astojilj authored and karimnaaji committed Dec 8, 2020
    Copy the full SHA
    46aa03e View commit details
  15. Fix flickering 3d terrain internal-31

    The cause was in broken logic of _findTileCoveringTileID: in one of the paths it didn't check if returned tile is loaded (as it should lookup for renderable tiles only).
    Moved proxy source update from updateTileBinding (happens on every render frame) to update (called when all other sources are updated).
    
    Couldn't figure out economical way to make useful and reproducile test for this. Instead assert inconsistencies in lookup cache. Measured and this even seems beneficial (as proxy cache is not reset on every render call).
    
    Fixes: internal-31
    astojilj authored and karimnaaji committed Dec 8, 2020
    Copy the full SHA
    bf1b4d1 View commit details
  16. Heatmap on 3D terrain

    Include coordinate elevation in calculating point proxymity: even points that are distant horizontally, could get close due to pitch and their different elevation.
    Heatmap circles are porallel to ground (following terrain for every fragment withing the  radius seemed wrong and performance sensitive).
    The result looks nice (anyway better than to have the coordinates anchored to sea level) and it follow 3d terrain.
    astojilj authored and karimnaaji committed Dec 8, 2020
    Copy the full SHA
    fb1a8d4 View commit details
  17. ImageSource 3D terrain support

    - [x] render test for image
    - [x] image over wrap line render test, with and without terrain
    - [x] video and image debug page
    
    Fixes: internal-3d-67
    astojilj authored and karimnaaji committed Dec 8, 2020
    Copy the full SHA
    d6154c6 View commit details
  18. Performance, lookup and distance to center sorting fixes (internal-42)

    * Performance, lookup and distance to center sorting fixes
    
    Performance: use elevation when calculating cover for all sources. This reduces nubler of tiles processed.
    Lookup: reset lookup cache after every source cache update: tiles might get removed and lookup cache state is invalid. This caused issue if using getElevation during update.
    Distance to center sorting fixes: distance to center didn't take wrap into account and case when tile zoom < max zoom: distance to center sorting was working in most of the cases except in the one here: thanks @mpulkki-mapbox.
    
    * Disable tilecover elevation usage for the elevation
    
    ... this is moved to a separate PR. Requires removal of deep cover, backfill of holles, morphing while loading etc.
    flaky and failing render test fixes.
    
    * A bit less tile to load around 60-73 (the heaviest range) pitch.
    astojilj authored and karimnaaji committed Dec 8, 2020
    Copy the full SHA
    6a55793 View commit details
  19. Update and revive size checker script (internal-23)

    Arindam Bose authored and karimnaaji committed Dec 8, 2020
    Copy the full SHA
    081f7dc View commit details
  20. Fix broken shader statement on specific hardware (internal-45)

    * Fix broken shader statement on arm mali architecture
    internal-38
    For unknown reason exp(vec2) did not work on arm mali-t760
    This is fixed by replacing for exp(float) instead.
    
    * Fix incorrect comment
    
    * Add comment about the issue
    karimnaaji committed Dec 8, 2020
    Copy the full SHA
    f03dbbd View commit details
  21. Fix out of order problem with size checker (internal-47)

    Arindam Bose authored and karimnaaji committed Dec 8, 2020
    Copy the full SHA
    b5b7389 View commit details
  22. Fixup rebase conflict

    karimnaaji committed Dec 8, 2020
    Copy the full SHA
    9788623 View commit details
  23. Copy the full SHA
    6672b7b View commit details
  24. symbols that pitch with map: rendering and collision (internal-48)

    * symbols that pitch with map: rendering and collision
    
    Sample elevation per vertex when rendering. This makes every glyph aligned to terrain surface. Pass inverted label plane matrix to convert vertex pos from label plane to tile coordinates.
    Return and interpolate elevation along path for each glyph. This is done only for pitchwithMap case for proper collision calculation. Debug render (delayed update) is not covered here: that has low priority.
    
    Fixes: internal-3d-81
    
    * terrain: fix regression with overscaled tile id returned in cover.
    
    This was submitted in internal-16
    
    Revert original expectations for collision-lines-occlusion and line-pattern/pitch-terrain.
    
    text-pitch-alignment/map-text-rotation-alignment-map-terrain is modified to expose the regression (otherwise mopst of the overscale symbols are not visible).
    astojilj authored and karimnaaji committed Dec 8, 2020
    Copy the full SHA
    9c62d41 View commit details
  25. Copy the full SHA
    dbc378b View commit details
  26. Copy the full SHA
    2160667 View commit details
  27. Optimize DEM cover, clear render tests (internal-52)

    * Couple terrain dem cover to proxy cover
    
    Reduce number of DEM tiles loaded: previously used deep cover wasn't only there to hide holes when zooming in out but was also masking the issue that for dem tiles of size 256 and 128 we were not loading optimal tile cover that corresponds to grid size (as deep cover covered range whole zoom range). Deep cover is here removed.
    
    Couple proxy and terrain tile cover: this should be a minimum od dem tiles needed for given grid size. To make sure it is the same always, make roundZoom (false) behavior of terrain tile to act the same as for proxy cover.
    
    Remove complexity of approach that was sharing high res hillshade also for terrain: it is never the case that the same tile used for hillshade is optimal tile for terrain and while deep cover was enabling this, there is no saving if using same source cache for both terrain and hillshade. The approach / feature would be formulated like this:
    1. if using same dem source for terrain and hillshade, hillshade comes for free but uses terrain dem zoom level (terrain-debug.html page is modified to demo this).
    2. if defining separate raster-dem sources in style for hillshade and terrain, hillshade would use the same zoom level as in 2D map.
    
    Add missing dem tiles to render tests. Remove unecessary error-overlap const tiles, remove their color profile, to prevent inconsistencies when running render test in browser. Fix occasional flakyness by using dedicated set of tiles for 14.5 and 15 zoom tests.
    
    * Remove approach promoting dem source cache tiles from _cache to _tiles.
    
    Hacky approach was altering cover used for hillshade rendering and causing artifacts. cover should be managed only by source cache.
    astojilj authored and karimnaaji committed Dec 8, 2020
    Copy the full SHA
    b84d9ab View commit details
  28. Add tile coverage freeze debug toggle (internal-46)

    * Add tile coverage freeze debug toggle
    Useful to debug an navigate around LOD in distant tiles as well as surrounding area
    karimnaaji committed Dec 8, 2020
    Copy the full SHA
    e71c3ca View commit details
  29. Copy the full SHA
    a2e792d View commit details
  30. Copy the full SHA
    8adc5f2 View commit details
  31. Add 3d playground demo code (internal-59)

    * Add 3d playground demo code in repository
    
    * Fix lint
    karimnaaji committed Dec 8, 2020
    Copy the full SHA
    4bf7589 View commit details
  32. Hybrid render cache approach (internal-61)

    * Hybrid render cache approach
    
    Refactor render cache internal-54 approach to:
    - Enabled only while moving so that steady state follows style layer order. In follow ups, caching tiles in back in steady state.
    - Reuse previous render from cache always when there was no change of content that was used to render proxy tile. This enables caching in overscale space and caching all the tile (no need to wait for optimal tile to be loaded).
    - When tile reloads, clear cache.
    - Enable caching for raster layers - caching is disabled only for set of tiles tiles during fade.
    
    symbol-translucent--hillshade-translucent-terrain and symbol-translucent--line-translucent-terrain are render tests verifying proper style layer order with terrain (in stead, non-drape-first mode).
    
    Raster tests suport for forceDrapeFirst mode.
    symbol-translucent--line-translucent-terrain-draped verifies terrainDrapeFirst option: it is the same as symbol-translucent--line-translucent-terrain with expectation that symbols render is moved after all draped layers.
    real-world/sanfrancisco-terrain-draped verifies caching in multiple render calls.
    
    * dealloc render cache
    
    * Adapated version of e2e741f3f0f4f2859431341a91973ebccf2ed65e
    
    Co-authored-by: Karim Naaji <karim.naaji@gmail.com>
    astojilj and karimnaaji committed Dec 8, 2020
    Copy the full SHA
    995de42 View commit details
  33. Move symbols behind camera (internal-67)

    Joining with occlusion approach. In future, occlusion approach to join fade, after sampling multiple points.
    astojilj authored and karimnaaji committed Dec 8, 2020
    Copy the full SHA
    5f5ba4a View commit details
  34. Add render tests for text shaping related changes that needs to be ba…

    …ck ported to gl-js (internal-66)
    
    * Add new render tests
    
    * Update test ignore list
    zmiao authored and karimnaaji committed Dec 8, 2020
    Copy the full SHA
    fe909ff View commit details
  35. Optimize sky layer (internal-72)

    - Reduce number of ray marching steps right before seeing any noticeable difference
    - Non-linear UV parameterization:
     .Increase event and concentrate rays around horizon events
     .Allows to reduce texture cubemap sizes to 32x32 pixesl
    karimnaaji committed Dec 8, 2020
    Copy the full SHA
    585b25f View commit details
  36. Dashed and pattern lines with line-metrics enabled sources (internal-62)

    * a_linesofar is a separate float attribute for line programs
    
    Thus we're keeping it accurate.
    
    * [render tests] Add line-dasharray/line-metrics
    
    * [render tests] Add line-dasharray/zoom-history-line-metrics
    
    * [render tests] Add line-pattern/line-metrics
    
    * [render tests] Update results
    
    * Simplification
    
    Co-authored-by: Karim Naaji <karim.naaji@gmail.com>
    pozdnyakov and karimnaaji committed Dec 8, 2020
    Copy the full SHA
    74d05bb View commit details
  37. Circle layer integration with terrain (internal-34)

    Arindam Bose authored and karimnaaji committed Dec 8, 2020
    Copy the full SHA
    7e10c32 View commit details
  38. Copy the full SHA
    2e5bae8 View commit details
  39. Copy the full SHA
    1e463f6 View commit details
  40. Fix collision and placement for line labels (internal-65)

    Interpolating along long line segment on terrain was not implemented correctly:
    
    - along line, viewport aligned: When on terrain, long segments need to be truncated to handle terrain curvature. Earlier handling in placeCollisionCircles when anchor point is behind camera. When calculating for first and last glyph (endGlyph === true) screen position is not interpolated (as it is not correct) - instead segment is truncated to exact end glyphs positions and elevation is sampled there.
    
    - pitchWithMap: placeFirstAndLastGlyph don't need to sample elevation: placement is done in scaled/rotated tile coordinates (label plane for pitch with map) and getElevation is unecessary overhead. returnElevartion along path was interpolating elevation of line vertices. Instead, it is important to interpolate tile coordinates and sample on exact position. returnElevationAlongPath approach is changed to returnPathInTileCoords to return interpolated tile coordinates. collision code is then sampling elevation when placing collision circles. At the end, pitchwithmap implementation is explicitelly made the same as for 2D mode, using getElevation === null and sampling responsibility is moved out to collision circles calculation.
    
    Fixes: internal-3d-101
    astojilj authored and karimnaaji committed Dec 8, 2020
    Copy the full SHA
    f43b348 View commit details
  41. Revise atmosphere color contribution, better artistic controls (inter…

    …nal-58)
    
    Previously, color contribution was also affecting the extinction factor.
    This extinction factor highly influences how the participating media
    equation converges when accumulating lighting. It should only be modified
    by the 'intensity' factor for each of the rayleigh and mie component,
    which is stored in the alpha channel of the color inputs.
    
    Instead, this commit applies the color contribution + alpha intensity factor
    at the end of the atmosphere color accumulation, which gives a lot more
    variance of the sky color through artistic controls.
    karimnaaji committed Dec 8, 2020
    Copy the full SHA
    2f9d248 View commit details
  42. Copy the full SHA
    cc4ab8a View commit details
  43. Copy the full SHA
    c245b2a View commit details
  44. Add geojson_update debug page with continuosly updating GeoJSON sourc…

    …e and Terrain (internal-69)
    Asheem Mamoowala authored and karimnaaji committed Dec 8, 2020
    Copy the full SHA
    0954379 View commit details
  45. Copy the full SHA
    fabd82c View commit details
  46. fix getPerformanceMetrics() for non-chrome browsers (internal-88)

    We were relying on performance.measure(...) returning the entry it
    creates. This was non-standard behavior.
    ansis authored and karimnaaji committed Dec 8, 2020
    Copy the full SHA
    03c1d23 View commit details
  47. Update terrain as soon as style changes (internal-90)

    Terrain update is deferred to render (after zoom related recalculation). When style is changed or source removed, source cache used by terrain could be used before render (though camera API using elevation data) and it is important to update terrain immediatelly after changing sources.
    Fixes: internal-84
    astojilj authored and karimnaaji committed Dec 8, 2020
    Copy the full SHA
    6eb3cf2 View commit details
  48. Terrain: invalidate render cache on setPaintProperty (internal-100)

    Since render cache considers only visible tiles, it is enough to invalidate render cache for the next frame only, after the changed event.
    internal-93
    astojilj authored and karimnaaji committed Dec 8, 2020
    Copy the full SHA
    6f0bc66 View commit details
Showing 778 changed files with 28,035 additions and 3,347 deletions.
45 changes: 7 additions & 38 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -22,20 +22,6 @@ workflows:
filters:
tags:
only: /.*/
- check-size:
requires:
- build
filters:
tags:
only: /.*/
- collect-stats:
requires:
- build
filters:
tags:
ignore: /.*/
branches:
only: main
- test-flow:
requires:
- prepare
@@ -157,6 +143,10 @@ jobs:
- run: yarn run build-style-spec
- run: yarn run build-flow-types
- run: yarn run test-build
- run:
name: Check bundle size
command: |
node build/check-bundle-size.js
- deploy:
name: Trigger memory metrics when merging to main
command: |
@@ -174,30 +164,6 @@ jobs:
paths:
- dist

check-size:
<<: *defaults
steps:
- attach_workspace:
at: .
- run:
name: Check bundle size
command: |
node build/check-bundle-size.js "dist/mapbox-gl.js" "JS"
node build/check-bundle-size.js "dist/mapbox-gl.css" "CSS"
collect-stats:
<<: *defaults
steps:
- attach_workspace:
at: .
- run:
name: Collect performance stats
command: node bench/gl-stats.js
- aws-cli/install
- run:
name: Upload performance stats
command: aws s3 cp data.json.gz s3://mapbox-loading-dock/raw/gl_js.perf_metrics_staging/ci/`git show -s --date=short --format=%cd-%h HEAD`.json.gz

test-flow:
<<: *defaults
steps:
@@ -217,7 +183,10 @@ jobs:
steps:
- attach_workspace:
at: .
- run: yarn run build-token
- run: yarn run test-render
- store_test_results:
path: test/integration/render-tests
- store_artifacts:
path: "test/integration/render-tests/index.html"

63 changes: 63 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,66 @@
## 2.0.0

### ⚠️ Breaking changes

- **mapbox-gl-js is no longer under the 3-Clause BSD license. By upgrading to this release, you are agreeing to [Mapbox terms of service](https://www.mapbox.com/legal/tos/).** Refer to LICENSE.txt for the new licensing terms and details. For questions, contact our team at [https://support.mapbox.com](https://support.mapbox.com).
- Beginning with v2.0.0, a billable map load occurs whenever a Map object is initialized. Before updating an existing implementation from v1.x.x to v2.x.x, please review the pricing documentation to estimate expected costs.
- Deprecate Internet Explorer 11, no longer supported from this release. ([#8283](https://github.com/mapbox/mapbox-gl-js/issues/8283), [#6391](https://github.com/mapbox/mapbox-gl-js/issues/6391))
- Support for unlocked pitch up to 85°. The default `maxPitch` is increased from 60° to 85° which can result in viewing above the horizon line. By default, this area will be drawn transparent but a new sky layer can be added to the map in order to fill this space. The legacy behavior can be achieved by simply adding `maxPitch: 60` to the map options when instantiating your map.

### ✨ Features and improvements

- Add 3D terrain feature. All layer types and markers can now be extruded using the new `terrain` root level style-spec property or with the function `map.setTerrain()`. ([#1489](https://github.com/mapbox/mapbox-gl-js/issues/1489))
- Add support for unlocked pitch up to 85° (previously 60°). ([#3731](https://github.com/mapbox/mapbox-gl-js/issues/3731))
- Add a new sky layer acting as an infinite background above the horizon line. This layer can be used from the style-spec and has two types: `atmospheric` and `gradient`.
- Add a free form camera API, allowing for more complex camera manipulation in 3D, accessible using `map.getFreeCameraOptions()` and `map.setFreeCameraOptions()`.
- Improve performance by adopting a two-phase tile loading strategy, prioritizing rendering of non-symbol layers first.
- Improve performance by avoiding parsing vector tiles that were already aborted.
- Improve performance by adopting a preemptive shader compilation strategy. ([#9384](https://github.com/mapbox/mapbox-gl-js/issues/9384))
- Improve performance by disabling fade-in animation for symbols and raster tiles on initial map load.
- Improve performance by defaulting to 2 workers on all platforms. ([#3153](https://github.com/mapbox/mapbox-gl-js/issues/3153))
- Improve performance by loading tiles on the main thread at initial map load.
- Improve performance by using better worker task scheduling.

### 🐞 Bug fixes

- Avoid reloading `raster` and `raster-dem` tiles when the RTLTextPlugin loads.
- Add runtime evaluation of label collision boxes for more accurate symbol placement at fractional zoom levels and tilted views.
- Fix tile cache size for terrain DEM sources.
- Prevent holding on to DEM memory on the worker.
- Reduce memory used by `fill-extrusion`s.

### 🛠️ Workflow

- Run render tests in browser.

## 1.13.0

### ✨ Features and improvements

- Improve accessibility by fixing issues reported by WCAG 2.1. [#9991](https://github.com/mapbox/mapbox-gl-js/pull/9991)
- Improve accessibility when opening a popup by immediately focusing on the content. [#9774](https://github.com/mapbox/mapbox-gl-js/pull/9774) (h/t @watofundefined)
- Improve rendering performance of symbols with `symbol-sort-key`. [#9751](https://github.com/mapbox/mapbox-gl-js/pull/9751) (h/t @osvodef)
- Add `Marker` `clickTolerance` option. [#9640](https://github.com/mapbox/mapbox-gl-js/pull/9640) (h/t @ChristopherChudzicki)
- Add `Map` `hasControl` method. [#10035](https://github.com/mapbox/mapbox-gl-js/pull/10035)
- Add `Popup` `setOffset` method. [#9946](https://github.com/mapbox/mapbox-gl-js/pull/9946) (h/t @jutaz)
- Add `KeyboardHandler` `disableRotation` and `enableRotation` methods. [#10072](https://github.com/mapbox/mapbox-gl-js/pull/10072) (h/t @jmbott)

### 🐞 Bug fixes

- Fix a bug where `queryRenderedFeatures` didn't properly expose the paint values if they were data-driven. [#10074](https://github.com/mapbox/mapbox-gl-js/pull/10074) (h/t @osvodef)
- Fix a bug where attribution didn't update when layer visibility changed during zooming. [#9943](https://github.com/mapbox/mapbox-gl-js/pull/9943)
- Fix a bug where hash control conflicted with external history manipulation (e.g. in single-page apps). [#9960](https://github.com/mapbox/mapbox-gl-js/pull/9960) (h/t @raegen)
- Fix a bug where `fitBounds` had an unexpected result with non-zero bearing and uneven padding. [#9821](https://github.com/mapbox/mapbox-gl-js/pull/9821) (h/t @allison-strandberg)
- Fix HTTP support when running GL JS against [Mapbox Atlas](https://www.mapbox.com/atlas). [#10090](https://github.com/mapbox/mapbox-gl-js/pull/10090)
- Fix a bug where the `within` expression didn't work in `querySourceFeatures`. [#9933](https://github.com/mapbox/mapbox-gl-js/pull/9933)
- Fix a bug where `Popup` content HTML element was removed on `setDOMContent`. [#10036](https://github.com/mapbox/mapbox-gl-js/pull/10036)
- Fix a compatibility bug when `icon-image` is used as a legacy categorical function. [#10060](https://github.com/mapbox/mapbox-gl-js/pull/10060)
- Reduce rapid memory growth in Safari by ensuring `Image` dataURI's are released. [#10118](https://github.com/mapbox/mapbox-gl-js/pull/10118)

### ⚠️ Note on IE11

We intend to remove support for Internet Explorer 11 in a future release of GL JS later this year.

## 1.12.0

### ✨ Features and improvements
5 changes: 2 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -111,7 +111,7 @@ See [`bench/README.md`](./bench/README.md).
* We use [`assert`](https://nodejs.org/api/assert.html) to check invariants that are not likely to be caused by user error. These `assert` statements are stripped out of production builds.
* We use the following ES6 features:
* `let`/`const`
* `for...of` loops (for arraylike iteration only, i.e. what is supported by [Bublé's `dangerousForOf` transform](https://buble.surge.sh/guide/#dangerous-transforms))
* `for...of` loops
* Arrow functions
* Classes
* Template strings
@@ -120,8 +120,7 @@ See [`bench/README.md`](./bench/README.md).
* Rest parameters
* Destructuring
* Modules
* The following ES6 features are not to be used, in order to maintain support for IE 11 and older mobile browsers. This may change in the future.
* Spread (`...`) operator (because it requires Object.assign)
* Spread (`...`) operator
* Iterators and generators
* "Library" features such as `Map`, `Set`, `array.find`, etc.

93 changes: 58 additions & 35 deletions LICENSE.txt
Original file line number Diff line number Diff line change
@@ -1,18 +1,42 @@
mapbox-gl-js v2.0

Mapbox Web SDK

Copyright (c) 2020, Mapbox

All rights reserved.

Mapbox gl-js version 2.0 or higher (“Mapbox Web SDK”) must be used according to
the Mapbox Terms of Service. This license allows developers with a current active
Mapbox account to use and modify the Mapbox Web SDK. Developers may modify the
Mapbox Web SDK code so long as the modifications do not change or interfere with
marked portions of the code related to billing, accounting, and anonymized data
collection. The Mapbox Web SDK only sends anonymized usage data, which Mapbox uses
for fixing bugs and errors, accounting, and generating aggregated anonymized
statistics. This license terminates automatically if a user no longer has an
active Mapbox account.

For the full license terms, please see the Mapbox Terms of Service at
https://www.mapbox.com/legal/tos/.

-------------------------------------------------------------------------------

Contains code from mapbox-gl-js v1.13 and earlier

Version v1.13 of mapbox-gl-js and earlier are licensed under a BSD-3-Clause license

Copyright (c) 2020, Mapbox
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of Mapbox GL JS nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of Mapbox GL JS nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
@@ -23,33 +47,8 @@ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


-------------------------------------------------------------------------------

Contains code from glfx.js

Copyright (C) 2011 by Evan Wallace

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

--------------------------------------------------------------------------------

@@ -82,3 +81,27 @@ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

-------------------------------------------------------------------------------

Contains code from glfx.js

Copyright (C) 2011 by Evan Wallace

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
9 changes: 6 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -28,7 +28,10 @@ native SDKs. For code and issues specific to the native SDKs, see the

## License

Mapbox GL JS is licensed under the [3-Clause BSD license](./LICENSE.txt).
The licenses of its dependencies are tracked via [FOSSA](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fmapbox%2Fmapbox-gl-js):
Copyright © 2020 Mapbox

[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fmapbox%2Fmapbox-gl-js.svg?type=large)](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fmapbox%2Fmapbox-gl-js?ref=badge_large)
All rights reserved.

Mapbox gl-js version 2.0 or higher (“Mapbox Web SDK”) must be used according to the Mapbox Terms of Service. This license allows developers with a current active Mapbox account to use and modify the Mapbox Web SDK. Developers may modify the Mapbox Web SDK code so long as the modifications do not change or interfere with marked portions of the code related to billing, accounting, and anonymized data collection. The Mapbox Web SDK only sends anonymized usage data, which Mapbox uses for fixing bugs and errors, accounting, and generating aggregated anonymized statistics. This license terminates automatically if a user no longer has an active Mapbox account.

For the full license terms, please see the [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/).
3 changes: 2 additions & 1 deletion bench/benchmarks/symbol_layout.js
Original file line number Diff line number Diff line change
@@ -38,7 +38,8 @@ export default class SymbolLayout extends Layout {
tileResult.iconMap,
tileResult.imageAtlas.iconPositions,
false,
tileResult.tileID.canonical);
tileResult.tileID.canonical,
tileResult.tileZoom);
}
}
});
6 changes: 4 additions & 2 deletions bench/lib/tile_parser.js
Original file line number Diff line number Diff line change
@@ -116,12 +116,13 @@ export default class TileParser {
parseTile(tile: {tileID: OverscaledTileID, buffer: ArrayBuffer}, returnDependencies?: boolean): Promise<?WorkerTileResult> {
const workerTile = new WorkerTile({
tileID: tile.tileID,
tileZoom: tile.tileID.overscaledZ,
zoom: tile.tileID.overscaledZ,
tileSize: 512,
overscaling: 1,
showCollisionBoxes: false,
source: this.sourceID,
uid: '0',
uid: 0,
maxZoom: 22,
pixelRatio: 1,
request: {url: ''},
@@ -130,7 +131,8 @@ export default class TileParser {
cameraToCenterDistance: 0,
cameraToTileDistance: 0,
returnDependencies,
promoteId: undefined
promoteId: undefined,
isSymbolTile: false
});

const vectorTile = new VT.VectorTile(new Protobuf(tile.buffer));
2 changes: 0 additions & 2 deletions bench/rollup_config_benchmarks.js
Original file line number Diff line number Diff line change
@@ -2,7 +2,6 @@ import fs from 'fs';
import sourcemaps from 'rollup-plugin-sourcemaps';
import replace from 'rollup-plugin-replace';
import {plugins} from '../build/rollup_plugins';
import buble from 'rollup-plugin-buble';
import resolve from 'rollup-plugin-node-resolve';
import commonjs from 'rollup-plugin-commonjs';

@@ -58,7 +57,6 @@ const viewConfig = {
sourcemap: false
},
plugins: [
buble({transforms: {dangerousForOf: true}, objectAssign: true}),
resolve({browser: true, preferBuiltins: false}),
commonjs(),
replace(replaceConfig)
2 changes: 1 addition & 1 deletion build/banner.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import fs from 'fs';

const version = JSON.parse(fs.readFileSync('package.json')).version;
export default `/* Mapbox GL JS is licensed under the 3-Clause BSD License. Full text of license: https://github.com/mapbox/mapbox-gl-js/blob/v${version}/LICENSE.txt */`;
export default `/* Mapbox GL JS is Copyright © 2020 Mapbox and subject to the Mapbox Terms of Service ((https://www.mapbox.com/legal/tos/). */`;
Loading