QGC地面站二次开发配置高德地图(卫星影像+路网标注)

1.修改GenericMapProvider.h文件

加入以下代码,分别为卫星影像,路网地图,和以卫星影像为底图的混合地图

class GaodeSatMapProvider : public MapProvider {
    Q_OBJECT
public:
    GaodeSatMapProvider(QObject* parent = nullptr)
        : MapProvider(QStringLiteral("webapi.amap.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 GaodeRoadSatMapProvider : public MapProvider {
    Q_OBJECT
public:
    GaodeRoadSatMapProvider(QObject* parent = nullptr)
        : MapProvider(QStringLiteral("webapi.amap.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 GaodeHybridSatMapProvider : public MapProvider {
    Q_OBJECT
public:
    GaodeHybridSatMapProvider(QObject* parent = nullptr)
        : MapProvider(QStringLiteral("webapi.amap.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.c文件

加入以下代码,*号处替换为自己申请的密钥

QString GaodeSatMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) {
    Q_UNUSED(networkManager)
    return QStringLiteral("http://wprd01.is.autonavi.com/appmaptile?x=%1&y=%2&z=%3&lang=zh_cn&size=1&scl=1&style=6&key=**************").arg(x).arg(y).arg(zoom);//卫星影像
}

QString GaodeRoadSatMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) {
    Q_UNUSED(networkManager)
    return QStringLiteral("http://wprd01.is.autonavi.com/appmaptile?x=%1&y=%2&z=%3&lang=zh_cn&size=1&scl=1&style=8&key=**************").arg(x).arg(y).arg(zoom);//路网加注记
}

QString GaodeHybridSatMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) {
    Q_UNUSED(networkManager)
    return QStringLiteral("http://wprd01.is.autonavi.com/appmaptile?x=%1&y=%2&z=%3&lang=zh_cn&size=1&scl=1&style=6&key=**************").arg(x).arg(y).arg(zoom);//卫星影像
}

3.修改QGCMapUrlEngine.c文件

加入卫星地图,路网地图和混合地图

UrlFactory::UrlFactory() : _timeout(5 * 1000) {

    // Warning : in _providersTable, keys needs to follow this format :
    // "Provider Type"
#ifndef QGC_NO_GOOGLE_MAPS
    _providersTable["Google Street Map"] = new GoogleStreetMapProvider(this);
    _providersTable["Google Satellite"]  = new GoogleSatelliteMapProvider(this);
    _providersTable["Google Terrain"]    = new GoogleTerrainMapProvider(this);
    _providersTable["Google Hybrid"]    = new GoogleHybridMapProvider(this);
    _providersTable["Google Labels"]     = new GoogleLabelsMapProvider(this);
    _providersTable["高德 卫星地图"]       = new GaodeSatMapProvider(this);
    _providersTable["高德 路网地图"]       = new GaodeRoadSatMapProvider(this);
    _providersTable["高德 混合地图"]       = new GaodeHybridSatMapProvider(this);
    // _providersTable["天地图 卫星地图"]       = new TianSatMapProvider(this);
#endif

4.修改FlightMap.qml文件

加入以下代码

    // 将中心点、缩放级别等状态绑定到路网地图
    onCenterChanged:        roadMap.center = center
    onZoomLevelChanged:      roadMap.zoomLevel = zoomLevel
    onBearingChanged:        roadMap.bearing = bearing
    onTiltChanged:           roadMap.tilt = tilt

    // 路网叠加层(独立图层)
    Map {
        id: roadMap
        anchors.fill: parent
        plugin: Plugin { name: "QGroundControl" }
        color: "transparent"    // 设置背景透明
        opacity: 1              // 设置路网透明度
        gesture.enabled: false // 禁止手势操作,避免冲突
        visible: _map.activeMapType.name === "高德 混合地图"
        onMapReadyChanged: {
            if (roadMap.mapReady) {
                var targetType = null;
                for (var i = 0; i < roadMap.supportedMapTypes.length; i++) {
                    if (roadMap.supportedMapTypes[i].name === "高德 路网地图") {
                        targetType = roadMap.supportedMapTypes[i];
                        break;
                    }
                }
                if (targetType) {
                    roadMap.activeMapType = targetType;
                } else {
                    console.warn("未找到匹配的地图类型: 高德 路网地图");
                }
            }
        }
        // 同步主地图状态
        center: _map.center
        zoomLevel: _map.zoomLevel
        bearing: _map.bearing
        tilt: _map.tilt
    }

如果对你有帮助,请给我点个赞!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JMFS1119

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值