文章目录

  • 前言
  • 一、天地图密钥的申请
  • 二、QGC前后端注册天地图并添加瓦片地址

前言

在QGC自带的地图里,能使用且好用的地图不多,很多地图只有影像图没有注记图层,混合图层能用的好像只有Bing的Hybrid。现在有一个项目要求使用国内的地图,在高德百度腾讯天地图之中最后采用了天地图,因为天地图基本不存在坐标系兼容的问题,前几者要么采用火星坐标系,要么自己自定义的坐标系,只有天地图是采用类似于WGS84的坐标系(误差和偏移只有毫米级别,基本可以忽略)。下面记录下实现过程。但是天地图官网是没有混合图层的瓦片地址的(至少我没找到直接可用的混合图层),需要自己把影像图和注记图层结合起来。


一、天地图密钥的申请

这个不难,不详细说明,自行百度。Tips:记得申请浏览器端密钥,不要选择服务器端密钥。

二、QGC前后端注册天地图并添加瓦片地址

1.本文使用的QGC版本4.0.11,在GenericMapProvider.h文件末尾添加两个Class。
//天地图注记图
class TianDiTextSatMapProvider : public MapProvider {Q_OBJECTpublic:TianDiTextSatMapProvider(QObject* parent = nullptr): MapProvider(QStringLiteral("www.tiandi.com"), QStringLiteral("jpg"),AVERAGE_TILE_SIZE, QGeoMapType::SatelliteMapDay, parent) {}QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override;private:const QString _versionBingMaps = QStringLiteral("563");
};//天地图影像图
class TianDiImgSatMapProvider : public MapProvider {Q_OBJECTpublic:TianDiImgSatMapProvider(QObject* parent = nullptr): MapProvider(QStringLiteral("www.tiandi.com"), QStringLiteral("jpg"),AVERAGE_TILE_SIZE, QGeoMapType::SatelliteMapDay, parent) {}QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override;private:const QString _versionBingMaps = QStringLiteral("563");
};
2.在GenericMapProvider.cpp里实现_getURL函数
QString TianDiTextSatMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) {Q_UNUSED(networkManager)//最后的QStringLiteral是自己申请的天地图网页版密钥return QStringLiteral("http://t1.tianditu.gov.cn/cia_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cia&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX=%1&TILEROW=%2&TILECOL=%3&tk=%4").arg(zoom).arg(y).arg(x).arg(QStringLiteral("0586ae92d14ee8a98ec4443d7f13fb7a"));
}QString TianDiImgSatMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) {Q_UNUSED(networkManager)return QStringLiteral("http://t1.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX=%1&TILEROW=%2&TILECOL=%3&tk=%4").arg(zoom).arg(y).arg(x).arg(QStringLiteral("0586ae92d14ee8a98ec4443d7f13fb7a"));   }

在QGCMapUrlEngine.cpp里注册影像图层和注记图层

_providersTable["TianDiTu Satellite Map"] = new TianDiImgSatMapProvider(this);_providersTable["TianDiTu Text"] = new TianDiTextSatMapProvider(this);

做到这里,天地图的影像图层和注记图层是已经添加进QGC里了,但是并没有把影像图层和注记图层结合起来,只能显示单一图层。Qt在QtLocation模块可以将两个Map贴在一起使用,即可将两个单一图层合并成混合图层,实际上可以理解为加载了两个地图。单一图层效果如下:
这是加载了天地图的注记图层,只有道路和文字标记,没有房屋建筑。
在FlightMap.qml里找到 MapQuickItem模块,并在其后添加一个Map标记图层

     MapQuickItem {anchorPoint.x:  sourceItem.width / 2anchorPoint.y:  sourceItem.height / 2visible:        gcsPosition.isValidcoordinate:     gcsPositionsourceItem: Image {id:             mapItemImagesource:         isNaN(gcsHeading) ? "/res/QGCLogoFull" : "/res/QGCLogoArrow"mipmap:         trueantialiasing:   truefillMode:       Image.PreserveAspectFitheight:         ScreenTools.defaultFontPixelHeight * (isNaN(gcsHeading) ? 1.75 : 2.5 )sourceSize.height: heighttransform: Rotation {origin.x:       mapItemImage.width  / 2origin.y:       mapItemImage.height / 2angle:          isNaN(gcsHeading) ? 0 : gcsHeading}}}//叠加标注信息图层   默认始终添加标注图层,否则QGC在缺少或者无法加载地图时,发现容易出现崩溃Map {anchors.fill: parentplugin: Plugin {name: "QGroundControl"
//            PluginParameter {//                name: "mapProvider"
//                value: "tiandituImg"
//            }
//            PluginParameter {//                name: "format"
//                value: "png"
//            }}gesture.enabled: falsecenter: parent.centercolor: 'transparent' // Necessary to make this map transparentminimumFieldOfView: parent.minimumFieldOfViewmaximumFieldOfView: parent.maximumFieldOfViewminimumTilt: parent.minimumTiltmaximumTilt: parent.maximumTiltminimumZoomLevel: parent.minimumZoomLevelmaximumZoomLevel: parent.maximumZoomLevelzoomLevel: parent.zoomLeveltilt: parent.tilt;bearing: parent.bearingfieldOfView: parent.fieldOfViewz: parent.z + 1;Component.onCompleted: {updateActiveMapTypeText(this,"TianDiTu Text");}}

在FlightMap.qml里添加updateActiveMapTypeText 函数

 function updateActiveMapType() {var settings =  QGroundControl.settingsManager.flightMapSettingsvar fullMapName = settings.mapProvider.value + " " + settings.mapType.valuefor (var i = 0; i < _map.supportedMapTypes.length; i++) {if (fullMapName === _map.supportedMapTypes[i].name) {_map.activeMapType = _map.supportedMapTypes[i]return}}}function updateActiveMapTypeText(control,para) {for (var i = 0; i < control.supportedMapTypes.length; i++) {if (para === control.supportedMapTypes[i].name) {control.activeMapType = control.supportedMapTypes[i]return}}}

至此,QGC地图修改为国内天地图,并将影像图和注记图层结合起来工作完成,
在常规界面中地图提供商:TianDitu;地图类型:Satellite Map

最后实现的效果如下:

若想实现更换其它地图商和地图类型(坐标系必须兼容,若不兼容,必须将坐标系转换成WGS84),只需按照上述流程做对应更改即可。楼主第一次写博客,文档格式可能有些不对之处,或者内容若有错误,请各位勿喷。

QGC使用国内天地图卫星图并添加注记图层相关推荐

  1. QGIS二次开发地图添加标记添加注记Svg小图标SvgItem

    QGIS二次开发地图添加标记添加注记Svg小图标 即QgsAnnotationLayer.QgsMarkerSymbol和QgsAnnotationMarkerItem的用法,我把QGIS3.20软件 ...

  2. ArcEngine添加注记

    ArcEngine添加注记 标注和注记是ArcEngine中提供的两种使用文字信息标注地图要素的方式.其中标注是作为图层的属性存在的,可以动态创建,注记作为地理要素被存储.需要注意的是Shp文件不支持 ...

  3. arcgis10之给图层添加注记

    右击需要添加注记的图层,点击属性. 选择"标注"页,进行如下图操作即可. 添加注记的效果如下图.

  4. ArcMAP 添加注记与编辑

    本次实验演示一个新建的注记文本图层,也就是它与数据要素图层是分开的.1:先新建一个mdb文件夹,用于专门存放注记.然后在2处把名称和别名填好,并在3处的下拉选项中选择注记要素.点击下一步. 设置坐标系 ...

  5. 天地图默认为卫星图包括地名标记方法,天地图添加各类注记或图层方法

    通过官网的介绍,天地图默认是加载矢量图的,那么当我们默认使用影像底图的时候只有影像底图,没有地名注记,开发文档没有明确说明如何添加,经过个人理解,可以通过下面的方法添加注记. 根据地图API定义图层服 ...

  6. 【GIS工具】谷歌卫星图下载工具之再聊坐标问题

    按照设想,在poi加载工具之后,围绕三调转换和调研的基础工具就差卫星图了,所以就开始了写这个工具,但各种坐标之间的转换问题一直都没有一个满意的解决办法,先发一个版本,以后再更新! 1.聊UTM坐标系 ...

  7. 卫星图瓦片爬取之google卫星图偏移的问题

    工具箱做了一个卫星图瓦片爬取工具,本来一切很顺利,天地图顺利解决,然后发现谷歌卫星图偏移很大啊. 爬取的18级天地图如下,与三调用地范围一致 爬取的谷歌卫星图如下,向西北偏移了有500米. 在CSDN ...

  8. 常见卫星图源下载教程

    文章目录 一.引言 二.在线地图源是简介 三.常见地信软件如何浏览与下载图源? (1)QGIS (2)arcgis pro (3)arcgis 四.各个图源的具体下载方法 (1)Google Eart ...

  9. 利用Google Earth卫星图更新地形图地物

    利用Google Earth卫星图更新地形图地物 最近使用1:1万地形图时,发现以往地形图地物与目前实际情况变化特别大,如道路.房屋.桥梁等等,许多地形图是8.9十年代测绘成果,已过去二.三十年,与实 ...

  10. 如何下载吉林省卫星图高清版大图

    如何下载吉林省卫星图高清版大图 吉林省行政区域简介 吉林,地处中国东北中部,东北亚地理中心,因清初建吉林乌拉城而得名,简称"吉",省会长春,原省会吉林市.地跨东经121°38′-1 ...

最新文章

  1. 深思:如何堂堂正正的做事
  2. Scrum立会报告+燃尽图(十月三十日总第二十一次)
  3. Dubbo 源码分析 - 服务引用
  4. Jpg, Jpeg, Exif
  5. Puppet 的部署与应用,看这一篇就够了
  6. office工作日志文件_风暴事件处理器–每个工作者的GC日志文件
  7. stringbuilder寻找字符串位置可能存在多个 java_Java 语言基础amp;String
  8. python白盒测试_白盒测试方法
  9. linux wamp,ubuntu wamp server ..................
  10. 51Nod-1259-整数划分 V2
  11. String常用方法有哪些?在工作中使用过哪些?
  12. IOS逆向-ASLR
  13. 忍痛分享两个无限免费大空间不限速的外国云盘,中国境内可访问,附上网盘测评
  14. html表格怎么加图片,添加图片到HTML表格动态
  15. IE下载时中文文件名乱码解决
  16. hexo博客next主题6.0版本个性化设置
  17. 刷原生android 8.0,怎样刷入安卓原生系统 小米古董机刷完安卓8.0健步如飞!感觉比MIUI9还快...
  18. 掌握这些知识,你的认知将提升一个档次
  19. redis主从保证数据一致性
  20. 信息学奥赛c++ 回文字符串 正解

热门文章

  1. robotium和appium的一些区别(转)
  2. serialVersionUID 生成
  3. Ubuntu 如何更换软件源
  4. Keras入门级MNIST手写数字识别超级详细教程
  5. 警察抓小偷打字游戏JAVA_警察抓小偷打字游戏金山打字通游戏
  6. win11任务栏(注册表修改/软件)完全透明-全网最详细教程
  7. 计算机enter代表什么意思,enter是什么意思
  8. CMMI认证适用的企业
  9. 可以查杀计算机病毒的软件,怎样彻底查杀计算机病毒
  10. qq连连看java版_Java实战_仿QQ连连看