#Mapbox
#30DayMapChallenge Day 2 — Lines 📈

Mapboxer Pratik Yadav built two interactive weather observatories using Mapbox, bringing storm paths, animated wind patterns, and weather forecasts to life on a map.
Choi-Wan · Weather Observatory
Explore Choi-Wan's recorded movement and Mapbox GFS weather forecasts.
buff.ly
November 2, 2026 at 5:04 PM
#30DayMapChallenge Day 1 — Points 📍

Mapboxer James Piacentini created Third Places NYC, an interactive map built with Mapbox GL JS and deck.gl that helps New Yorkers discover the cafés, parks, libraries, and spaces that bring people together.
November 1, 2026 at 5:02 PM
#30DayMapChallenge Day 4 — Clusters 🚲

Where can you find a place to park your bike? RackFinder turns crowdsourced OpenStreetMap (OSM) data into an interactive map of bicycle racks, built with Mapbox.
Rack Finder
Your free, crowdsourced, no-frills bicycle parking companion.
buff.ly
November 4, 2026 at 5:05 PM
USA: 4 Governeurswahlen in Republikaner-Gebieten "flippten" die Demokraten:

#Texas
#Iowa
#Georgia
#Ohio

#midterms #USWahlen
November 4, 2026 at 6:51 AM
Does anyone know how much the Trump/U.S. paid to aid and abet the enemy Russia on rearming during the war with Ukraine — for those 5 oil tankers of illegal Russian diesel steaming their way to our shores??!! maps.greenpeace.org/maps/gpuk/us...
November 1, 2026 at 9:07 PM
November 4, 2026 at 3:34 PM
Regardless whoever wins the Senate in Alaska, someone at 'Mapbox' needs a geography lesson.
November 4, 2026 at 7:43 AM
📍: Bridge - Water Pipe Crossing, Leigh Branch (Leeds & Liverpool Canal)
🗺️: https://www.osm.org/go/evgMBFGdX-?m

#canal #narrowboat #england #uk #aerialphoto #aerialphotography #satelliteview
November 2, 2026 at 5:14 PM
📍: Water Pipe Bridge next to Potthouse Br, Bradley Arm (Old Main Line)
🗺️: https://www.osm.org/go/euzQKqiIQ-?m

#canal #narrowboat #england #uk #aerialphoto #aerialphotography #satelliteview
November 3, 2026 at 3:21 PM
These demos show how developers can combine weather data, map layers, and interactive visualizations to make complex information easier to explore.

🌏 Choi-Wan Weather Observatory: buff.ly/hmVZGbC
🌀 U.S. Cyclone Observatory: buff.ly/pxQVz8s

#BuiltWithMapbox
Choi-Wan · Weather Observatory
Explore Choi-Wan's recorded movement and Mapbox GFS weather forecasts.
buff.ly
November 2, 2026 at 5:04 PM
📦 itsjustvita/laravel-vector-tiles v0.3.1

Serve Mapbox Vector Tiles directly from PostGIS in Laravel

🔗 https://github.com/itsjustvita/laravel-vector-tiles
November 2, 2026 at 9:19 AM
thinwrap_location 1.3.0 [new]

Lightweight, SDK-free, zero-dependency wrapper for routing, distance matrix, geocoding and isochrone across Google, Mapbox, HERE, ESRI, TomTom and OSRM.

Licenses: MIT
November 3, 2026 at 3:15 AM
#30DayMapChallenge Day 3 — Polygons 🔥

Explore decades of wildfire history with Wildfire History Explorer, an interactive map with Mapbox GL JS using real USGS wildfire perimeter data.

The project shows how developers can turn large polygon datasets into fast, interactive mapping experiences.
Wildfire History
US wildfires and prescribed fires from 2015–2020, from the USGS Combined Wildland Fire dataset.
buff.ly
November 3, 2026 at 4:02 PM
@shirokuriwaki.bsky.social:

"1st release of my R package `fourthirtyfive` makes House maps (2005-27, incl. those for next week's election) easily downloadable and mergeable, with hex/dotmaps, real shapefiles, descriptive names, and interactive overlays #mapbox:
shirokuriwaki.com/fourthirtyfi...
October 30, 2026 at 5:43 PM
… that I helped to make the basemap as I 💯 did help with the Strava basemaps while at Mapbox years ago but i certainly have no idea what design decisions in the map are still there that were mine

But like 😆 😉

Body made Line 💃
November 3, 2026 at 11:26 AM
The right address is just the beginning. Now, find the right entrance across Europe with Mapbox Geocoding API.

Today, we're expanding coverage to 100+ million additional addresses across 19 European countries, now available in public preview.
Mapbox Geocoding entrance data expands to Europe
Building entrance data for more than 100 million addresses across 19 European countries is now available in public preview
buff.ly
October 28, 2026 at 3:30 PM
November 1, 2026 at 2:23 PM
📍: Lock 17, Tottenham Lock, Eastern Side, Lee Navigation
🗺️: https://www.osm.org/go/euu7duQ1v-?m

#canal #narrowboat #england #uk #aerialphoto #aerialphotography #satelliteview
October 29, 2026 at 2:33 PM
A whole country on the phone, without map clustering
We're building TapMap, a social network built on maps: instead of a feed, you get a map of places, people and their own maps. Stack: Flutter (Android, iOS and web from one codebase), Mapbox (`mapbox_maps_flutter` on phones, `mapbox-gl-js` in the browser) and self-hosted Supabase on Postgres 17 with PostGIS. Today the database holds 26,400 published places in 6,185 cities, and the whole thing lives on the phone. There is no clustering, and there won't be. Below is how we got here, with the numbers for every step. Most of them are not flattering. ## Why no clustering A bubble that says "47" doesn't answer "where should I go?". You see that there's a lot of something somewhere, zoom in, the bubble splits into smaller bubbles, zoom in again. By the fourth zoom people close the app. We wanted specific places visible at every zoom level: the strongest ones from far away, all of them up close. The product owner made the call with no compromise: no bubbles. Our job was to keep the map alive anyway. ## Step 0. Where we started: two megabytes per tap At 3,738 points, `map_points()` with no arguments returned **2,093 KB** on every launch, wherever the user was looking. The client was worse. Every filter ran "string → `jsonDecode` → filter → `jsonEncode` → string", three filters in a row, plus a merge with the user's own points. That's **five parses and four serialisations of two megabytes of JSON per filter tap** , on the main isolate. If there was an event with a countdown in the next 24 hours, all of it repeated once a second. The painful part: the function had `city_slug`, `bbox` and `max_points` parameters from day one. The client simply never passed them. ## Step 1. Parse once, query by viewport * **Parse once.** JSON becomes a list of objects, all filters work on lists, and the string for the map is built once at the end. * **Query by viewport.** When the camera stops, the screen reports its bounds. We pad the window by a screen width on each side and cap by zoom. A new request goes out only when the view leaves the loaded area or zoom crosses a threshold. Panning inside the padding costs zero network and zero parsing. Production numbers: the Phuket viewport returned **432 points, 240 KB** ; a tight Patong window **146 points, 81 KB**. That's 9× and 26× less than 2,093 KB. ## Step 2. "The points disappeared" A day later we got a complaint: "most of the points on the map are gone". The first thinning caps were too greedy: 200 points below zoom 8, 400 below zoom 10. * **All of Phuket in frame:** 432 points uncapped, 400 capped. The 26 quietest beaches and nature spots vanished. * **Southern Thailand in one frame:** 927 uncapped, 200 capped. Three quarters gone. We set a rule: **a single city is never thinned.** If someone is looking at a whole city, hiding points from them isn't optimisation, it's data loss. New caps: 400 up to zoom 7, 900 up to 9, 1,600 up to 11, everything after. Bangkok at "whole city in frame" gives 531 points under a 900 cap; Phuket shows all of its points. Thinning only starts when several cities are in frame. ## Step 3. Pins that lost silently Place pins in Mapbox didn't overlap (`icon-allow-overlap: false`). On collision the higher-rated pin stayed and the other one wasn't drawn at all. Below zoom 11 there was a layer of small dots for the "losers"; from zoom 11 it switched off. Result: at zooms 11–14 in dense areas most pins disappeared without a trace. On Kata Noi beach you could see one pin out of two; in Rawai, one out of four. The fix: from zoom 11 pins may overlap, and only labels give way to each other. The threshold matches the zoom where labels turn on, on purpose. ## Step 4. "The map freezes for 1–2 seconds". It was the decor On a powerful phone the map would freeze for a second or two. On a weak one it didn't. That alone said it wasn't the points. The cause was the scenery: trees, cars and 3D buildings. 700 ms after every camera stop, the decor asked Mapbox for roads, buildings and empty lots via `querySourceFeatures`. That method returns geometry **from every loaded tile** , not just the screen, and all of it gets decoded on the main isolate. Decor is disabled on weak phones, which is why they never froze. Measured: Patong, zoom 15. Buildings alone took **3,006 polygons in 2,206 ms** ; the whole pass took **2,900 ms**. What we changed: 1. Switched to `queryRenderedFeatures` for the screen rectangle and specific layers. For roads and empty lots we added two transparent "probe layers" with near-zero opacity. Exactly zero doesn't work: the engine doesn't render such a layer and returns nothing for it, so it's 0.02. 2. Decor is re-placed only when the camera moves a quarter of the screen or half a zoom step, not after every stop. 3. The delay before re-placing went from 0.7 s to 1.2 s, so it doesn't land between two finger movements. Same frame afterwards: **71–184 ms** instead of 2,900. ## Step 5. Cold start: that second wasn't the network Next complaint: "sometimes you wait a second before the points appear". Points were already cached in the background. The second was eaten by the queue of work before the first pin: * 8 glTF decor models and buildings waited **before** the "map ready" signal. Now decor comes in 700 ms after the points. * About 35 icons were decoded into bitmaps one by one just to read width and height. Now size is read from the PNG header and registration runs in parallel. * 72 animation frame layers were added in 72 separate calls. Now it's one batch. Emulator, debug build: first frame **+4.4 s → +1.6 s** , points after first frame **~6 s → ~1.1 s** , image registration **2,367 → 241 ms**. ## Step 6. The whole database on the phone When places reached tens of thousands, we did what first looked reckless: we put the entire database on the phone. * First launch downloads all of `map_points()`. For 26,400 points that's **2.9 MB raw and 0.50 MB gzipped**. * After that the app only asks for a delta: `map_points_changes(since)`. * The first frame is drawn from disk: camera, layers and ranks. Fresh data lands on top in the same places. ## Step 7. Ranking decides who's visible, not bubbles Without clusters, something has to decide which point shows at which zoom. That's `PointsRanking`: * **Importance** comes from review count, rating and category weight. * **Below zoom 9** the most important point wins in each grid cell. * **From zoom 9** a point is visible if its pin has free space without collisions, like Google Maps and OpenMapTiles do it. * **From zoom 17** everything is visible. * **Chains** like 7-Eleven and Starbucks only get the space left over by regular places. The key fix came later: the selection is computed **once per filter over the whole on-device database** , not per camera window, and ties are broken by id. So every point has the same "appearance zoom" no matter how you move the map. Before, a point could blink on a two-pixel pan just because the window was recomputed and its cell neighbours changed. ## Where the ceiling is This can't last forever. There's a constant `PointsCache.cap = 40,000`: that's how many points still fit on a phone. It's the trigger to move to vector tiles (PMTiles), where thinning happens on the server at tile generation, not on the client. For now we're at 26 thousand, and the map opens faster than it used to at 3.7 thousand. ## Takeaways 1. **Measure before you fix.** The freeze "caused by points" was decor. The "one second of loading" was image registration, not the network. 2. **The most dangerous bugs don't crash.** A pin that silently lost to its neighbour leaves no log and no crash report. You only see it on a before/after screenshot. 3. **Thinning is a product decision, not a technical one.** "Never hide points inside a single city" is a product rule, and once we had it, every number fell into place. If you're curious how the place cards are built (an LLM pipeline enriches them) or how we score a point's importance, ask in the comments and we'll write it up. _TapMap is a social network built on maps. Free on Android and on the web: tapmap.net._
dev.to
October 31, 2026 at 8:26 PM
I ran 1,000 Calgary addresses through four geocoders, street line only. Esri matched about 60%, and Mapbox, HERE and Google did better.

With city, province and country added, all four came close to a full match. Test yours on input that looks like your users'.

www.pickyourplace.app/blog/geocodi...
Geocoding in the Wild: Comparing Mapbox, Google, Esri, and HERE | PickYourPlace Blog
Find out how address completeness, accuracy, and data quality affect geocoding results in the real world.
www.pickyourplace.app
October 30, 2026 at 7:15 PM
📍: Aqueduct 1, Sutton & Walsall Railway, Daw End Canal
🗺️: https://www.osm.org/go/euzS9Soqx-?m

#canal #narrowboat #england #uk #aerialphoto #aerialphotography #satelliteview
October 30, 2026 at 7:58 PM
New open GitHub repo from Montana Free Press!

https://github.com/mtfreepress/pipeline-map-interactive
pipeline-map-interactive
Map of bridger pipeline using mapbox
github.com
October 27, 2026 at 4:03 PM
New script: validates and simplifies GeoJSON files with shapely. 231 lines, beginner-friendly. Handy for cleaning PostGIS exports before Leaflet or Mapbox. https://www.valtersit.com/python/geojson-processor-and-validator/
GeoJSON Processor and Validator
www.valtersit.com
October 29, 2026 at 5:40 PM
And getting started is simple:
✅ Same Mapbox Geocoding API
✅ Same entrances=true parameter
✅ No new integration required

Learn more: buff.ly/dZcil5M

#BuiltWithMapbox
Mapbox Geocoding entrance data expands to Europe
Building entrance data for more than 100 million addresses across 19 European countries is now available in public preview
buff.ly
October 28, 2026 at 3:30 PM
October 27, 2026 at 8:10 PM