Client side rendering in Maps
In order to realistically support offline maps in GNOME Maps we need to move to some kind of client side rendering. We want to get the described data from OpenStreetMap, possibly via some intermediate format, and then render the map locally.
This will require work, probably mostly in libchamplain.
1. What we have
Right now libchamplain downloads graphical map tiles in the form of PNG or JPEG data and renders them using Clutter. The amount of data this would generate client side makes it unfeasible for offline support.
2. What we want
If we instead could move to some kind of vector tiles we would then download data that we would render into an image on the client side. Since vector data is smaller than a rendered image this would make it possible to offer download of regions and an offline mode. Using vector tiles, rather than downloading bounding-boxes of raw OpenStreetMaps data would also make this easier to fit in with the tile-based architecture of libchamplain.
3. What needs to be done
- Choose a vector tile format
Add a renderer for the chosen format to libchamplain
- Package it? GObjectify it? Re-implement it?
Write our own, vector-tile-glib ftw!
- Add infrastructure to generate and serve vector tiles from somewhere.
- tiles.gnome.org/vector/X/Y/Z.format?
- Static files only?
- Generate on the fly?
Add offline support to Maps and libchamplain
- Possibility to select a region and download the vector tiles needed?
Have libchamplain be able to function on client side data only.
- Implement our own CSS to style the map!
- Offline search
- Would it be feasable to offer search capabilities on downloaded data while offline?
- Possible implement a local "mocked" Nomanatim search implementaion, maybe only matching on names?