QGC地图框架(第一集)

联系作者QQ 843230304

QGC地图框架是 QGroundControl 基于 Qt 地图插件机制 实现的 。

QT地理服务插件 接口类是 QGeoServiceProviderFactory

所以要实现 QGC地理服务插件QGeoServiceProviderFactoryQGC 需要自己定义实现 4个接口虚函数:

  1. 位置地理编码引擎:
    /*!
     * \brief QGC位置地理编码引擎,
     *        返回一个用参数初始化的新QGeoCodingManagerEngine实例,该实例实现 位置地理编码 功能。
     * \param parameters
     * \param error
     * \param errorString
     * \return
     */
    QGeoCodingManagerEngine*    createGeocodingManagerEngine    (const QVariantMap ¶meters, QGeoServiceProvider::Error *error, QString *errorString) const;
  1. 地图映射管理器引擎:
    /*!
     * \brief QGC瓦片地图映射管理器引擎,
     *        返回一个用参数初始化的新QGeoMappingManagerEngine实例,该实例实现 基本地图 功能。
     * \param parameters
     * \param error
     * \param errorString
     * \return
     */
    QGeoMappingManagerEngine*   createMappingManagerEngine      (const QVariantMap ¶meters, QGeoServiceProvider::Error *error, QString *errorString) const;
  1. 路径规划引擎:
    /*!
     * \brief 返回一个用参数初始化的新QGeoRoutingManagerEngine实例,该实例实现 路径规划 功能。
     * \param parameters
     * \param error
     * \param errorString
     * \return
     */
    QGeoRoutingManagerEngine*   createRoutingManagerEngine      (const QVariantMap ¶meters, QGeoServiceProvider::Error *error, QString *errorString) const;
  1. 位置搜索引擎:
 /*!
     * \brief 返回一个用参数初始化的新QPlaceManagerEngine实例,该实例实现了 位置搜索 功能。
     * \param parameters
     * \param error
     * \param errorString
     * \return
     */
    QPlaceManagerEngine*        createPlaceManagerEngine        (const QVariantMap ¶meters, QGeoServiceProvider::Error *error, QString *errorString) const;

还有两个重要的步骤:

    // 地理服务接口
    Q_INTERFACES(QGeoServiceProviderFactory)

    // 配置插件元数据
    Q_PLUGIN_METADATA(IID "org.qt-project.qt.geoservice.serviceproviderfactory/5.0" FILE "qgc_maps_plugin.json")

其中qgc_maps_plugin.json:

{
    "Keys": ["qgc-maps"],
    "Provider": "QGroundControl",
    "Version": 101,
    "Experimental": false,
    "Features": [
        "OnlineMappingFeature",
        "OnlineGeocodingFeature",
        "ReverseGeocodingFeature"
    ]
}

"Provider": "QGroundControl" 字段提供了插件名称;这个名称可以使得QML地图 Map 使用此自定义插件
在FlightMap.qml 中使用:

Map{
	id: _map
	
    //--QGCLocationPlugin地图插件名称
    //--qgc_maps_plugin.json 文件所描述的字段 "Provider": "QGroundControl"
    plugin:                     Plugin { name: "QGroundControl" }
    
}

你可能感兴趣的:(QT/QML)