
玩 QGC 这些年最让我上火的不是调参而是地图源。默认的谷歌图源看着全可真到外场干活经常是底图灰成一片网格块等了半天才出来航线画到一半地图没了这感觉谁用谁知道。后来我把 QGC v4.0.x 的地图源换成高德/天地图瓦片情况立刻就不一样了道路、水系、地名都能正常加载飞行前看场地、规划航点都踏实得多。这篇保姆级教程就是把整个替换过程拆开讲透——为什么默认图源会废高德和天地图哪个更适合 QGCURL 模板到底怎么填以及替换之后有哪些绕不开的坑。手里有 PX4/ArduPilot 飞控、平时用 QGC 规划航线的人可以直接照着抄刚入坑地面站的新手看了也不会迷路。1. 为什么非要换掉谷歌地图源QGC 地图机制的坑1.1 默认谷歌图源的几个老大难QGC 从 v4.0.x 开始默认地图源里带了一组谷歌地图接口。这东西在部分网络环境下加载很不稳定时好时坏尤其是到了一些偏僻的外场手机热点信号本来就一般地图瓦片经常拉到一半就超时然后整个底图区域变成灰块。你要是正画着航线突然底图没了那感觉就跟导航到半路屏幕黑了一样心里发慌。另一个问题更隐蔽谷歌地图接口经常变。QGC 里内置的地图地址是写死在代码里的谷歌那边接口一调整老地址就失效结果就是更新到某个小版本后底图大面积白屏。你以为是网络问题重启软件也没用其实就是内置图源过期了。这种情况这两年特别频繁社区里隔三差五就有人发帖问“为什么 QGC 地图不显示了”十有八九是内置谷歌源的问题。第三个问题是使用体验上的。谷歌影像图在海外一些地区确实全但国内很多场景下高德和天地图的路网信息、地名标注反而更新更快尤其是乡镇级别的道路、新建的小区高德基本都齐了谷歌源反而跟不上。说白了不是谷歌不好是“在 QGC 里用谷歌源”这件事本身太不稳定换掉是非常实际的选择。1.2 QGC 的地图渲染原理几句话讲明白要换地图源得先知道 QGC 是怎么把地图画出来的。QGC 用的是典型的瓦片地图机制类似网页上常见的滑动地图把整个世界按 Web 墨卡托投影切割成无数张 256x256 的小图片每张图片叫一个瓦片通过“缩放级别 行列号”来唯一确定。地图加载时QGC 会根据当前视角计算出需要哪些瓦片然后按规则向服务器请求再把拿到的瓦片拼成一张大底图。关键点在于“向哪个服务器请求、URL 长什么样”是完全可配置的。QGC 内置的谷歌、必应、OpenStreetMap 等图源本质上就是一组写好了的 URL 模板。我们要做的就是把 URL 模板替换成高德或者天地图的地址让 QGC 去拉国产图源的瓦片。这项工作在 QGC 的设置界面里就能完成不需要改代码、不需要编译只是很多教程没把这一步讲清楚导致不少人卡在“Custom URL 到底填什么”上。所以整个替换过程可以归纳成几句话选对图源 - 拿到 URL 模板 - 填进 QGC - 清掉旧缓存 - 验证显示。接下来我先解决“选哪个图源”的问题这个选择直接决定你后面会不会踩大坑。2. 地图源选型高德、天地图的坐标系差异是最大变量2.1 三个坐标系WGS-84、GCJ-02、CGCS2000选地图源之前必须先搞清楚坐标系。很多新手上来就把高德瓦片地址填进去地图能出但飞机的图标飘在路边几十米甚至几百米外还以为是 GPS 信号不好折腾半天。实际上问题不在 GPS而在坐标系。先记三个名字。WGS-84 是 GPS 芯片默认输出的坐标体系QGC 里飞行器位置、航点经纬度基本都是 WGS-84。高德地图用的则是 GCJ-02俗称“火星坐标系”它是在 WGS-84 基础上做了一层非线性的偏移加密偏移量通常有几百米。还有一个 CGCS2000这是国家大地坐标系和 WGS-84 在绝大多数场景下差异极小差在厘米级到分米级对无人机地面站来说基本可以忽略。用一个生活类比WGS-84 和 CGCS2000 就像是两把几乎一样的尺子刻度线就差那么一丁点量出来的结果肉眼分不出差别。GCJ-02 则是在这把尺子外面包了一层软套尺子还是那根尺子但你看刻度的时候总差出一截。如果你拿着 WGS-84 的坐标去对 GCJ-02 的地图瓦片那可不就偏了么。2.2 选型结论首选天地图高德慎用把坐标系搞清楚以后选型就简单了。我的建议非常明确QGC 里做航线规划首选天地图的_w非加密瓦片套件用起来最稳高德瓦片作为临时查看底图可以但别拿它当精确规划的地图源。为什么这么说天地图官方提供了两套瓦片坐标系带_w后缀的比如vec_w、img_w是 CGCS2000 基准和飞机的 WGS-84 坐标几乎一致飞机图标能正确压在道路上航点画出来和实际位置对得上。带_c后缀的比如vec_c是经过国测局加密的坐标实际效果和高德一样会有偏移。如果不小心选了_c你又会看到飞机到处飘的诡异现象。高德瓦片当然也能用它的 URL 不需要申请 key直接填进去就能出图路网新鲜度也不错。但高德是 GCJ-02用在 QGC 里飞机位置会整体偏移。你要是只拿来看个大致地形、确认目标区域在哪那它能用但要画航点让飞机精准飞到某个位置那就别指望了。除非你愿意自己写一套 WGS-84 到 GCJ-02 的纠偏逻辑但 QGC 原生不支持这个折腾成本太高。下面这张表是我实际对比后的结论可以直接参考对比维度天地图_w套件高德地图瓦片坐标系CGCS2000与 WGS-84 几乎一致GCJ-02存在几百米偏移QGC 航线规划推荐不推荐是否需要 key需要申请个人免费配额够用不需要路网更新国内较及时非常及时影像清晰度部分区域一般影像和矢量都不错合规性按天地图条款个人学习可用个人临时查看可以别批量抓一句话总结图源能出图只是“能不能用”的第一步坐标对不对才是“能不能好好用”的关键。想在 QGC 里认真规划任务就直接上天地图。3. 保姆级实操QGC v4.0.x 配置高德/天地图瓦片全流程3.1 下载安装 QGC v4.0.x替换地图源之前先确认你用的 QGC 是 v4.0.x 或更新的版本。老版本不是不能设置自定义地图源但菜单结构和参数提示不一样按本文操作可能对不上号。QGC 官方有稳定版发布渠道直接下载对应系统的安装包就行。Windows 用户拿到的是 exe双击安装Linux 用户拿到的是 AppImage需要先给执行权限命令行里运行chmod x QGroundControl.AppImage再双击运行Android 用户直接在应用商店或官网下 APK装完打开界面和 PC 版略有区别但地图源设置入口是一样的。需要注意QGC 首次启动会下载一些飞行协议和地图相关组件建议在网络通畅的时候装。装完先打开软件确认能正常进入主界面再继续下一步。如果你在 Linux 下运行没反应多半是缺少 Qt 相关依赖用发行版的包管理器装上libqt5*系列的常见依赖库基本能解决。3.2 获取天地图 key天地图的瓦片服务需要申请一个 tk 密钥否则请求会被拒绝。流程不复杂打开天地图的官方网站注册账号进入控制台找到“应用管理”或“创建应用”一栏新建一个应用应用类型选“浏览器端”。创建成功后系统会给你一串以字母和数字组成的 tk 字符串复制保存好一会儿要粘贴到 QGC 里。这里有几个容易踩的坑。第一应用类型一定要选对。QGC 请求瓦片的方式和网页浏览器类似选“浏览器端”比较合适选成服务端类型在某些场景下可能因为 IP 和域名绑定规则导致请求失败。第二密钥字符串复制时别多一个空格少一个字符这玩意儿错一个字母就是全线白屏。第三如果你的 tk 是用在某个特定域名下的而 QGC 本机请求时 Referer 不符合要求也可能被拒绝这时候回到控制台检查应用是不是“浏览器端”必要时重新创建一个。天地图的个人开发者配额对无人机地面站来说完全够用。正常画航线、加载地图消耗量很小不需要担心会用完。但要注意这配额是给正常使用的不是让你写脚本来批量下载整个城市瓦片的后面我会专门说这个问题。3.3 配置 Custom URL 模板拿到 key 以后重点来了把地图源地址填进 QGC。操作入口在 QGC 顶部的设置齿轮 - General通用设置- Map Provider地图提供商。正常情况下下拉列表里有一堆预置选项比如 Bing 卫星图、OpenStreetMap、谷歌等等。我们要选的是最下面的 “Custom URL” 或“自定义 URL”。选完之后界面里会出现一个文本输入框用来填写瓦片 URL 模板。天地图矢量底图的标准模板长这样https://t0.tianditu.gov.cn/vec_w/wmts?SERVICEWMTSREQUESTGetTileVERSION1.0.0LAYERvecSTYLEdefaultTILEMATRIXSETwFORMATtilesTILEMATRIX{z}TILEROW{y}TILECOL{x}tk你的keyQGC 自定义 URL 文本框里的占位符有两种常见写法。一种是{}形式就是上面的{z}、{y}、{x}另一种是%形式QGC 里通常默认示例是https://tile.openstreetmap.org/%1/%2/%3.png其中%1对应缩放级别 z%2对应 x%3对应 y。如果你在输入框下方看到的是%形式的提示那么天地图的地址要写成这样https://t0.tianditu.gov.cn/vec_w/wmts?SERVICEWMTSREQUESTGetTileVERSION1.0.0LAYERvecSTYLEdefaultTILEMATRIXSETwFORMATtilesTILEMATRIX%1TILEROW%3TILECOL%2tk你的key看到区别了吗TILEMATRIX是缩放级别 z对应%1TILECOL是 x对应%2TILEROW是 y对应%3。这个对应关系一旦搞反地图是出不来的或者出得乱七八糟。如果你不想申请 key只是临时看看高德的地图也可以用高德的矢量瓦片模板https://webrd01.is.autonavi.com/appmaptile?langzh_cnsize1scale1style8x{x}y{y}z{z}高德模板不需要 key填进去通常能直接出图。但请记住前面说的坐标系问题这图只能当个“大概的地形底图”别拿来画精确定位航点。另外天地图除了矢量底图还有影像图。想用卫星影像把模板里的vec_w改成img_wLAYERvec改成LAYERimg就行。你可以先在浏览器里用上面的地址访问一下能看到瓦片图片就说明模板没问题再往 QGC 里填。3.4 清理缓存并验证配置填完别急着说成功还有一个关键步骤清缓存。QGC 会把加载过的瓦片缓存在本地这是个好东西能省流量加快加载但也是换图源后最常见的“鬼打墙”原因。你明明已经把地图源换成天地图了界面里显示的却还是旧图或者新旧图混着来大概率就是旧缓存没清干净。清缓存的办法有两种。第一种是在 QGC 设置里找到缓存管理页面点 Clear Cache 清空。第二种更彻底关掉 QGC直接删除缓存目录。Windows 下一般在C:\Users\你的用户名\AppData\Local\QGroundControl\CacheLinux 下在~/.cache/QGroundControl。删完重新打开 QGC地图引擎会重新按新图源拉取瓦片。清完缓存之后做验证。先把地图随便拖到一个你熟悉的城市或作业区域然后逐级放大缩小确认道路、地名、建筑轮廓都能正常出现。接着在地图上放一个航点对比一下航点经纬度和实际地物位置是否一致。如果你用的是天地图_w偏差应该很小直观感受是飞机图标能落在正确的道路上如果用的是高德你会明显看到位置和地图地物对不上这时候别怀疑 GPS就是坐标系的问题。4. 瓦片原理与调参看不懂也能直接抄看懂更好4.1 瓦片编号规则z、x、y 到底怎么来的有朋友填完模板能出图但不知道{z}、{x}、{y}这些参数到底代表什么后面一旦遇到模板微调就抓瞎。这里我用最短篇幅讲清楚。瓦片地图的世界是一个“金字塔”结构。缩放级别 z 从 0 开始z0 时全世界是 1 张瓦片每增加 1 级横向和纵向各切成 2 份所以瓦片数量变成原来的 4 倍。在某个 z 级别下整个世界被分成2^z列乘2^z行x 是列号从西到东从 0 开始数y 是行号绝大多数在线地图包括高德、天地图、OSM都是从北到南从 0 开始数这叫 XYZ 规则。这个规则能解释很多现象。比如你填了某个自定义图源结果地图上下颠倒或者上下位置错乱那多半是 y 轴方向反了。部分 GIS 服务用的是 TMS 规则y 从南到北开始数这时需要把 y 做一个翻转换算公式是y_tms 2^z - 1 - y_xyz。QGC 里如果碰到上下颠倒就在 URL 的{y}参数上做这个翻转处理不过高德和天地图都用的标准 XYZ 规则正常情况下不需要动。4.2 缩放级别与清晰度的关系另一个常见疑惑是为什么地图放大到某一级就变糊了或者再放大就空白了每个瓦片服务都有自己支持的缩放级别范围。高德和天地图一般在 3 到 18 级之间有些区域影像数据只到 16 级你硬是要放到 18 级服务器没有对应瓦片返回的就是空白块。QGC 本身不会限制级别它只是按当前视图请求对应 z所以超出图源支持范围就会显示空白。解决方法是把地图缩回到支持级别内一般飞行规划用到 15 到 17 级就非常清晰了再高意义不大。4.3 进阶影像与注记叠加的想法有朋友问过能不能用天地图卫星影像当底图再把道路和地名叠上去理论上可以很多 GIS 软件里这叫“图层叠加”。QGC 的地图引擎一次只支持一个底图源没有原生的多图层叠加界面所以普通用户不建议折腾。我的做法很简单直接用天地图vec矢量图。它自带道路、地名、水系、绿地等要素对飞行规划来说信息量足够不用非得卫星影像。如果你确实需要看卫星影像和地物现状可以把图源临时切成img_w影像看完了再切回vec_wQGC 的地图切换非常快完全不影响干活。这种“按需切换”比想着怎么叠加图层要实用得多。4.4 离线任务区的预缓存技巧外场飞行的网络情况谁都说不好有时候现场 4G 信号就是差地图一直转圈。好在 QGC 自带离线地图缓存功能可以提前把任务区域的瓦片下载到本地。操作思路是在信号好的地方把地图切到天地图缩放到你需要的最大级别然后在任务区域附近多拖动、多缩放一阵子让 QGC 把所需瓦片都拉进缓存。QGC 的缓存就是本地文件加载过的瓦片会自动存下。到了外场没有网的时候只要缓存里有对应区域的瓦片地图照样能显示。这个技巧尤其适合在固定作业区域反复飞的情况缓存一次能省后面很多事。如果你想要更精细的离线区域控制可以在 QGC 的“离线地图”功能里按矩形范围下载指定级别的瓦片这在设置菜单里有专门入口。我的经验是把任务区域往外扩个一两公里级别选到 16 级基本就能覆盖日常需求。5. 常见问题排查与避坑实录5.1 速查表地图不出来先看这里换了图源之后总会有这样那样的问题。我把这几年遇到的情况整理成了一个速查表按照这个顺序查90% 的问题能当场解决。现象可能原因解决办法全白屏一张瓦片都不出URL 模板参数顺序错误检查 z/x/y 或 %1/%2/%3 的对应关系全白屏参数看起来也对天地图 key 无效或类型不对回控制台确认 tk 字符串应用类型改“浏览器端”地图能出但飞机/航点偏出去几百米用了 GCJ-02 图源高德或天地图_c换成天地图_w套件地图上下颠倒或位置错乱瓦片 y 轴规则不匹配做 y 翻转y 2^z - 1 - y换源后还是旧图本地缓存未清干净清 QGC 缓存或删除缓存目录低级别有图放大到 18 级空白瓦片服务最高级别限制缩回 16 级左右使用地图偶尔出图很快又灰块key 配额耗尽或网络不稳检查 key 状态换网络再试5.2 几个容易忽略的坑第一个坑是密钥分享问题。天地图 key 和你的账号绑定有些人做好模板后喜欢发群里分享结果 key 被一堆人用触发限流或者被停用。自己用的 key 自己保管好不要写进公开的代码仓库或博文里。第二个坑是“看不出偏移”的假象。用高德模板在偏远地区看地形时偏移往往不太明显因为周围没有道路做参照等到有道路、有建筑物的地方偏移立刻就能看出来。有些新手一开始用高德没问题到了市区作业才发现位置全飘差点造成飞行事故。所以还是那句话规划任务就用天地图别贪图省事。第三个坑是版本升级。QGC 从 v4.0.x 升级到更新的版本后自定义地图源的设置菜单可能会变旧的配置不一定能平滑迁移。升级前先截个图保存一下当前地图源配置升级完如果地图不显示了把配置重新填一遍通常就能恢复。第四个坑是滥用图源。天地图和高德的瓦片接口都是给人正常使用的不是用来写脚本批量抓数据的。有人图省事写个循环把整个城市 18 级瓦片全抓下来结果 IP 被封key 被停还给服务器造成负担。这种事千万别干个人飞行规划用到的瓦片量很少正常使用完全够一旦封了就得不偿失。5.3 实操心得不同情况下我用哪种配置从实际飞行的角度我的固定配置是这样的日常航线规划用天地图vec_w矢量图信息全面坐标准确需要看场地实际地貌时切成img_w影像图临时给朋友演示或者只看个大范围地形偶尔用一下高德矢量图但不会在它的地图上画正式航点。另外我一般会在 QGC 里同时记住两种配置一个“天地图矢量 key”放正式用一个“高德矢量”放应急用。这样某一天天地图接口抽风或者 key 到期切换一下还能继续干活不至于在外场被地图问题卡住。地图源这东西说白了是工具不是越多越好平时把最稳的一套调好比追求花活重要得多。6. 最后再聊几句实在的说实话QGC 默认给的谷歌图源本身设计得不算差但在实际飞行场景里确实顶不住不稳定、接口老变、加载慢换掉是迟早的事。我自己的体会是换天地图不是说高德不好而是天地图_w坐标系和飞行器 GPS 坐标天然对得上这才是地面站最看重的点。新手如果第一次搞不定别急躁照着三个方向排查一看 URL 里 z/x/y 有没有放到正确位置二看 key 有没有复制完整、应用类型对不对三看缓存有没有清干净。这三个问题占了地图源问题的大头。清缓存这个动作尤其容易被忽略但确实特别影响结果改完配置一定记得清一次。替大家踩过这么多坑之后我的态度是地图源配置看着像技术活本质上就是个“选对源、填对参数、验证坐标”的过程所有步骤熟悉之后五分钟就能搞定。希望这篇教程能帮你在 QGC v4.0.x 上用上顺手的国产图源出门飞行不用再被底图问题拖后腿。最后再提醒一句不管用哪家图源都按人家的服务条款来个人学习、飞行规划正常用配额足够真要大规模商用就去申请对应的商业授权服务。祝大家的飞机都能顺利起降每次外场都风平浪静。