#mapboxgl
The @mapbox.com Standard Satellite style gives you a stunning 3D globe out of the box that you can use to build your maps and apps.

If you are an R user, this is all you need to get started:

library(mapgl)
mapboxgl(style = mapbox_style("standard-satellite"))

Try it out!

#rstats
May 29, 2025 at 9:28 PM
Today's mapgl tip for #30DayMapChallenge Day 8: Urban

The default Mapbox Standard Style with `mapboxgl()` gets you 3D buildings - with rendered landmarks - out of the box.

Using MapLibre? Try `maplibre(style = openfreemap_style("liberty"))` for 3D OSM buildings!
November 8, 2025 at 1:54 PM
#30DayMapChallenge Day 5: Earth

Today's tip: in #rstats mapgl, use `mapboxgl(style = mapbox_style("standard-satellite"))` to get @mapbox.com high-quality imagery on an interactive globe in one line of code.

Even better - you get 3D terrain out of the box!
November 5, 2025 at 1:35 PM
In the latest version of the @Mapbox Standard Style, you can enable "landmark icons" to add context to your maps and apps.

In #rstats, use the mapgl package to try this feature out:

mapboxgl(config = list(basemap = list(showLandmarkIcons = TRUE)))
August 30, 2025 at 6:25 PM
Need a monochrome basemap with @Mapbox's stunning 3D buildings?

Try this mapgl trick for #30DayMapChallenge Day 11: Minimal:

library(mapgl)

mapboxgl(
config = list(
basemap = list(
theme = "monochrome"
)
)
)

Add `lightPreset = "night"` for a dark basemap!
November 11, 2025 at 3:24 PM
Back in 2018 we did an experiment with generating a landscapes based on GPS route data. By merging DEM maps and satellite imagery we where able to generate interactive landscapes dynamically. @cleverfranke.com

#threejs #experiment #gpsdata #mapboxgl #tbt #datavisualization #dataviz #landscape
September 19, 2025 at 10:33 AM
Here's how:

mapboxgl(
center = c(55.2744, 25.1972),
zoom = 15.3,
bearing = -20.8,
pitch = 82,
config = list(
basemap = list(
lightPreset = "dusk"
)
)
) |>
set_snow()
May 16, 2025 at 10:23 PM

# fly to CECC
mapboxgl(style = mapbox_style("standard-satellite"), centre=c(-97.6,25.4)) %>%
fly_to(center = c(-78.7303, 44.379), zoom = 16.7, pitch = 75, bearing = 136.8, duration=16000)

Output will be in RStudio Viewer, select Export Save as Web Page for the HTML
December 6, 2024 at 1:57 PM
Useful info from @kylewalker.bsky.social on using LODES data on the US labor market with #RStats! 🧵⬇️⬇️⬇️

Also check out his earlier example map of healthcare jobs in Los Angeles
Map walker-data.com/map-challeng...
Code github.com/walkerke/map...
#RSpatial
March 28, 2025 at 4:14 PM
The mapgl tip: use the `projection` argument in `mapgl::mapboxgl()` to choose from a variety of Mercator alternatives.

Or, use `set_projection()` to switch this dynamically in your Shiny apps.
November 19, 2025 at 11:23 AM
So you're saying the MapboxGL license will go back to open source right
July 25, 2025 at 2:34 PM
🔗 I love maps: Pathfinder: A Modern Mapping App with Next.js 15 and MapboxGL

Check it out here ➜ dly.to/1Xi7L205gOU

What are your thoughts?
Pathfinder: A Modern Mapping App with Next.js 15 and MapboxGL | daily.dev
Pathfinder is an open-source mapping application built with Next.js 15, MapboxGL, and TypeScript. It features real-time weather data, 3D building visualization, dark/light mode support, a street/satel...
dly.to
February 21, 2025 at 6:24 PM
Day 97. Hot air balloons everywhere! 🪂

Late-campaign, I wanted something lighter: Hot air balloon glTF over a dense 3D city in Mapbox GL JS, rendered with a custom Three.js layer on the same WebGL canvas.

maptheclouds.com/playground/b...

#100DayMapChallenge Day 97/100

#ThreeJS #WebGL #MapboxGL
May 16, 2026 at 4:04 PM
La meva llibreria de llegenda per #mapbox ha arribat a 50 stars a Github! ✨
github.com/markusand/ma...
GitHub - markusand/mapboxgl-legend: Add a legend to a mapbox-gl map by parsing layer layout & paint expressions.
Add a legend to a mapbox-gl map by parsing layer layout & paint expressions. - markusand/mapboxgl-legend
github.com
November 18, 2024 at 10:41 PM
library(mapgl)

mapboxgl(zoom = 16.77,
center = c(2.35035, 48.85306),
pitch = 75,
bearing = 95.2) |>
set_config_property(
"basemap",
"lightPreset",
"night" # Swap in "dawn", "day", or "dusk"
)
November 15, 2024 at 8:33 PM
Sortez des sentiers battus avec #MoodWalkR, application de balades en fonction de vos humeurs, déjà disponible pour @montpellier_ @TlseMetropole @Bordeaux @nantesfr
#Challengesnumériques @DGE @Bpifrance @joinstationf @AerospaceValley
#OSRM #React #MapboxGL
December 13, 2024 at 9:02 AM
Day 91. Snow Dome Anywhere (3D + Particles) ❄️

Dense 3D city view, shifted into a quiet snow-dome version.

Inspired by FOSS4G Bucharest 2019. FOSS4G Europe 2026 is coming: 2026.europe.foss4g.org

maptheclouds.com/playground/b...

#100DayMapChallenge Day 91/100 #ThreeJS #MapboxGL #MaplibreGL#FOSS4G
May 10, 2026 at 5:02 PM
As understandable as Mapbox’s move was, it left a gap because a crucial open-source library was essentially frozen in time. It’s good that MapLibre exists alongside other projects (including MapboxGL). It’s not great that the work is financed by big tech companies; I agree.
August 4, 2026 at 1:22 AM
library(mapgl)

mapboxgl(zoom = 16.77,
center = c(2.35035, 48.85306),
pitch = 75,
bearing = 95.2) |>
set_config_property(
"basemap",
"lightPreset",
"night" # Swap in "dawn", "day", or "dusk"
)

Learn more:
mapgl: WebGL Maps in R with Mapbox and MapLibre
Provides an interface to the Mapbox GL JS (<https://docs.mapbox.com/mapbox-gl-js/guides>) and the MapLibre GL JS (<https://maplibre.org/maplibre-gl-js/docs/>) interactive mapping libraries to help users create custom interactive maps in R. Users can create interactive globe visualizations; layer sf objects to create filled maps, circle maps, heatmaps, and three-dimensional graphics; and customize map styles and views. The package also includes utilities to use Mapbox and MapLibre maps in Shiny web applications.
walker-data.com
December 7, 2025 at 9:34 PM
i merged a (great) new pr that introduced snapping, but that broke prod with an error in deckgl. turns out that deckgl was relying on an implementation detail of mapboxgl that changed in a new version, and cf pages was silently installing deps without my lockfile, so it auto-upgraded and broke
December 7, 2024 at 11:29 PM
No me había dado cuenta de que MappingGIS me había escrito una cosita sobre #gleo
https://mappinggis.com/2025/08/gleo-reinventando-los-mapas-webgl/
Gleo: reinventando los mapas WebGL
* Twitter * LinkedIn * Facebook * Email Gleo es una librería JavaScript de visualización de mapas web impulsada ​​​​por WebGL. Gleo es una biblioteca para mostrar mapas geográficos, que aprovecha WebGL1 mediante la biblioteca de abstracción Glii. Su objetivo es cubrir los casos de uso de Leaflet, OpenLayers o MapboxGL / MaplibreGL. Según su creador, Iván Sánchez Ortega, « _es como reinventar la rueda de Leaflet/OpenLayers/MapLibre_ «, y ha sido desarrollada solo por él. ## Objetivos * Ofrecer una API similar a Leaflet (imperativa, orientada a objetos, sin hojas de estilo, una instancia de objeto por símbolo cartográfico, clases extensibles), pero que aprovecha el renderizado 2D WebGL. * Soporte de proyecciones cartográficas como OpenLayers. * Rendimiento habilitado para WebGL como MapLibre. * Soporte de simbolización capaz de rivalizar con Deck.gl. ## Características * Módulos JavaScript ES6 puros (no se necesitan herramientas de agrupación de Typescript ni JavaScript). * Enfoque totalmente orientado a objetos. * Los símbolos de mapa son objetos y hacen cosas como manejar eventos del ratón. * Soporte de reproyección sobre la marcha. * Ausencia total de la palabra (sorprendentemente ambigua) «capa». * Licencia GPLv3. Usar Gleo requiere un sólido conocimiento de los fundamentos del desarrollo web. Gleo está diseñado como módulos de JavaScript y no requiere ninguna cadena de herramientas de agrupación (como rollup, parcel, webpack, etc.) para funcionar. ### Ejemplos interactivos * En este enlace puedes ver una muestra con los códigos y los visores resultantes. ### Más info * Repositorio de código. * Documentación de API. * Presentación (ejemplos). ### 📊 Comparativa de librerías de mapas web _open source_ Característica | **Leaflet** | **OpenLayers** | **MapLibre GL JS** | **Gleo** ---|---|---|---|--- **Última versión** | 1.9.4 | 9.2.4 | 5.3.0 | 1.0.0 **Fecha publicación** | 18 may 2023 | 27 may 2024 | mar 2025 | 21 mar 2025 **WebGL** | ❌ No nativo (sí via plugins) | ✅ Sí | ✅ Sí | ✅ Sí (núcleo WebGL) **Teselas vectoriales** | ❌ No nativo (sí vía plugins) | ✅ Sí | ✅ Sí (nativo) | ✅ Sí (vector-tile-js) **Proyecciones** | 🌍 Solo Web Mercator | 🌐 Múltiples via Proj4js | 🌍 Web Mercator + globo + experimental | 🌐 Múltiples via Proj4js **Plugins** | 🔌 Amplio ecosistema | 🔌 OL-ext y otros | 🔌 Comunidad activa (Awesome MapLibre) | 🚫 No dispone **Soporte móvil** | 📱 Excelente | 📱 Bueno (requiere ajustes) | 📱 Bueno | 📱 Requiere pruebas **Tamaño ligero** | ✅ Muy ligera (~42 KB) | ❌ Más pesada (~140-250 KB) | ❌ Media (~220 KB) | ❌ No especificado oficialmente **Facilidad de uso** | 😊 Muy fácil | 😐 Requiere curva de aprendizaje | 😐 Intermedia | 🧪 Experimental
mappinggis.com
August 16, 2025 at 8:02 PM
mapboxgl applying map.setFeatureState to a group of vector-tiles filtered features
Doing some tests, trying to let user click on a COUNTY and all counties belonging to STATE x get highlighted. You can see running here var map = new mapboxgl.Map({ container: 'map', style: { "version": 8, "name": "blank", "sources": { "empty": { "type": "vector", "url": "" } }, "layers": [{ "id": "background", "type": "background", "paint": { "background-color": "#1d1f20" } }] }, center: [-82, 39], zoom: 3, debug: 2 }); var hoveredStateId = null; map.on('load', function() { map.addSource("counties", { "type": "vector", "url": "mapbox://reyemtm.28b260nr" }); // The feature-state dependent fill-opacity expression will render the hover effect // when a feature's hover state is set to true. map.addLayer({ "id": "fill", "type": "fill", "source": "counties", "source-layer": "us_counties-8xelrv", "layout": {}, "paint": { "fill-color": ["case", ["boolean", ["feature-state", "hover"], false], "whitesmoke", "firebrick"], "fill-opacity": 1 } }) function getUniqueFeatures(array, comparatorProperty) { var existingFeatureKeys = {}; var uniqueFeatures = array.filter(function(el) { if (existingFeatureKeys[el.properties[comparatorProperty]]) { return false; } else { existingFeatureKeys[el.properties[comparatorProperty]] = true; return true; } }); return uniqueFeatures; } map.on("click", "fill", function(e) { if (e.features.length > 0) { var state_code = e.features[0].properties.STATE; console.info(state_code) var relatedFeatures = map.querySourceFeatures('counties', { sourceLayer: 'us_counties-8xelrv', filter: ['==', 'STATE', state_code] }); var uniqueFeatures_state = getUniqueFeatures(relatedFeatures, "STATE"); var uniqueFeatures_id = getUniqueFeatures(relatedFeatures, "id"); console.log(uniqueFeatures_state) relatedFeatures.forEach(function(f) { console.log(f.id) //18 console.log(f.properties.STATE) //allways the same, this is good var s = { source: 'counties', sourceLayer: 'us_counties-8xelrv', id: f.id }; map.setFeatureState(s, { hover: true }); }); } }); }); Console gives the correct info (that is, ids are unique and state_code is the same for all filtered features when click on one county). Curiously Texas is one of the few working correctly, but, when zooming in/out, highlighting becomes a chaos. I have also tried using uniqueFeatures_state as the object to iterate over, with no success.
gis.stackexchange.com
August 2, 2026 at 9:09 AM