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
}
如果对你有帮助,请给我点个赞!!!