| ▲ | MapLibre Tile: a modern and efficient vector tile format(maplibre.org) |
| 360 points by todsacerdoti 11 hours ago | 71 comments |
| |
|
| ▲ | edward 6 hours ago | parent | next [-] |
| Come to the MapLibre talk in the Geospatial devroom at FOSDEM on Saturday https://fosdem.org/2026/schedule/event/QAL9VN-state-of-the-m... |
| |
|
| ▲ | Koffiepoeder 10 hours ago | parent | prev | next [-] |
| Had to search a bit, but here's a demo page: https://maplibre.org/maplibre-gl-js/docs/examples/display-a-...
Can be compared with: https://maplibre.org/maplibre-gl-js/docs/examples/display-a-... In that example I saw this in the console: before - 2.41+26.29+24.87+71.28+59.2+77.57 - 261.62kb
after - 2.45+22.4 +22.66+60.6+51.99+77.57 - 237.67kb
So roughly a ~10% compression improvement, neat! |
| |
| ▲ | dzogchen 9 hours ago | parent [-] | | Note that the demotiles style is not really comparable to a production basemap such as ones based on the popular OpenMapTiles schema. The article linked in the announcement has some more findings related to compression ratio. Also note that lightweight encodings are built into the format, and different tiles can even be encoded in a completely different way. So you have to use heuristics to find the best combination of encodings and often you need to make a trade off between tile size and decoding performance. It is still early days for MLT, but all this means there are a lot of possibilities for optimization. In fact, AWS is again financing work on MLT this year, with a focus on optimization. Lastly, when benchmarking tile size, it is good to look at actual usage patterns instead of size of the total tile set. Nobody is zooming into a random spot in the ocean, for example. ;-) |
|
|
| ▲ | pratio 10 hours ago | parent | prev | next [-] |
| This is interesting. We recently deployed a solution that uses pmtiles and it's great. https://docs.protomaps.com/pmtiles/ afaik, pmtiles uses mvt, let's hope the tooling to convert the tiles to mlt also becomes available. |
| |
| ▲ | dzogchen 9 hours ago | parent | next [-] | | PMTiles is actually pretty agnostic to what kind of tiles it contains! There is already a PMTiles PR that updates the byte that specifies the type of tile to include MLT. https://github.com/protomaps/PMTiles/pull/596 | | | |
| ▲ | jamessb 9 hours ago | parent | prev | next [-] | | PMtiles is often used with MVT tiles, but it can encapsulate a variety of tile types: the current spec [1] has defined tile types for MVT, PNG, JPEG, WebP and AVIF (plus "Unknown/Other"). [1]: https://github.com/protomaps/PMTiles/blob/main/spec/v3/spec.... | | |
| ▲ | pratio 9 hours ago | parent [-] | | Absolutely, we have MVT tiles at the moment, I'm hoping to test MLT soon |
| |
| ▲ | maelito 8 hours ago | parent | prev | next [-] | | I'm building PMTiles through Tilemaker, PMTiles is incredible, but sadly it will take a lot of work to produce MLT though Tilemaker :/ | |
| ▲ | Humphrey 10 hours ago | parent | prev [-] | | Oh pmtiles is such a simple and innovative solution! | | |
| ▲ | jarl-ragnar 35 minutes ago | parent | next [-] | | It is. I’ve found it so useful I created an Elixir library to act as a cache in front on a pmtiles file. https://hex.pm/packages/ex_pmtiles | |
| ▲ | pratio 9 hours ago | parent | prev [-] | | Yes, Absolutely in love with it. Loading tiles with range requests made our application so much faster. | | |
| ▲ | jtbaker 7 hours ago | parent [-] | | It's very cool! If you want to get higher cache hit rates from a CDN or redis etc. and lower the amount of S3 reads, you can get set up a proxy to convert `/{z}/{x}/{y}.mvt` requests into the byte-range requests: https://docs.protomaps.com/deploy/ Brandon has some example code you can lift to dump it into a Cloudflare Worker or other platforms on that page. | | |
| ▲ | pratio 6 hours ago | parent [-] | | Thank you.
I'm going to try this on a different project that we have. Our current deployment is designed to work directly through s3/api gateway which reduces the number of moving parts. We update the tiles frequently, so the setup has been amazing for us. |
|
|
|
|
|
| ▲ | ccev 10 hours ago | parent | prev | next [-] |
| MapLibre is an awesome project, their JS library is by far the best way to display maps in the browser that I've come across. Very excited to eventually switch to this format! |
| |
|
| ▲ | zylepe 7 hours ago | parent | prev | next [-] |
| Planetiler currently supports generating MLT by adding —-tile-format=mlt cli argument. It’s only on latest main right now but I should be able to get a release out in the next few days. In my testing I’ve seen ~10% reduction in overall OpenMapTiles archive size with default settings but there are some more optimizations the team is working on that should bring it down even further. |
|
| ▲ | maelito 8 hours ago | parent | prev | next [-] |
| Unfortunately, Tilemaker hasn't planned or cannot plan to support MLT in the medium-term. That will leave a significant part of the community out of this transition. See this interesting (and quite heated) discussion : https://github.com/systemed/tilemaker/issues/856 |
|
| ▲ | neiman 5 hours ago | parent | prev | next [-] |
| It's cool that stuff like vector file formats is still being reinvented. What's the new idea(s) here, though? Like, I get that it's new and has better features (better compression, faster decoding, etc.) --- but what are the new ideas or insights that led to this design? |
|
| ▲ | mattrighetti 7 hours ago | parent | prev | next [-] |
| Does anyone self host maps? If you do, mind sharing the pros, cons and tools to do that? |
| |
| ▲ | homebrewer 7 hours ago | parent | next [-] | | We've been self-hosting protomaps (aka pmtiles) for several years. The only thing you need server-side is a web server that can serve static files and supports range requests (so anything works; I've tried caddy and nginx). The map is one large file, it's easy to share it between however many servers you need. https://docs.protomaps.com/guide/getting-started Downsides? Nothing major that I can think of. You have to add another client-side dependency (support for their custom protocol); the library is pretty small and easy to audit. Editing map styles is slightly more difficult because generic maplibre styles won't work with it: they add a bit of custom sauce on top. IIRC this editor worked fine, you can import one of protomaps styles and base your work off it: https://maputnik.github.io/editor That's probably it. | | |
| ▲ | yuretz 3 hours ago | parent | next [-] | | How do you update pmiles? Do you have to rebuild the entire map every time?
If so, I think that's a downside/limitation for some use cases. | |
| ▲ | throw_away_623 7 hours ago | parent | prev [-] | | Are the names of cities/streets included in the tiles, or do they have to be placed from a different data source? | | |
| ▲ | homebrewer 7 hours ago | parent [-] | | No, the names are there in the file, streets included. Their default styles did not support the languages we needed out of the box (everything was shown in the local language or English IIRC), but it was easy to fix by patching the style. I don't remember the exact fix, but it was about as simple as replacing something like `["get", "name_en"]` with `["get", ["coalesce", "name_xx", "name_en"]]`. | | |
| ▲ | throw_away_623 7 hours ago | parent [-] | | Is there enough information to show exact addresses? For example "221B Baker Street" | | |
| ▲ | homebrewer 6 hours ago | parent [-] | | Sure. You can look at their demo, it uses the exact same single-file hosting mechanism (the network requests tab in the browser dev tools confirms it — it doesn't send any other requests), and street/house addresses are visible on the map. https://maps.protomaps.com |
|
|
|
| |
| ▲ | linsomniac 7 hours ago | parent | prev [-] | | We use mod_tile+renderd: https://github.com/openstreetmap/mod_tile In short: We have a script that builds a pbf of the area we are interested in (Colorado, USA) from OSM, then set up a openstreetmap-tile-server container with that data, bring in our styles, and then set up renderd. |
|
|
| ▲ | twelvechairs 9 hours ago | parent | prev | next [-] |
| Looks great. I wish there was similar advancement for full 3d tiles. The only real option at the moment is cesiums 3d tiles format which is nowhere near as fast as it could/should be |
|
| ▲ | Dowwie 6 hours ago | parent | prev | next [-] |
| I <3 Martin and the team that built it. It's great to see that the Rust stack they used is the one I contributed to, now 8 years ago. Aging like fine wine! |
|
| ▲ | shirol 7 hours ago | parent | prev | next [-] |
| Unrelated, but I noticed that clicking the logo goes to the current permalink rather than the homepage, might be unintentional. |
|
| ▲ | mips_avatar 5 hours ago | parent | prev | next [-] |
| I just want support for globe view on maplibre native |
|
| ▲ | willtemperley 8 hours ago | parent | prev | next [-] |
| Another thing worth mentioning is it's very similar to the structure of columnar formats like Arrow and Parquet. Anyone with familiarity with these formats could build a decoder in a couple of days. If they don't use FastPFOR. I really wish they hadn't used FastPFOR. It's a research library and has an incredibly opaque algorithm: https://ayende.com/blog/199523-C/integer-compression-underst... |
|
| ▲ | QuiCasseRien 9 hours ago | parent | prev | next [-] |
| All links in the top navigation are broken (404). |
| |
| ▲ | dzogchen 8 hours ago | parent [-] | | Sorry about that. Noticed the footnote was broken. Fixed the footnote, broke all other links. Should be OK again when the caches catch up. |
|
|
| ▲ | ltbarcly3 8 hours ago | parent | prev | next [-] |
| "Modern" is such a silly way to advertise things. |
| |
| ▲ | dzogchen 5 hours ago | parent | next [-] | | We don't have a marketing department, so we're happy to take suggestions on our messaging! What makes it modern are the ideas behind it: the column-oriented layout, support for lightweight encodings such as FSST and FastPFOR and support for pre-tessellation. Also, enabling doing more computations on the GPU instead of the CPU, which are made possible thanks to modern graphics APIs like Vulkan and Metal. I agree that it is better to be specific about these things (if that is your gripe with it), but there's only so many characters that fit into a title. ;) | |
| ▲ | xigoi 6 hours ago | parent | prev [-] | | Although the word is overused, hindsight can be a huge advantage in design. |
|
|
| ▲ | einpoklum 8 hours ago | parent | prev | next [-] |
| I am not familiar with the ecosystem of geographic data and mapping as online services. Can someone please explain... * How this tile format, or the organization behind it, related to OpenStreetMap (if it is related at all)? * Why the need to replace the previous tile format / scheme which they mention? * What challenges such a project faces (other than, I suppose, being noticed and considered for adoption)? |
| |
| ▲ | wiredfool 8 hours ago | parent | next [-] | | 1) It's not. Maplibre is a JS library for displaying map data. OpenStreetMap is a collection of map data that is published in various formats. Different levels of the stack. 2) It's an optimization/advancement. There are some pain points in the older version that 10 years of experience can fix in a newer format. 3) Attention, funding. Technically, they're at the leading edge of open source. | | |
| ▲ | WorldMaker 6 hours ago | parent | next [-] | | Additionally to point 2, the older format was created by a company (Mapbox) that used to be open source-friendly but has recently made a larger pushback against open source and open standards, changing the licenses of much of their formerly open source work. (The Maplibre JS library itself is a fork of that company's previous open source work from its last open source drop to keep the work open source.) | |
| ▲ | mmooss 3 hours ago | parent | prev [-] | | > There are some pain points in the older version that 10 years of experience can fix in a newer format. What were the major pain points? Compression ratio and speed seem like two of them. (Thanks for answering the elementary questions.) |
| |
| ▲ | usrusr 6 hours ago | parent | prev [-] | | The key info token you'll want to know as someone foreign to map topics is that maplibre is a licence continuity fork of the formerly open source Mapbox code. Everything else pretty much derives from this, e.g. yeah, OSM did not suddenly go all in on former mapbox stuff only because the company started keeping updates behind a paywall, OSM continues to be as tool-agnostic as ever. |
|
|
| ▲ | adim86 8 hours ago | parent | prev [-] |
| I find it shocking that a reputable resource such as this is still displaying the size of Greenland or Africa wrong (Mercator projection) in relation to other land masses in its marketing material and documentation, like here. It just brings doubt to the whole project, which is a shame considering all the time they must have put in. Why show the map that way when majority of its users will never use it for nautical navigation?
https://maplibre.org/maplibre-gl-js/docs/examples/display-a-... |
| |
| ▲ | dan-robertson 8 hours ago | parent | next [-] | | I’m not sure it’s very useful to rehash an argument with very tenuous relation to the OP here. The normal reason to use the Mercator projection in these situations is (a) it’s what people are used to and (b) it preserves angles so if you zoom in on a street then up will still be north and roads that are at right angles in the real world appear to be at right angles on the map. The latter property is pretty desirable and hard to achieve without doing some weird transition between projections as you zoom. This matters more for Europe (and I suppose parts of British Colombia) where there is a high population density at latitudes that are pretty extreme in much of the world. I think Apple Maps has a pretty reasonable compromise here of transitioning from a globe to Mercator as you zoom, but this is a less nice UI with a mouse as you need to click to rotate the globe instead of pointing and zooming only. I don’t think there’s anything in this data that would make that unachievable – you just need to reproject the vector data a bit as you zoom out – but it takes some tricky mathematics to get right and so hasn’t been done yet. | | |
| ▲ | willtemperley 6 hours ago | parent [-] | | It's an important discussion because it's abundantly clear that almost nobody on this thread has a clue what they're talking about. Web Mercator != Mercator. I suggest most people on this thread need to go away ask the question "What's the difference between Web Mercator and Mercator". | | |
| |
| ▲ | dzogchen 8 hours ago | parent | prev | next [-] | | It's on our roadmap to support alternate projections, but as you can imagine it's a big project that so far nobody has been willing to pay for to implement unfortunately. MapLibre GL JS does support globe mode. https://maplibre.org/maplibre-gl-js/docs/examples/display-a-... May we should update our examples to use globe mode when showing examples, especially those that show a world map. We will take that feedback into consideration! You can use the Equal Earth projection with a plugin: https://equal.bbox.earth/maplibre-americas/ | | |
| ▲ | readyplayeremma 6 hours ago | parent [-] | | MapLibre's globe mode is both fantastic and performant. Also, it's literally just the one option to change it, and your tile formats/CRS don't need to change either. It's the easiest way to escape from web mercator projections with no real downsides that I have discovered yet. Also, there is a built-in control if you want to offer a button to toggle between web mercator view, and globe view, since it's all just rendering changes. |
| |
| ▲ | workmandan 8 hours ago | parent | prev | next [-] | | Web Mercator is the standard projection used on the web, if you think the we should use a different projection on the web then that's a completely separate argument | |
| ▲ | willtemperley 8 hours ago | parent | prev | next [-] | | It's actually worse than that because the Web Mercator projection is unusable for navigation too - it doesn't preserve angles or area! (Angles are nearly preserved). Well done Google. Slow handclap. The NGA advised it's likely to cause geolocation errors of up to 40km near the poles: https://www.gpsworld.com/nga-issues-advisory-notice-on-web-m... | |
| ▲ | bottled_poe 8 hours ago | parent | prev | next [-] | | Accuracy where it matters is why. Do you have a better suggestion for projecting a sphere onto a rectangle? | | |
| ▲ | einpoklum 8 hours ago | parent | next [-] | | I would not use such strong rhetoric as the GP, but I believe they probably mean we should lean towards using the Gall/Peters projection, which maintains lengths and areas, but not angles. (There are of course other projections with other interesting features; or you could take the same projection but center the world differently etc.) | | |
| ▲ | ecshafer 6 hours ago | parent | next [-] | | Why? Why is lengths and areas more important than angles? You have to choose one, its essentially arbitrary. Personally I find it more useful to know what is parallel to what and what is at which angles from what, than some size. We have globes, so we know what the "real size" of Greenland looks like... this has always been a silly argument from the overzealous online looking for right wrongs that don't exist. | | | |
| ▲ | willtemperley 6 hours ago | parent | prev [-] | | Web Mercator does not preserve angles. We're currently forced to use a projection that is strictly worse than what it was based on, the Mercator projection, created in 1569. Everyone on this thread needs to read this presentation entitled "Use Literally Anything But Web Mercator": https://www.esri.com/content/dam/esrisites/en-us/events/conf... Let's say that a bit louder shall we: USE LITERALLY ANYTHING BUT WEB MERCATOR. |
| |
| ▲ | willtemperley 8 hours ago | parent | prev [-] | | This comment is inaccurate! Web Mercator causes such large errors in geolocation that the NGA had to issue an advisory about it [1]. There is a whole science behind map projections and Google ignored it entirely when they created Web Mercator, which was a hack to divide the world into a quad tree. It was vaguely clever and utterly stupid at the same time. [1] https://web.archive.org/web/20140607003201/http://earth-info... | | |
| ▲ | willtemperley 6 hours ago | parent [-] | | > Accuracy where it matters is why Why the downvotes for correcting this laughable statement? Web Mercator is well documented as being extremely inaccurate. | | |
| ▲ | mmooss 3 hours ago | parent [-] | | Hi - I understand you feel strongly; your Web Mercator input is interesting. I would just focus on the intellectually interesting part - people might not get it; you can't control that or compel them to. You've been repeating essentially the same comment, writing in all caps (in some comments), complaining about downvotes, telling everyone they are idiots one way or another. None of those things are likely to be welcome. |
|
|
| |
| ▲ | mourner 4 hours ago | parent | prev | next [-] | | You can read more about why most web maps are like this and a quest to fix this in this article: https://www.mapbox.com/blog/adaptive-projections | |
| ▲ | trgn 8 hours ago | parent | prev | next [-] | | Web mercator is fantastic map. It's well known of course, so very helpful to orient. Plus, its square and easily tile-able, which is good for performance. Shapes of countries are preserved. Plus, the lines are straight, which works great for on screen. Neat and tidy. Who cares Greenland looks big when zoomed out. "Mercator distorts size" is one of those gis-nerd idee fixes, the first factoid they learn in class, and it overwhelms all thought. | | |
| ▲ | mmooss 3 hours ago | parent | next [-] | | > Who cares Greenland looks big when zoomed out. You never know - one day, the geography of Greenland could matter quite a bit to the rest of the world. | |
| ▲ | fragmede 2 hours ago | parent | prev [-] | | Maybe you shouldn't have skipped that class if you don't think it's important. |
| |
| ▲ | Flatterer3544 8 hours ago | parent | prev | next [-] | | You're a bit hasty, for the users that needs mercator projections, they should be able to get it, see: https://maplibre.org/maplibre-gl-js/docs/API/type-aliases/Pr... | |
| ▲ | lars_francke 8 hours ago | parent | prev | next [-] | | Because that's what everyone is used to. Maplibre supports different projections if you want. | |
| ▲ | xigoi 6 hours ago | parent | prev | next [-] | | Not everyone has a spherical monitor. | |
| ▲ | techterrier 8 hours ago | parent | prev [-] | | obligatory West Wing: https://www.youtube.com/watch?v=vVX-PrBRtTY | | |
| ▲ | ecshafer 6 hours ago | parent [-] | | This episode never made any sense at all. We already have globes for true sizes. |
|
|