How to get offline maps

Hello.
I need a map to use in QGC.
Of course I know how to get a map at qgc.
But this is very slow.
Is it possible to download files from laptops and apply them to qgc?

I need a very large map.
Probably taking these tiles in gcs would take months…

Help!!

If you need a very large map then only download a very low min/max zoom level so you don’t need massive megabytes of information.

I want to download offline map tiles with elevation data for a larger geographical area at zoom levels 10–14. Since QGC restricts large-area downloads, I’m considering removing these restrictions in the source code. The dataset may be around 60 GB.

Apart from download time and storage, could this cause high RAM usage, slow map loading, or crashes during offline use? Are there any QGC map engine or tile-cache limitations I should consider?

Hi cfasna2,

For a dataset of approximately 60 GB covering zoom levels 10–14, I would be cautious about simply removing QGroundControl’s offline download limits.

The total dataset size does not directly translate into RAM usage. Map rendering normally works with a subset of the available tiles, but several other limits can become important at this scale.

I would investigate the following areas:

  1. Tile database and indexing: Large numbers of individual tiles may increase database size, lookup overhead and maintenance costs. The number of tiles can matter as much as the total storage size.

  2. Cache behaviour: Disk-cache capacity, memory-cache limits, eviction policies and the distinction between downloaded offline tiles and temporary cached tiles should be examined separately.

  3. Map rendering: Displaying a small geographic viewport should not require loading the entire dataset. However, rapid panning, zoom changes and tile decoding can still cause memory or responsiveness problems.

  4. Download management: A 60 GB operation should ideally support incremental downloads, interruption recovery, progress tracking and sufficient free-space checks.

  5. Elevation data: I would treat terrain elevation separately from visual map tiles. It is important to verify how the elevation provider stores and retrieves its data, rather than assuming that increasing the map tile limit also solves offline elevation coverage.

In the QGC source, useful starting points are:

  • src/QtLocationPlugin/QGCMapEngineManager.cc

  • src/QtLocationPlugin/QGCTileCacheWorker.cpp

  • src/QtLocationPlugin/QGCTileCacheDatabase.cpp

  • src/QtLocationPlugin/QGeoFileTileCacheQGC.cpp

My recommendation would be to test progressively larger datasets while measuring peak RAM, database size, tile lookup latency, map responsiveness and application startup time.

I would not recommend removing the download restrictions until the actual limiting mechanism has been identified.

One important question: are you planning to download the complete dataset through QGC itself, or do you already have externally generated map tiles and elevation data that you want to import?

That distinction would help determine the most appropriate implementation approach.

Best regards,
Yiğitcan Öztürk
PAMILANGA LIMITED

Which could in turn get us banned from using those servers. Don’t do that!

Thanks for the pointers. We are downloading through QGC itself, not importing external tiles. I will measure RAM, lookup latency and startup time with progressively larger sets before changing any limits.

One question: at tens of GB and millions of tiles, have you seen lookup latency or startup time become a problem, and are several smaller sets better than one large set?

Understood, I won’t remove the download limits. Is there a recommended way to get offline map coverage (imagery and elevation) of a large area at zoom levels 10-14 without risking a ban from the tile servers? For example, using a provider or licence that allows bulk offline use, or importing tiles and elevation data we already have. If importing is the right route, what format does QGC expect?

Hi cfasna2,

Thanks for clarifying that you’re downloading directly through QGC.

I haven’t personally benchmarked QGC with a 60 GB offline map database or millions of tiles, so I wouldn’t want to claim a specific lookup latency or startup-time threshold.

However, I checked the current QGC source, particularly QGCTileCacheDatabase.cpp and QGCMapEngineManager.cc.

The SQLite schema includes shared tile storage, tile-set associations and download-tracking tables, with indexes for several important lookup paths.

This suggests that splitting the same geographic coverage into multiple offline tile sets does not necessarily provide a database performance benefit. Multiple sets may still share the underlying storage and indexing structures.

My recommendation would be:

  1. Use smaller sets for operational manageability, such as regional coverage, easier download recovery and incremental validation.

  2. Do not assume smaller sets improve lookup performance without measuring it.

  3. Compare one large set against several smaller sets containing approximately the same total number of unique tiles.

  4. Measure cold-start time, first-map-render time, random tile lookup latency (median and p95), peak RAM and database size.

  5. Repeat the measurements after restarting QGC, since warm-cache results may hide storage-related bottlenecks.

It would also be useful to distinguish time spent opening the database from time spent loading the offline tile-set list and rendering the initial map.

At this scale, I would first benchmark the existing implementation rather than remove its limits immediately.

If you can share the QGC version, operating system, storage type (SSD/HDD) and your first benchmark results, we can narrow down whether the bottleneck is in database access, tile-set management or rendering.

Best regards,
Yiğitcan Öztürk
PAMILANGA LIMITED

Thanks, that helps! I’m on Windows,

One thing I’m curious about: what’s the usual way to get a larger area offline without removing the limits or risking a ban from the servers?

Hi cfasna2,

On Windows, I would recommend keeping QGC’s normal offline map download workflow and working within the map provider’s permitted usage limits rather than modifying the downloader to bypass restrictions.

For larger geographic coverage, a practical approach is to divide the area into manageable regional tile sets and use different zoom ranges depending on the level of detail actually needed.

For example:

  • Download broad regional coverage at lower zoom levels.

  • Reserve zoom levels 13–14 for smaller operational areas where detailed imagery is necessary.

  • Download the regions sequentially, allowing each operation to finish before starting the next.

  • Verify that the selected map provider permits the intended offline storage and download volume.

This approach reduces unnecessary tile downloads and makes failed downloads easier to recover from. It does not, however, bypass provider quotas or guarantee that a large aggregate download is permitted.

If you genuinely need approximately 60 GB of offline coverage, I would also consider a map-data provider that explicitly supports licensed bulk downloads or offline distribution, rather than relying on a public interactive tile service.

For elevation data, I would check QGC’s supported terrain-data workflow separately, since imagery tiles and elevation data have different requirements.

One question: which map provider are you currently selecting in QGC (Bing, Google, Esri, OpenStreetMap or another provider)?

That will help determine which offline acquisition options are appropriate.

Best regards,
Yiğitcan Öztürk
PAMILANGA LIMITED

currently selecting Bing as the map provider

Thanks for confirming that you’re using Bing.

For Bing Maps specifically, I would be cautious about attempting a 60 GB offline download through QGC.

Even if QGC technically allows you to create multiple offline tile sets, splitting a large download into smaller regions does not remove Bing’s licensing restrictions or download quotas.

My recommendation would be:

  1. Use QGC’s existing offline map functionality only within the permissions and limits applicable to your Bing Maps access.

  2. Avoid increasing download limits or using automated workarounds to retrieve large quantities of Bing tiles.

  3. For extensive offline coverage, investigate a map provider or dataset that explicitly permits bulk downloading and offline storage.

  4. Verify that the alternative data can actually be used with your QGC version before committing to a large download.

OpenStreetMap-derived data may be an option, but the public OpenStreetMap tile servers are not intended for bulk offline downloads. You would need an appropriate offline dataset or a provider that explicitly supports this use.

For your Windows setup, I would first establish the required geographic area, imagery type and zoom levels, then choose a legally suitable data source and compatible QGC workflow.

Are you specifically looking for satellite imagery, or would a detailed street/topographic map also meet your requirements?

That distinction will help narrow down the practical options.

Best regards,
Yiğitcan Öztürk
PAMILANGA LIMITED

yes.i 'm looking for satellite imagery

Thanks for confirming.

Since you specifically need satellite imagery, I would separate the problem into two parts:

1. Obtaining imagery with appropriate offline rights

For approximately 60 GB of coverage, I would look for a source that explicitly supports bulk downloads and offline use, rather than trying to extend QGC’s Bing tile downloader.

One possible source is Copernicus Sentinel-2 imagery, which is available for download, although its spatial resolution (typically 10 m for the highest-resolution bands) is substantially lower than detailed commercial satellite basemaps.

If you need higher-resolution imagery, you may need a provider offering an appropriate offline imagery licence.

2. Making the imagery usable in QGroundControl

This is a separate technical question.

Downloading GeoTIFFs or another geospatial imagery format does not automatically make them compatible with QGC’s existing offline map cache.

The imagery may require tiling, georeferencing and an appropriate map-provider integration. I would verify the supported import or integration workflow for your specific QGC version before downloading a large dataset.

For now, I would avoid modifying QGC’s Bing download limits.

One final detail would help narrow this down: what ground resolution do you need?

For example, is 10 m/pixel sufficient for regional flight planning, or do you need approximately 0.5–1 m/pixel to identify roads, buildings and smaller ground features?

That determines which satellite imagery sources are realistically suitable.

Best regards,
Yiğitcan Öztürk
PAMILANGA LIMITED

Sounds good. For regional flight planning, around 10 m/pixel would be enough for us. I don’t need to pick out buildings or small features.

QGC has a file format for importing map tiles. Get AI to build your own tool which downloads from the server of your choice and writes out a file in QGC import format. Import the file.

Thanks, Don, that is a very helpful direction.

I checked the QGroundControl source and confirmed that the map engine provides importSets() / exportSets() functionality, with imports handled through QGCImportTileTask.

Given that 10 m/pixel is sufficient for cfasna2’s regional flight-planning use case, a permitted satellite imagery source and a QGC-compatible tile archive generator seem like a practical approach.

I would suggest starting with a small proof of concept:

  1. Obtain a small satellite imagery dataset with appropriate offline-use permissions.

  2. Convert it into QGC’s actual import archive format.

  3. Import it into QGC 5.1.5 on Windows.

  4. Verify map rendering with the network disconnected.

  5. Scale up only after the format and provider compatibility are confirmed.

One detail worth checking is whether externally generated imagery can be imported under an existing map-provider identifier, or whether a custom provider integration is required.

I can help investigate the archive structure and develop a reproducible converter if that would be useful.

Best regards,
Yiğitcan Öztürk
PAMILANGA LIMITED

Thank you @yigitcan-ozturk @DonLakeFlyer