尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
QGroundControl 离线地图(Offline Maps)完全指南:瓦片缓存、缩放级别与下载管理
无人机智能硬件【免费下载链接】qgroundcontrolCross-platform ground control station for drones (Android, iOS, Mac OS, Linux, Windows)项目地址https://gitcode.com/gh_mirrors/qg/qgroundcontrol点击查看免费下载导读QGroundControl 的离线地图Offline Maps功能允许用户在联网状态下预先将指定区域的地图瓦片map tiles缓存到本地从而在没有互联网连接的环境中正常浏览地图、规划任务与执行飞行监控。本文以官方用户指南为基础结合仓库内 OfflineMapEditor.qml、OfflineMapsSettings 与 QGCMapEngineManager 等源码实现系统讲解离线瓦片集合Tile Set的创建、缩放级别选择、下载进度管理、导入/导出与缓存容量配置读完即可在实机或模拟环境下完整掌握离线地图的使用流程与底层原理。一、什么是离线地图Offline Maps离线地图允许您缓存地图瓦片用于未连接到互联网时使用。您可以创建多个离线集合Tile Set每个集合对应一个不同的地理位置分别独立下载与管理。瓦片Tile地图服务如 Bing、Google、Mapbox、Esri 等将全球地图按金字塔层级切分为固定尺寸的图片单元QGroundControl 按需请求并缓存这些单元。集合Tile Set一次下载任务产生的瓦片集合包含名称、地图类型、地理边界左上/右下经纬度、最小/最大缩放级别、瓦片总数与总体积等元数据。从源码结构看QGCCachedTileSet见 QGCCachedTileSet.h是每个集合的核心数据模型保存了topleftLat/topleftLon/bottomRightLat/bottomRightLon覆盖区域、minZoom/maxZoom缩放范围、totalTileCount/totalTilesSize预计总量、savedTileCount/savedTileSize已下载量与errorCount失败数等属性而 QGCMapEngineManager.cc 则统一负责集合的增删改查、导入导出与下载任务的调度。二、进入离线地图设置页离线地图管理入口位于「设置Settings→ 地图Maps」页面。根据 Maps.SettingsUI.json 的配置该设置页包含 Map Provider地图提供商、Offline Maps离线地图、Tokens各提供商 API Token、Mapbox Login、Custom Map URL 以及 Tile Cache瓦片缓存容量等分组其中 Offline Maps 分组的组件为OfflineMapSettings其页面关键词为offline / download / cache / tile set。打开离线地图分组后页面主体为已有的瓦片集合列表每个集合条目由 OfflineMapInfo.qml 渲染显示集合名称下载状态与瓦片数量例如12.3 MB (1024 tiles)形式的进度文本状态指示圆点绿色表示下载完成complete红色表示未完成或存在错误颜色判断逻辑见 OfflineMapInfo.qmlEdit 按钮点击进入该集合的详细信息视图。页面下方提供三个操作入口由 OfflineMapSettings.qml 定义按钮功能可见性条件Add New Set打开全屏地图编辑器创建新集合始终可见导入/导出进行中禁用Import导入此前导出的瓦片集合文件需showOfflineMapImport选项开启Export将选中的集合导出为文件以便迁移到其他设备需showOfflineMapExport选项开启三、添加新集合Add New Set完整步骤这是原文档的核心操作流程下面结合源码逐布展开。3.1 打开全屏地图编辑器点击Add New Set添加新集合按钮后QGroundControl 会创建一个全屏的OfflineMapEditor实例组件定义见 OfflineMapSettings.qml并调用其addNewSet()函数见 OfflineMapEditor.qml地图类型mapType默认取当前飞行地图设置中的提供商与类型组合格式为Provider Type例如Bing Satellite地图中心与缩放级别会重置为当前飞行地图的视口resetMapToDefaults()随后通过handleChanges()将当前视口的边界经纬度与缩放级别实时同步给QGCMapEngineManager::updateForCurrentView()见 QGCMapEngineManager.cc用于估算瓦片数量与体积。3.2 命名集合右侧面板中的Name名称输入框会自动填入一个唯一名称Tile Set 001、Tile Set 002……该名称由QGCMapEngineManager::getUniqueName()生成保证不与现有集合重名见 QGCMapEngineManager.cc。如果手动输入的名称与已有集合重复界面会显示「Tile set with this name already exists」警告并阻止下载见 OfflineMapEditor.qml。3.3 选择地图类型Map type地图类型下拉框列出当前可用的地图提供商类型组合mapList支持 Bing、Google、Mapbox、Esri、Stamen、Eniro、VWorld 等提供商下的 Hybrid、Satellite、Street、Terrain 等类型。切换类型后地图会实时切换到对应瓦片源。此外还有一个Fetch elevation data获取高程数据复选框默认开启对应_fetchElevation属性勾选后下载地图瓦片的同时会额外拉取当前区域的高程地形瓦片用于三维地图与地形告警等场景。从 QGCMapEngineManager.cc 可以看出此时会为同一区域额外创建一个名为集合名 Elevation的独立集合其缩放级别固定为 1瓦片源为当前设置的高程提供商如 Copernicus。3.4 设定最小/最大缩放级别面板中央的Min/Max Zoom Levels最小/最大缩放级别区域包含两个滑块最小缩放级别滑块sliderMinZoom初始值取自设置minZoomLevelDownload最大缩放级别滑块sliderMaxZoom初始值取自设置maxZoomLevelDownload。滑块范围为 120步进为 1。当最小级别被拖到超过最大级别时最大级别会自动跟随反之亦然联动逻辑见 OfflineMapEditor.qml。滑动过程中会实时写入对应设置并触发handleChanges()重新估算。对应设置的取值范围与默认值定义在 OfflineMaps.SettingsGroup.json设置项类型最小值最大值默认值说明minZoomLevelDownloadUint3212013下载的最小缩放级别maxZoomLevelDownloadUint3212019下载的最大缩放级别maxTilesForDownloadUint32无源码未限制无100000单次下载允许的最大瓦片数量上限3.5 查看缩放级别预览与下载量估算左侧预览zoom previews对应原文档提到的「在左边您可以看到您选择的最小和最大缩放级别的预览」。界面会在左侧上下并排显示两个小地图minZoomPreview与maxZoomPreview分别以最小与最大缩放级别渲染当前区域见 OfflineMapEditor.qml并标注「Min Zoom: N」「Max Zoom: N」。点击预览区域可将其隐藏或通过「Show zoom previews」按钮重新显示。注意预览小地图使用 QGroundControl 专用插件Plugin { name: QGroundControl }不会重复消耗离线下载配额。Tile Count / Est Size瓦片数量 / 预估体积面板底部实时显示当前视口与缩放级别对应的瓦片总数与预估下载体积。这两个数值由QGCMapEngineManager::updateForCurrentView()计算遍历minZoom到maxZoom的每一级调用UrlFactory::getTileCount()累加各级瓦片数量与体积见 QGCMapEngineManager.cc若开启高程下载还会累加高程瓦片集合的估算值tileCountStr()/tileSizeStr()对两者求和。当瓦片总数超过maxTilesForDownload默认 100000时界面会显示醒目的Too many tiles瓦片过多警告同时 Download 按钮将被禁用防止误操作产生过大的下载任务。3.6 定位目标区域并开始下载在地图上拖动/缩放将目标区域调整到视口中央可配合左上角的 CenterMapDropButton 快速回到飞行器/GCS 位置确认名称、地图类型、缩放级别与下载量估算均符合预期点击右侧面板底部的Download下载按钮。点击后QGCMapEngineManager::startDownload(name, mapType)见 QGCMapEngineManager.cc会执行以当前视口边界左上/右下经纬度、缩放范围、估算体积与数量构造一个新的QGCCachedTileSet通过QGCCreateTileSetTask将其写入本地瓦片数据库集合保存成功后调用createDownloadTask()立即开始下载见_tileSetSaved槽函数QGCMapEngineManager.cc若勾选了高程下载还会同步创建并启动名为名称 Elevation的高程集合下载任务。下载过程以每批 256 个瓦片kTileBatchSize见 QGCCachedTileSet.h为单位从任务队列中取出通过QNetworkAccessManager并发请求瓦片并写入缓存数据库实现见 QGCCachedTileSet.cpp。四、管理已有集合查看、续传、取消、删除、重命名点击集合列表中的Edit按钮会进入该集合的详细信息视图showInfo()见 OfflineMapEditor.qml。系统会在地图上用红色半透明矩形标出该集合覆盖的地理范围并弹出信息面板展示集合名称可编辑后保存触发renameTileSet地图类型Zoom LevelsminZoom - maxZoomTotal该区域/级别组合下总的瓦片数量与体积Unique去重后的唯一瓦片数量与体积Downloaded已成功下载的瓦片数量与体积Error Count下载失败的瓦片数量失败数大于 0 时显示。信息面板底部提供以下操作按钮按钮行为出现条件Resume Download续传未完成的下载集合未完成且当前未在下载Cancel Download取消进行中的下载集合正在下载Delete删除该集合及其全部瓦片需二次确认集合已有已保存瓦片Ok / Cancel / Close保存修改如新名称并退出或直接退出—关于这些行为的实现续传resumeDownloadTask()先通过QGCUpdateTileDownloadStateTask将所有瓦片状态重置为待下载Pending再重新创建下载任务见 QGCCachedTileSet.cpp。取消cancelDownloadTask()置位取消标志等待当前批次结束见 QGCCachedTileSet.cpp。完成判定集合的complete属性为_totalTileCount _savedTileCount默认集合除外即已保存瓦片数达到预估总数即视为完成见 QGCCachedTileSet.h该逻辑在 QGCCachedTileSetTest.cc 中有对应单元测试验证。删除普通集合执行QGCCachedTileSet级删除deleteTileSet若删除的是默认集合System Wide Tile Cache即全局瓦片缓存则会触发QGCResetTask重置整个瓦片数据库——此时确认对话框会特别警告「这将删除所有瓦片包括您自己创建的集合」见 OfflineMapEditor.qml 与 QGCMapEngineManager.cc。五、导入与导出瓦片集合离线地图页面支持将集合导出为文件、并在其他设备上导入便于多台电脑/平板共享离线地图数据导出Export弹出「Export Selected Tile Sets」对话框勾选要导出的集合随后选择保存路径与文件名扩展名由_appSettings.tilesetFileExtension决定文件对话框过滤条件为Tile Sets (*.扩展名)。底层通过QGCExportTileTask将集合元数据边界、缩放、类型、创建时间与瓦片一并打包写入目标文件见 QGCMapEngineManager.cc。导入Import弹出「Import TileSets」对话框可选择Append to existing sets追加到现有集合或Replace existing sets替换现有集合两种策略对应_importReplace属性然后选择文件。底层由QGCImportTileTask完成导入完成后自动重新加载集合列表见 QGCMapEngineManager.cc。压缩包导入导入路径还可以是.zip、.tar.gz等压缩包——importArchive()会先将压缩包解压到临时目录从中查找*.db/*.sqlite瓦片数据库文件再执行导入见 QGCMapEngineManager.cc。导入/导出进行中时页面会显示带有Importing / Exporting文本与进度条的进度指示期间「Add New Set」等按钮被禁用见 OfflineMapSettings.qml。六、与离线地图相关的缓存与地图设置离线下载的瓦片与日常飞行浏览的瓦片共用一套瓦片缓存容量配置位于同一设置页的Tile Cache瓦片缓存分组参数定义见 Maps.SettingsGroup.json设置项默认值范围说明Max disk cachemaxCacheDiskSize1024 MB1262144 MB瓦片在磁盘上的最大缓存空间Max memory cachemaxCacheMemorySize桌面 128 MB / 移动端 16 MB11024 MB瓦片在内存中的最大缓存量修改后需重启 QGroundControl 生效qgcRebootRequired: true当磁盘缓存达到上限时旧瓦片将被自动淘汰因此下载的离线集合若超出磁盘缓存上限较早下载的瓦片可能被清除——规划大范围离线下载前建议先检查该项设置。另外需要注意离线下载的地图类型依赖 Maps.SettingsUI.json 中配置的提供商 Token使用 Mapbox、Esri、天地图、VWorld、OpenAIP 等受限提供商时需先在 Tokens 分组填入对应的 API Token 才能正常下载瓦片使用 Bing 等内置提供商则无需额外配置。七、源码与测试验证索引若希望深入理解离线地图模块的底层实现可从以下路径入手界面与交互OfflineMapEditor.qml、OfflineMapSettings.qml、OfflineMapInfo.qml设置定义OfflineMaps.SettingsGroup.json、OfflineMapsSettings.cc核心管理器QGCMapEngineManager.cc、QGCMapEngineManager.h集合数据模型与下载逻辑QGCCachedTileSet.h、QGCCachedTileSet.cpp单元测试QGCCachedTileSetTest.cc、QGCTileCacheDatabaseTest.cc、QGCMapEngineManagerArchiveTest.cc结语离线地图是 QGroundControl 在无网络环境下保持可用性的关键能力。掌握「添加集合 → 设定缩放级别 → 估算下载量 → 下载 → 续传/删除 → 导入/导出」这条完整链路并结合缩放级别上限120、默认下载上限100000 瓦片与磁盘/内存缓存容量等参数合理规划即可在野外作业、网络受限区域或跨设备部署场景中高效复用地图数据。赞分享无人机智能硬件【免费下载链接】qgroundcontrolCross-platform ground control station for drones (Android, iOS, Mac OS, Linux, Windows)项目地址https://gitcode.com/gh_mirrors/qg/qgroundcontrol点击查看免费下载相关推荐QGroundControl 地图设置完全指南地图源、离线瓦片、API Token 与缓存调优QGroundControl 地图设置完全指南地图源、离线瓦片、API Token 与缓存调优 导读 QGroundControlQGC作为跨平台地面站无人机智能硬件QGroundControl 地图设置全解析地图源选择、离线瓦片管理与缓存调优QGroundControl 地图设置全解析地图源选择、离线瓦片管理与缓存调优 QGroundControlQGC的 Settings → Maps 页面无人机智能硬件QGroundControl 地图配置详解地图提供商、离线瓦片集、API 令牌与瓦片缓存QGroundControl 地图配置详解地图提供商、离线瓦片集、API 令牌与瓦片缓存 QGroundControlQGC的地图设置页Maps集中管无人机智能硬件上一篇ps4-exploit-host完全指南如何在局域网轻松搭建PS4/PS5/Vita漏洞主机下一篇5分钟掌握GenomeScope快速基因组分析新手指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

HTML常用标签及属性速查:从分类、表单到CSS选择器的完整指南

HTML常用标签及属性速查:从分类、表单到CSS选择器的完整指南

简介:《HTML常用标签及属性》是一份面向Web前端初学者和需要快速回顾HTML知识的开发者的整理型Word文档。文档从HTML基础结构入手,系统分类讲解页面结构、文本格式化、列表、表格、表单及框架等常用标签,并重点对比了GET与POST两种提交方式的…

📅 2026/10/14 6:30:12
基于Spring Boot的茶叶销售管理系统设计与实现

基于Spring Boot的茶叶销售管理系统设计与实现

做茶叶销售管理系统这个项目,其实起因挺有意思。一位做茶叶生意的朋友找我抱怨,说用了好几套通用的进销存系统,总觉得别扭——茶叶等级、山头、年份、批次这些关键属性,在通用系统里根本没法精细管理,库存更是乱成一锅…

📅 2026/10/14 6:25:12
SpringBoot+Vue+MySQL动物领养平台全栈开发实践

SpringBoot+Vue+MySQL动物领养平台全栈开发实践

期末前最忙的那段日子,我身边好几个朋友都在为毕设选题发愁。有的纠结电商系统,代码写得差不多了又觉得没有特色;有的想搞人工智能方向的识别应用,结果发现自己和OpenCV不熟,越写越心虚。后来有人拿了一份题目清单给我…

📅 2026/10/14 6:25:12
MORE NEWS

更多资讯

📰

湖仓一体深度拆解:从技术原理到落地避坑指南

一次架构评审会上,有人提议“我们要不要上湖仓一体”,会议室里安静了几秒,然后大家开始各说各话:数仓负责人说“这不就是把数仓搬到数据湖上吗”,数据平台负责人说“我们已经在湖上做SQL了”,老板说“我关心…

📰

七轴机械臂之字形走线实战(二):从仿真到真机,第一次全程走线

系列第二篇。上一篇把仿真闭环跑通了:标定 → 工作空间扫描 → 稠密 IK → MoveIt2 执行,2953cm 的之字形在 RViz 里走得整整齐齐,TCP 平面偏差 mean 0.3mm。这一篇把同一条轨迹搬到真机上——中间隔着一套驱动、一条 坐标换算链、一个安全 w…

📰

新文档进来只能全量重建?把索引更新的账算清

版权与内容来源声明 本文为原创整理。文中涉及官方文档、开源仓库、论文与公开报道的内容,均在附表 A 中标注来源;引用官方原文保持原样,不作改写。文中命令、版本号与界面截图以本文成文时的实测/核验结果为准,标注「待验证」的部…

📰

429 一来就狂重试:退避时间预算怎么算

版权与内容来源声明 本文为原创整理。文中涉及官方文档、开源仓库、论文与公开报道的内容,均在附表 A 中标注来源;引用官方原文保持原样,不作改写。文中命令、版本号与界面截图以本文成文时的实测/核验结果为准,标注「待验证」的部…

📰

两万星标AI编程教程:项目驱动与实战踩坑经验分享

1. 从两万星标说起:一个AI编程教程的意外破圈两万颗星标,放在任何一个开源社区里都不是小数目。但真正让我意外的不是这个数字本身,而是某天朋友截图给我看——在某个AI助手的对话里,有人问“有没有适合新手入门的AI编程教程”&am…

📰

JSP房产中介管理系统部署实战:从环境搭建到二次开发全流程解析

最近帮一位学生朋友折腾了一套房产中介管理系统的JSP源码,项目包标题写得很直白:“jsp房产中介管理系统j32r6”,附带完整源码、数据库脚本、调试部署服务。这种带全套交付的Java Web项目,在课程设计和毕业设计阶段特别常见。说句实…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬