This python program takes rasterised .mbtiles files and extracts the images and places them into the correct directory structure /${z}/${x}/${y}.png
that mimicks OpenStreetMap URI tile structure. This is to allow for offline use of OpenStreetMaps, and I will be using Flutter_Map along with my own images for offline maps.
In short, .mbtiles is a SQLite database file, with tile data stored as binary objects (BLOBS) in the database. There are two main formats these BLOBS can be for .mbtiles:
- PBF for vectored tiles (think mathematical points, lines, polygons)
- PNG for rasterised tiles (images).
This script only extracts the data from within the .mbtiles (it does not convert the data). This script only works for Rasterised .mbtiles that are already in .PNG format.
OpenStreetMap says:
Apart from very limited testing purposes, you should not use the tiles supplied by OpenStreetMap.org itself. OpenStreetMap is a volunteer-run non-profit body and cannot supply tiles for large-scale commercial use. Rather, you should use a third party provider that makes tiles from OSM data, or generate your own.
As far as I see, OpenStreetMap only offers MBTiles in PBF format which is a vectored based format. This script will not work with this format.
There are various ways to download .mbtiles in PNG format, below is a OSX method:
This guide will go through the steps for compiling map data, downloading a specific area, customise the map, then export to mbtile. Warning! For Mac, when you install TileMill.app, it currently fails to start. Go into TileMill > Updates Preference > check Install Developer Builds.
Make sure you have python3 install.
python3 mbtilesToPngs.py -i path/to/.mbtiles
For example:
python3 sqliteReader.py -i ./OSMBright.mbtiles
Read Here
And here
I've added option to convert TMS Tile Coordinates to Google/Bing/OSM Tile Coordinates. Just use -tms
when running.
This project is licensed under the MIT License
Thank you © OpenStreetMap (and) contributors, ODbL for the data!
Thank you AppTreeSoftware for Flutter_Map