Several services offer so-called XYZ raster maps, that you can add to QGIS.
Use the following script to download an online map to a folder.
Beware of the zoom level, because increasing level will download exponentially more tiles than the previous on.
Each zoom level is comprised of 2^(2×n)
tiles !
Also, check the terms and conditions of the service, they don't really expect people to suddenly download 1048576 tiles (all level 10).
#!/bin/bash
zoom=$1
cote=$(( 2**zoom ))
echo "$cote -> $(( cote**2 ))"
set -x
mkdir -p "$zoom"
for x in $(seq 0 "$(( cote - 1 ))"); do
mkdir -p "$zoom/$x"
for y in $(seq 0 "$(( cote - 1 ))"); do
wget --no-clobber -O "$zoom/$x/$y.format" "$URL/$zoom/$x/$y"
#mogrify -format jpg "$zoom/$x/$y.format"
done
done
Edit the script (replace $URL and format), you can use the mogrify command (part of imagemagick) to convert images to many formats such as png, jpg...
Then run it with ./script.sh 1
for zoom level 1 and so on.
You end up with several folders full of tiles that can the be converted to MBtiles with mb-util:
./mb-util ./your-folder output.mbtiles --image_format=jpg
mb-util
only support png, jpg, webp or pbf (PBF is for vector tiles)
You can the add the .mbtiles
file as a QGIS layer, which will load the tiles depending on your current zoom.
If you don't want to suddenly download lots of files, you can also set up a caching proxy such as agorf/tileproxy