1.效果图展示

 gif如下所示(文件有点大,已压缩)

2.demo介绍

  • 支持跨平台linux/windows等,qt插件方式,非浏览器加载
  • 支持缓存保存离线地图实现
  • 支持地图转向、旋转、方位调整等

缓存目录如下图所示,当有缓存时,则会获取该缓存目录,否则在线联网更新数据:

3.地图插件介绍

qml提供了四个内建的地图在线插件"esri"、"mapbox"、"nokia"、"osm",但是都不是国内地图,对国内很不友好,本章我们实现一个高德地图插件,我们以osm插件为例,如下所示:

{"Keys": ["osm"],"Provider": "osm","Version": 100,"Experimental": false,"Features": ["OnlineMappingFeature","OnlineGeocodingFeature","ReverseGeocodingFeature","OnlineRoutingFeature","OnlinePlacesFeature"]
}

其中"Features"表示该插件支持的哪些特性,比如"OnlineMappingFeature"表示支持在线地图显示、则我们需要实现一个QGeoMappingManagerEngine引擎

每个引擎能支持的所有功能介绍如下所示:
QGeoRoutingManagerEngine
NoRoutingFeatures - Routing is not supported (KO: this option can be omitted)
OnlineRoutingFeature - Online routing support
OfflineRoutingFeature - Offline routing support
LocalizedRoutingFeature - Localized routing support
RouteUpdatesFeature - Support for dynamic path update
AlternativeRoutesFeature - Support for multiple alternative routes
ExcludeAreasRoutingFeature - Support for excluding routing factors
AnyRoutingFeatures - Supports anything your heart desires for routing

QGeoCodingManagerEngine
NoGeocodingFeatures - Geocoding is not supported
OnlineGeocodingFeature - Online geocoding support
OfflineGeocodingFeature - Offline geocoding support
ReverseGeocodingFeature - Reverse geocoding support
LocalizedGeocodingFeature - Localized geocoding support
AnyGeocodingFeatures - All of the above except NoGeocodingFeatures

QGeoMappingManagerEngine
NoMappingFeatures - No mapping supported
OnlineMappingFeature - Support for online maps
OfflineMappingFeature - Support for offline maps
LocalizedMappingFeature - Support for maps with localization
AnyMappingFeatures - All of the above except NoMappingFeatures

QPlaceManagerEngine
NoPlacesFeatures - Point-of-interest is not supported
OnlinePlacesFeature - Online Point-of-interest support
OfflinePlacesFeature - Offline Point-of-interest support
SavePlaceFeature - Support for saving custom points to the map
RemovePlaceFeature - Support for removing Point-of-interes on a map
SaveCategoryFeature - Create and save custom Point-of-interest categories
RemoveCategoryFeature - Remove Point-of-interest categories
PlaceRecommendationsFeature - Support for Recommended Point-of-interest according to keywords
SearchSuggestionsFeature - Suggestions support according to the search query part
LocalizedPlacesFeature - Localization support for Point-of-interes
NotificationsFeature - Support for Point-of-interes change notifications
PlaceMatchingFeature - Support for Point-of-interes comparison from two different providers
AnyPlacesFeatures - It's Time for You to Relax

4.QGeoServiceProviderFactory地图服务插件实现

实现一个QT地图服务插件,我们需要子类化QGeoServiceProviderFactory,以及实现 4个接口虚函数:

QGeoCodingManagerEngine*    createGeocodingManagerEngine() : 位置搜索引擎,实现位置地理编码,比如配置文件有"OnlineGeocodingFeature"相关特性,则需要实现该虚函数
QGeoMappingManagerEngine*   createMappingManagerEngine() : 地图映射管理器引擎,实现地图显示,比如配置文件有"OnlineMappingFeature"相关特性,则需要实现该虚函数
QGeoRoutingManagerEngine*   createRoutingManagerEngine() : 路径规划引擎,实现路径规划,比如配置文件有"OnlineRoutingFeature"相关特性,则需要实现该虚函数
QPlaceManagerEngine*        createPlaceManagerEngine() : 位置搜索引擎,实现位置搜索,比如配置文件有"OnlinePlacesFeature"相关特性,则需要实现该虚函数

由于本章我们只需要实现一个在线高德地图显示,所以只需要实现QGeoMappingManagerEngine*   createMappingManagerEngine()虚函数即可.
自定义一个GeoServiceProviderFactory类,并且继承于QGeoServiceProviderFactory类. 
如果不生成dll的话,则需要在main函数中声明插件类:

Q_IMPORT_PLUGIN(GeoServiceProviderFactory)

GeoServiceProviderFactory代码如下所示:

class GeoServiceProviderFactory: public QObject, public QGeoServiceProviderFactory
{Q_OBJECTQ_INTERFACES(QGeoServiceProviderFactory)Q_PLUGIN_METADATA(IID "org.qt-project.qt.geoservice.serviceproviderfactory/5.0" FILE "maps_plugin.json")public:QGeoMappingManagerEngine*   createMappingManagerEngine  (const QVariantMap &parameters, QGeoServiceProvider::Error *error, QString *errorString) const;   // 返回我们子类化的地图映射管理器引擎类
};

Q_PLUGIN_METADATA宏用来描述该属性的元信息

IID "org.qt-project.qt.geoservice.serviceproviderfactory/5.0"  则用来描述地图服务的通用接口描述符、
FILE "map_plugin.json"  则标明我们插件的配置描述文件是谁.

map_plugin.json配置文件如下所示:

{"Keys": ["Gaode"],"Provider": "Gaode","Version": 100,"Experimental": false,"Features": ["OnlineMappingFeature","OnlineGeocodingFeature","ReverseGeocodingFeature"]
}

假如我们qml去使用Gaode插件,如下所示:

Map {id: _mapanchors.fill: parent// 地图插件plugin: Plugin { name: "Gaode" }}

那么就会根据"Gaode"去找到GeoServiceProviderFactory的createMappingManagerEngine虚函数,从而注册一个地图映射管理器引擎给qml显示地图用.

未完待续,具体实现细节参考文章:

61.qt quick-qml高德地图实现V1版本(跨平台支持、无需浏览器内核,运行迅速,下个版本实现位置搜索)_心中无女人 拔刀自然神 剑谱第一页 忘掉心上人-CSDN博客

下章学习:

63.qt quick-qml使用高德地图插件实现V2版本(新增:位置搜索、路径规划、轨迹编辑等)_获得黑色生命力,抵抗时间扭曲,坚持去做一件有长期有意义的事-CSDN博客

qt quick-qml高德地图实现V1版本(跨平台支持、无需浏览器内核,运行迅速,下个版本实现位置搜索)相关推荐

  1. Qt Quick QML 实例之疯狂数字游戏(QML C++混合编程、翻译、QSetting )【建议收藏】

    文章目录 一.开门见山 二.最基本的框架(v0.1) 1. 后端数据处理 2. 导出 C++ 对象的 QML 的属性 3. 前台 UI 数据 三.完善执行逻辑(v0.2) 四.发布版本(v1.0) 1 ...

  2. Qt Quick Qml 之QML与C++ 混合编程学习

    <QML与C++ 混合编程学习> 1. 在 QML 中使用 C++ 类和对象 1) C++ 类的修改 2) 注册 QML 类型 3) 在 QML 中导入类型 4) 在 QML 创建由 C+ ...

  3. Qt Quick QML实现自定义虚拟软键盘详解

    Qt Quick QML实现自定义虚拟软键盘详解 在Qt5.8版本推出的QML软键盘功能中,有两种实现方案.一种是基于中文汉字数据库,另一种是基于Google拼音输入引擎.然而,相比于官方软键盘,这两 ...

  4. QT Quick QML 实例之 Popup 弹出界面

    QT Quick QML 实例之 Popup 弹出界面 一.演示 二.实现过程 1. 居中弹出 2. 正下方弹出 所有的热爱都要不遗余力,真正喜欢它便给它更高的优先级,和更多的时间吧! GIT工程文件 ...

  5. QT Quick Qml 实例——滑块拖动颜色框的平移(Gradient、drag、clip、transform、antialiasing)

    <实例--滑块拖动颜色框的平移> 1. 简介 2. 详解 所有的热爱都要不遗余力,真正喜欢它便给它更高的优先级,和更多的时间吧! QML其它文章请点击这里:     QT QUICK QM ...

  6. qt qml 高德地图--WebAPI 获取静态地图

    高德地图提供了很多Web API,本文展示如何使用Qt + qml 获取静态地图 静态地图Web API https://lbs.amap.com/api/webservice/guide/api/s ...

  7. 64.qt quick-qml使用高德地图插件实现V2版本(新增:位置搜索、路径规划、轨迹编辑等)

    在61.章节里我们学习了如何实现一个map插件.所以本章来扩展内容.实现轨迹编辑等 bilibili视频预览:  bilibili链接 (之前的老版本,后面优化增加谷歌卫星了) 1.效果图展示 使用公 ...

  8. Qt Widgets 和 Qt Quick / QML

    简述 Qt Widget 是Qt传统的C++界面类库: Qt Quick 是Qt新生的QML界面类库: QML(Qt Modeling Language)是一种用户界面规范的声明式语言,用于替换Qt ...

  9. Qt Quick QML

    Qt Quick简介 Qt Quick是一个用于帮助开发者设计直观,现代,流畅的用户界面的技术集,近年来被广泛应用于手机,媒体播放器,机顶盒和其他手提设备.Qt Quick中包含了大量的用户界面元素, ...

最新文章

  1. java json解析 代码_Java构造和解析Json数据的两种方法详解一
  2. jdk5.0新特性—— 枚举
  3. 十五道java开发常遇到的计算机网络协议高频面试题
  4. C++ Primer 5th笔记(chap 19 特殊工具与技术)类成员指针
  5. 【Python】列表 list 添加元素的几种方法
  6. redis 首次请求_Redis主从复制
  7. priority_queue 优先队列
  8. Tensorflow object detection API训练自己的目标检测模型 详细配置教程 (一)
  9. [转载] 【数据处理】 python 极速极简画图——频数(率)分布直方图
  10. MySQL设置mysqld_MySQL指定mysqld启动时所加载的配置文件
  11. 微软官方Power Query M语言规范参考手册(Power Query M function reference)
  12. word强调文字颜色在哪,强调文字颜色2 word2010如何将文字设置成红色,强调文
  13. 原代码审计笔记-安全缺陷
  14. [笔记]Pytorch框架下的入门应用:resnet34实现分类
  15. Edge、Chrome 1月12日之后继续使用Flash的方法(超级专业,高能预警)
  16. 给boss直聘的搜索结果加上hr活跃状态,少看点半年活跃的岗位,有书签版,油猴版
  17. win10wifi间歇性断网重启后恢复_如何解决win10无线网间歇性掉线
  18. Linux 学习笔记(借鉴黑马程序员Linux课程)
  19. oppo安卓面试题,Jetpack-MVVM高频提问和解答,面试必备
  20. docker导出mysql_Docker 导出 mysql 数据

热门文章

  1. 华硕笔记本win10系统wlan图标不见了
  2. Three.js 使用UV贴图制作地面
  3. 错误解决 kibana Unable to revive connection: http://elasticsearch:9200/”}
  4. jQuery源码分析(二)——Sizzle
  5. 如果我们刚刚计算出“excel”的散列函数,那么我们就不必再从头开始计算“excel”的散列函数。调整散列函数使得它能够利用前面的计算
  6. 计算机学院贺凤,我院举办2018年暑期社会实践宣讲会
  7. 微擎 goto + 混淆加密, 反向解密思路
  8. Classic AUTOSAR概述与目标
  9. Practical oral English
  10. python 条件语句 出生年月 判断星座_python学习:根据生日判断12星座